Send logs by Email Notification using Apache log4j SMTPAppender
Apache log4j provides log Appender (called SMTPAppender) to send email alerts for the log level configured in log4j configuration file. For example I using simple struts 2 application.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.bluething</groupId> <artifactId>SimpleStruts2</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SimpleStruts2 Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.16.3</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> </dependencies> <build> <finalName>SimpleStruts2</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> </project>
web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
struts.xml
</pre> <pre><?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" extends="struts-default"> <action name="getTutorial" class="com.wordpress.itfromzerotohero.action.TutorialAction"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>
TutorialAction.java
package com.wordpress.itfromzerotohero.action; import org.apache.log4j.Logger; public class TutorialAction { private static final Logger logger = Logger.getLogger(TutorialAction.class); public String execute(){ System.out.println("Hello from execute()"); if (logger.isDebugEnabled()) { logger.debug("execute()!"); } // logs exception logger.error("This is Error message", new Exception("Testing")); return "success"; } }
And the important thing is log4j.properties. I’m using mandrilapp service as smtp server.
# Root logger option log4j.rootLogger=ERROR, stdout, file, MAIL # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # Redirect log messages to a log file, support rolling backup file. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=${catalina.home}/logs/mystruts2app.log log4j.appender.file.MaxFileSize=5MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.SMTPHost=smtp.mandrillapp.com log4j.appender.MAIL.SMTPPort=587 log4j.appender.MAIL.SMTPUsername=--fill with smtp username-- log4j.appender.MAIL.SMTPPassword=--fill with smtp password-- log4j.appender.MAIL.From=--fill with mail from-- log4j.appender.MAIL.to=--fill with mail to-- log4j.appender.MAIL.Subject=[Dummy] Error Alert log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[%d{ISO8601}]%n%n%-5p%n%n%c%n%n%m%n%n log4j.appender.MAIL.LevelRangeFilter.LevelMin=error log4j.appender.MAIL.LevelRangeFilter.LevelMax=fatal
Test it by open this url http://localhost:8080/SimpleStruts2/getTutorial
If worked, an email will be sent.
Categories: JAVA
Comments (0)
Trackbacks (0)
Leave a comment
Trackback