0

I have a working jsf appliction with log4j configured to log different messages to different log files. But sometimes an error gets logged to the console in stead of a specific log file. This is mostly when for example a nullpointer error occurs in a third-party jar that I use. Is there a way to configure log4j so that all errors that are not specifically send to a log file are not send to the console but to a general log file?

    <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "dtd/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="LogAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="C:\\logs\\web.log"/>
        <param name="MaxFileSize" value="10000KB"/>
        <param name="MaxBackupIndex" value="10"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%x %-5p [%d{yyyyMMdd HH:mm:ss}] - %c:%L - %m%n"/>
        </layout>
    </appender>

    <appender name="WarnAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="C:\\logs\\warn.log"/>
        <param name="Threshold" value="warn"/>
        <param name="MaxFileSize" value="10000KB"/>
        <param name="MaxBackupIndex" value="10"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%x %-5p [%d{yyyyMMdd HH:mm:ss}] - %c:%L - %m%n"/>
        </layout>
    </appender>

    <appender name="WSAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="C:\\logs\\milesws.log"/>
        <param name="MaxFileSize" value="10000KB"/>
        <param name="MaxBackupIndex" value="10"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%x %-5p [%d{yyyyMMdd HH:mm:ss}] - %c:%L - %m%n"/>
        </layout>
    </appender>

    <appender name="AccessAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="C:\\logs\\access.log"/>
        <param name="MaxFileSize" value="10000KB"/>
        <param name="MaxBackupIndex" value="10"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%x %-5p [%d{yyyyMMdd HH:mm:ss}] - %c:%L - %m%n"/>
        </layout>
    </appender>

    <logger name="be.sofico.api.ws">
        <level value="debug" />
        <appender-ref ref="WSAppender" />
    </logger>

    <logger name="be.sofico.web">
        <level value="debug" />
        <appender-ref ref="LogAppender" />
    </logger>

    <logger name="org.ajax4jsf.event">
        <level value="all" />
        <appender-ref ref="LogAppender" />
    </logger>

    <logger name="org.apache">
        <level value="info" />
        <appender-ref ref="LogAppender" />
    </logger>

    <logger name="javax.enterprise.resource.webcontainer.jsf.lifecycle">
        <appender-ref ref="LogAppender" />
    </logger>

    <logger name="javax.faces">
        <level value="debug" />
        <appender-ref ref="LogAppender" />
    </logger>

    <logger name="com.sun.faces">
      <level value="all"/>
      <appender-ref ref="LogAppender" />
    </logger>

    <logger name="org.apache.catalina">
      <level value="warn"/>
      <appender-ref ref="LogAppender" />    
    </logger>

    <logger name="AccessLog">
      <level value="info"/>
      <appender-ref ref="AccessAppender" />
    </logger>

    <root>
        <level value="debug"/>
        <appender-ref ref="WarnAppender" />
    </root>
</log4j:configuration>

The error that is logged to console and not in any logfile

managedbean   E   <Null Message>
                                 com.sun.faces.spi.InjectionProviderException
    at com.sun.faces.vendor.WebContainerInjectionProvider.invokeAnnotatedMethod(WebContainerInjectionProvider.java:111)
    at com.sun.faces.vendor.WebContainerInjectionProvider.invokePreDestroy(WebContainerInjectionProvider.java:79)
    at com.sun.faces.mgbean.BeanBuilder.destroy(BeanBuilder.java:119)
    at com.sun.faces.mgbean.BeanManager.destroy(BeanManager.java:248)
    at com.sun.faces.application.WebappLifecycleListener.handleAttributeEvent(WebappLifecycleListener.java:265)
    at com.sun.faces.application.WebappLifecycleListener.sessionDestroyed(WebappLifecycleListener.java:133)
    at com.sun.faces.config.ConfigureListener.sessionDestroyed(ConfigureListener.java:306)
    at com.ibm.ws.session.http.HttpSessionObserver.sessionDestroyed(HttpSessionObserver.java:179)
    at com.ibm.ws.session.SessionEventDispatcher.sessionDestroyed(SessionEventDispatcher.java:160)
    at com.ibm.ws.session.StoreCallback.sessionInvalidated(StoreCallback.java:126)
    at com.ibm.ws.session.store.memory.MemorySession.invalidate(MemorySession.java:225)
    at com.ibm.ws.session.store.memory.MemoryStore.checkSessionStillValid(MemoryStore.java:429)
    at com.ibm.ws.session.store.memory.MemoryStore.runInvalidation(MemoryStore.java:373)
    at com.ibm.ws.session.WsSessionInvalidator.alarm(WsSessionInvalidator.java:64)
    at com.ibm.ejs.util.am._Alarm.run(_Alarm.java:133)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1659)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor1125.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at com.sun.faces.vendor.WebContainerInjectionProvider.invokeAnnotatedMethod(WebContainerInjectionProvider.java:109)
    ... 15 more
Caused by: java.lang.NullPointerException
    at be.sofico.web.frmwrk.FacesBean.getBean(FacesBean.java:59)
    at be.sofico.web.frmwrk.FacesBean.getWS(FacesBean.java:70)
    at be.sofico.web.frmwrk.mgbean.menu.MenuModelBase.destroy(MenuModelBase.java:46)
    ... 19 more
roel
  • 2,005
  • 3
  • 26
  • 41
  • You can configure the root logger (I do not recall exactly how it is done, but you can google it easily) – SJuan76 Jan 11 '13 at 13:54
  • I have a root logger, but still some errors are written to the console. I'll edit my question and attach current config and error that gets logged to console – roel Jan 11 '13 at 13:57
  • Being a Mojarra exception, log4j is not used unless you specify it. See http://stackoverflow.com/questions/5125988/how-to-forward-jsf-ri-mojarra-log-to-slf4j-or-log4j – SJuan76 Jan 11 '13 at 14:20
  • What do you mean? How do I specify using log4j? Don't quiet get what you mean, and the link doens't ring a bell. sorry – roel Jan 11 '13 at 14:23
  • Mojarra does not use log4j, so changing the log4j configuration won't change Mojarra log behavior. The link I provided explains how to link Mojarra logging system (`java.util.logging`) to log4j. – SJuan76 Jan 11 '13 at 14:25
  • But I don't use SLF4J but log4j. The link only explains solution for SLFJ4J – roel Jan 11 '13 at 14:55

0 Answers0