Send mail in Play2.4 whenever Logger.Error("some error")

140 Views Asked by At

I want to send mail whenever the following statement Logger.Error("some error") is encountered. One way that I can do this is to use the email sending code at every place wherever I have used logger.error. However I think that there is something like the SMTPAppender of logback which sends email by itself whenever logger.error is called but I cannot find the appropriate documentation or tutorials for this. Any help? What config to write...what plugins if any to be included and how?

Edit1: Here is my logback.xml

<configuration>

  <conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${application.home}/logs/application.log</file>
    <encoder>
      <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
    </encoder>
  </appender>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern>
    </encoder>
  </appender>

  <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
    <asynchronousSending>false</asynchronousSending>
    <smtpHost>smtp.gmail.com</smtpHost>
    <smtpPort>465</smtpPort>
    <SSL>true</SSL>
    <username>myusername</username>
    <password>mypwd</password>
    <to>toEmail</to>
    <from>fromEmail</from>
    <subject>Linka ERROR: %logger</subject>
    <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
    </layout>
  </appender>

  <logger name="play" level="INFO" />
  <logger name="application" level="INFO"/>

  <logger name="crawler" level="DEBUG">
    <!--<appender-ref ref="STDOUT" />-->
  </logger>

  <root level="ERROR">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="EMAIL" />
  </root>

</configuration>

The build.sbt is as:

name := """my-dnd"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayJava)

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
  "javax.mail" % "mail" % "1.4.5",
  "javax.activation" % "activation" % "1.1.1"

)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

I am not getting any errors also in the console but no mail is being sent. What am i missing? Please guide.

0

There are 0 best solutions below