February 16, 2010

Configure Log4j (log4j.xml)

« Java3D Example | Main | Spring Roo Tutorial »

The Apache Log4J project offers a framework for logging aspects in Java software components. Today Apache Log4j is a defacto standard to realize priority/level based log messages in Java and .Net environments. The developer has to understand the following Log4J elements and classes to use this logging framework.

  • Appenders - defines handlers how to persist log entries, for example FileAppenders, SMTPAppenders, JDBCAppenders and so on
  • Level/Priority - diffentent levels of logging entries, e.g. INFO, DEBUG, ERROR, TRACE, ...
  • Logger - defines relations between packages and appenders, e.g. all classes of org.developers.* should be save per special appender
  • ...

You can configure your logging parameters per log4j.xml file, which should be saved at the root directory of your jar or source folder. The following log4j.xml file contains an basic configuration:
  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
  <!-- APPENDERS LIST -->
  <!-- show log entries on console -->
  <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n"/>
    </layout>
  </appender> 

  <!-- log all logs to a separate log file every day -->
  <appender name="orgDevelopersLogFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="org-file.log" />
    <param name="datePattern" value="'.'yyyy-MM-dd" />
    <param name="append" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n"/>
    </layout>
  </appender>

  <!-- log all logs to a separate log file every day -->
  <appender name="comDevelopersLogFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="file.log" />
    <param name="datePattern" value="'.'yyyy-MM-dd" />
    <param name="append" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n"/>
    </layout>
  </appender>

  <!-- send all error logs to my email address -->
  <appender name="mailAppender" class="org.apache.log4j.net.SMTPAppender">
    <param name="SMTPHost" value="localhost" />
    <param name="From" value="info@developers-blog.org" />
    <param name="To" value="rafael@developers-blog.org" />
    <param name="Subject" value="[BLOG ERROR LOG] ErrorList" />
    <!-- if your buffer contains 50 mails, an email should be sent -->
    <param name="BufferSize" value="50" />
    <!-- send only errors per email -->
    <param name="threshold" value="error" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
    </layout>
  </appender>

  <!-- LOGGER LIST -->
  <!-- log all classes in org.developers package -->
  <logger name="org.developers">
    <!-- level info logs -->
    <level value="INFO" />
    <appender-ref ref="orgDevelopersLogFileAppender"/>
  </logger>
  <logger name="com.developers">
    <!-- level debug logs -->
    <level value="DEBUG" />
    <appender-ref ref="mailAppender"/>
  </logger>

  <root>
    <priority value="debug"></priority>
    <!-- log all log entries on console -->
    <appender-ref ref="consoleAppender"/>
    <!-- push all error logs to mailAppender -->
    <appender-ref ref="mailAppender"/>
  </root>
</log4j:configuration>
Regards
Rafael Sobek

Technorati Tags:

Posted by rafael.sobek at 3:23 PM in Java

 

[Trackback URL for this entry]

Comment: schlind at Di, 16 Feb 4:58 PM

I suggest to remove the "comDevelopersLogFileAppender" because it points to the same file as the "orgDevelopersLogFileAppender" and is not referenced by a logger. Also the "mailAppender" could be enriched with credentials to show that smtp-authentication is possible. Good work!

Comment: Rafael at Di, 16 Feb 9:32 PM

Hi Sascha, thanks :-)

Pingback: Configure Log4j | Drakz Free Online Service at Mi, 17 Feb 7:33 PM

Configure Log4j
Languages , Technologies and Visions. Topics: Visions, Architecture Issues, Programming Languages , &#8230; Search: February 16, 2010. Original post: Configure Log4j Share and

Pingback: Spring Roo | Drakz Free Online Service at Mi, 17 Feb 7:33 PM

Configure Log4j
Blog &#8211; Programming Languages , Technologies and Visions. Topics: Visions, Architecture Issues, Programming Languages , .. View post: Spring Roo Share and

Comment: Charles Ofoefule at Mi, 30 Mrz 11:11 AM

Nice article and very descriptive.
Just for the records: the LOGGER LIST section can be eliminated provided that <param name="treshold" value="debug" /> is added to the appender section of the log4j.xml file.
Any way still cool.

Comment: milestone at Fr, 27 Mai 12:18 AM

Thanks.. this was useful

Comment: vj at Sa, 21 Jan 1:35 AM

I am trying to configure mail appender and am getting exception as below, I guess in need to specify smpt port, user name and password to solve this issue, you guys have any thought about this issue? Thanks vj

log4j:ERROR Error occured while sending e-mail notification.
com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 vg9sm7780945igb.4

at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1515)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634)
at javax.mail.Transport.send0(Transport.java:189)
at javax.mail.Transport.send(Transport.java:118)
at org.apache.log4j.net.SMTPAppender.sendBuffer(SMTPAppender.java:330)
at org.apache.log4j.net.SMTPAppender.append(SMTPAppender.java:215)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.error(Category.java:305)
at com.ranker.web.homepage.HomePageController.rhome(HomePageController.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ranker.web.core.filters.ExceptionHandlerFilter.doFilter(ExceptionHandlerFilter.java:35)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(ImportSupport.java:296)
at org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(ImportSupport.java:161)
at org.apache.jsp.index_jsp._jspx_meth_c_005fimport_005f0(index_jsp.java:84)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:57)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ranker.web.core.filters.CharsetFilter.doFilter(CharsetFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ranker.web.core.filters.RFilter.doFilterInternal(RFilter.java:80)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ranker.web.cache.RHtmlCache.doFilter(RHtmlCache.java:147)
at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ranker.web.core.protect.SiteProtectFilter.doFilter(SiteProtectFilter.java:83)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ranker.web.core.filters.DisableUrlSessionFilter.doFilter(DisableUrlSessionFilter.java:58)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ranker.web.core.filters.StaticURLRedirectFilter.doFilter(StaticURLRedirectFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ranker.web.core.filters.ConfiguredURLRedirectFilter.doFilter(ConfiguredURLRedirectFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)

Comment: vj at Sa, 21 Jan 1:38 AM

log4j:ERROR Error occured while sending e-mail notification.
com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 vg9sm7780945igb.4

at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1515)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634)
at javax.mail.Transport.send0(Transport.java:189)
at javax.mail.Transport.send(Transport.java:118)
at org.apache.log4j.net.SMTPAppender.sendBuffer(SMTPAppender.java:330)
at org.apache.log4j.net.SMTPAppender.append(SMTPAppender.java:215)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
....

I am getting above exception while configuring the log4j smtp appender, I guess its because, we are not specifying smtp port, username and password in the appender conf, any thought about this, am using xml based configuration for log4j

thanks
vj

Comment: vj at Sa, 21 Jan 1:40 AM

log4j:ERROR Error occured while sending e-mail notification.
com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required.
I am getting above exception while configuring the log4j smtp appender, I guess its because, we are not specifying smtp port, username and password in the appender conf, any thought about this, am using xml based configuration for log4j

thanks
vj

Comment: vj at Di, 24 Jan 7:31 PM

How to resolve the authentication issue while configuring MailAppender.

Thanks,

vj

Your comment:

(not displayed)
 
 
 

Live Comment Preview:

 
 
test