logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jacob Kjome <h...@visi.com>
Subject Re: separate log files for application's on weblogic with log4j using RepositorySelector
Date Wed, 11 Apr 2007 15:38:40 GMT

Looks mostly correct.  You could change jakarta.apache.org or
logging.apache.org, but that's inconsequential.  Also, you should apply a level
to the root logger, such as <level value="WARN"/>, or maybe set it to DEBUG for
testing.

See the Log4j Wiki [1] for links to WizardForge (look at the bottom of the
page), which will walk you through the steps of generating valid Log4j 1.2 and
1.3 compatible config files.

Just to be clear, I'm not advocating moving to Log4j 1.3, as it may never be
fully released outside of alpha builds.  I just want to to try it out since it
currently has a working JNDIContextSelector that you can use to test against. 
It's a selector that I know, at least in my testing, works.  If you find it to
work for you, you can adapt it to create your own selector which would be
compatible with Log4j 1.2.  I also forgot to mention that I created a Log4j-1.2
compatible ContextJNDISelector in the log4j sandbox [2].  It works slightly
differently than the one in Log4j-1.3, but it might provide a good base for you
to start from.

[1] http://wiki.apache.org/logging-log4j/Log4JProjectPages
[2]
http://svn.apache.org/viewvc/logging/sandbox/log4j/log4j_sandbox/tags/LOG4J_SANDBOX_ALPHA3/src/java/org/apache/log4j/selector/


Jake

Quoting sohan <sohan.kasula@mms.gov>:

>
> Hi jake,
>
> Before I start using Log4j-1.3, I want to confirm if my Log4j.xml is valid
> for my requirements
> Below is the xml..I removed SYSTEM entry as I was getting log4j.dtd file not
> found error during weblogic startup.
> In this xml do I need to specify logger entry? Am I missing anything!
>
> thanks,
> Sohan
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE log4j:configuration >
>
> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
> debug="false">
>
>    <!-- A time/date based rolling appender -->
>    <!-- Logs messages to ${jboss.server.home.dir}/log/test1.log -->
>    <!-- <appender name="TEST"
> class="org.jboss.logging.appender.DailyRollingFileAppender"> -->
>    <appender name="TEST" class="org.apache.log4j.RollingFileAppender">
>       <!-- <errorHandler
> class="org.jboss.logging.util.OnlyOnceErrorHandler"/> -->
>       <param name="File" value="pcs.log"/>
>       <param name="Append" value="false"/>
>
>       <!-- Rollover at midnight each day -->
>        <!-- <param name="DatePattern" value="'.'yyyy-MM-dd"/> -->
>
>       <layout class="org.apache.log4j.PatternLayout">
>          <!-- The default pattern: Date Priority [Category] Message\n -->
>          <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
>
>          <!-- The full pattern: Date MS Priority [Category] (Thread:NDC)
> Message\n
>          <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x)
> %m%n"/>
>           -->
>       </layout>
>    </appender>
>
>    <!-- ======================= -->
>    <!-- Setup the Root category -->
>    <!-- ======================= -->
>
>    <root>
>       <appender-ref ref="TEST"/>
>    </root>
>
> </log4j:configuration>
>
>
> Jacob Kjome wrote:
> >
> >
> > Have you tried using the JNDI repository selector solution, such as
> > in Log4j-1.3?  To test this out quickly, you could just try using
> > Log4j-1.3 and its ContextJNDISelector class to perform the repository
> > selection.  I know it works.  I'm not sure why you are seeing odd
> > results with the classloader-based selector you wrote, but I haven't
> > gone over the code intensively either.  In any case, don't use a
> > classloader-based approach.  It will give you nothing but headaches,
> > in my experience.
> >
> > Add the following to your server startup script...
> >
> > -Dlog4j.repositorySelector=JNDI
> >
> >
> > Add the following to your web.xml....
> >
> >      <listener>
> >          <!-- this feature may require building Log4j-1.3 from
> > source, as it may not be in the latest released alpha jar??? -->
> >
> >
>
<listener-class>org.apache.log4j.selector.servlet.ContextDetachingSCL</listener-class>
> >      </listener>
> >
> >      <env-entry>
> >          <description>JNDI logging context for this app</description>
> >          <env-entry-name>log4j/context-name</env-entry-name>
> >          <env-entry-value>myapp</env-entry-value>
> >          <env-entry-type>java.lang.String</env-entry-type>
> >      </env-entry>
> >
> >      <env-entry>
> >          <description>URL for configuring log4j context</description>
> >          <env-entry-name>log4j/configuration-resource</env-entry-name>
> >          <env-entry-value>myapp-log4j.xml</env-entry-value>
> >          <env-entry-type>java.lang.String</env-entry-type>
> >      </env-entry>
> >
> >
> > Jake
> >
> > At 07:08 PM 4/10/2007, you wrote:
> >  >
> >  >"What do you mean "'pcs' is the log file name"?  That would be the
> > logger
> >  >name,
> >  >not the file name."
> >  >My mistake, I meant to say that it is both the logger name as well as I
> >  >named the log file name same too after the application name.
> >  > I tried with both LogFactory of commons-logging as well as direct use
> > of
> >  >Log4j. Behavior is the same
> >  >I did notice one thing, Log information is being written normally from
> > java
> >  >classes that extend HttpServlet.
> >  >Logging from other java class files is not working as intended. My
> >  >application uses struts 1.2.9 too.
> >  >
> >  >thanks,
> >  >Sohan
> >  >
> >  >
> >  >Jacob Kjome wrote:
> >  >>
> >  >> Quoting sohan <sohan.kasula@mms.gov>:
> >  >>
> >  >>>
> >  >>> I changed to use Log4j.xml from Log4j.properties and also changed
to
> >  >>> non-static loggers and with in the static methods followed the link
> >  >>> examples. Now the logging is taking place only for the loggers
> > mentioned
> >  >>> in
> >  >>> the static methods, Log log = LogFactory.getLog("pcs"); pcs is the
> > log
> >  >>> file
> >  >>> name.
> >  >>>
> >  >>
> >  >> What do you mean "'pcs' is the log file name"?  That would be the
> > logger
> >  >> name,
> >  >> not the file name.
> >  >>
> >  >> Also, I didn't mean to direct you to use commons-logging.  If you were
> >  >> using
> >  >> log4j directly, please keep using it.  In fact, log wrappers like
> > SLF4J
> >  >> and
> >  >> commons-logging have issues when it comes to repository selectors.
> > Search
> >  >> the
> >  >> SLF4J user list for details on this.  There's also a bug in the SLF4J
> >  >> database
> >  >> about this.  I believe the same applies to commons-logging.  Log4j
> > cannot
> >  >> guarantee proper logging separation when you use a wrapper.
> >  >>
> >  >>> Any idea as to why the non static logger is not working!
> >  >>>
> >  >>
> >  >> I would guess it's because you are using commons-logging.  Use Log4j
> >  >> directly,
> >  >> just as you were previously.  I only sent you the commons-logging link
> >  >> because
> >  >> they had a good synopsis of the static logger issue, not to convince
> > you
> >  >> to
> >  >> move to commons-logging.
> >  >>
> >  >>
> >  >> Jake
> >  >>
> >  >>> thanks,
> >  >>> Sohan
> >  >>>
> >  >>>
> >  >>> Jacob Kjome wrote:
> >  >>> >
> >  >>> >
> >  >>> > 1.  Use non-static loggers (for Serializable classes, you'll
need
> > to
> >  >>> > mark these as transient)
> >  >>> > 2.  Avoid Classloader-based repository selectors.  Use JNDI-base
> >  >>> > selectors.  There's already one written for Log4j-1.3alpha. 
Even
> > if
> >  >>> > you don't care to use 1.3, you can use it to get an idea of how
to
> >  >>> > write one for 1.2.
> >  >>> >
> >  >>> >
> >  >>> > See:
> >  >>> > http://www.qos.ch/logging/sc.jsp
> >  >>> > http://wiki.apache.org/jakarta-commons/Logging/StaticLog
> >  >>> >
> >  >>> >
> >  >>> > Jake
> >  >>> >
> >  >>> > At 03:09 PM 4/9/2007, you wrote:
> >  >>> >  >
> >  >>> >  >I followed some examples on the web to use RepositorySelector
to
> >  >>> > implement
> >  >>> >  >separate logging for 2 applications deployed on the same
instance
> > of
> >  >>> >  >weblogic server. I have the Lgo4j.properties file under
Web-Inf/
> >  >>> folder,
> >  >>> >  >This is loaded through web.xml file through a startup servlet.
> >  >>> Problem
> >  >>> > is
> >  >>> >  >logging is taking place either in Log4j.log file or other
> >  >>> applications
> >  >>> > log
> >  >>> >  >file. In each java class file, I use..
> >  >>> >  >       private static Logger log =
> >  >>> Logger.getLogger(LoginFilter.class);
> >  >>> >  >and call the log .info ..accordingly. In log4j properties
file,
> > only
> >  >>> >  >difference is file name for 2 applications.
> >  >>> >  >
> >  >>> >  >I am using weblogic 8.1.6 and Log4j 1.2.8 versions
> >  >>> >  >
> >  >>> >  >thanks for the help
> >  >>> >  >Sohan
> >  >>> >  >
> >  >>> >  >web.xml entry...
> >  >>> >  >
> >  >>> >  >       <servlet>
> >  >>> >  >               <servlet-name>log4j-init</servlet-name>
> >  >>> >  >
> >  >>> <servlet-class>pcs.common.util.Log4jInit</servlet-class>
> >  >>> >  >           <init-param>
> >  >>> >  >                   <param-name>Log4JProperties</param-name>
> >  >>> >  >
> >  >>> > <param-value>/WEB-INF/log4j-dev.properties</param-value>
> >  >>> >  >           </init-param>
> >  >>> >  >           <init-param>
> >  >>> >  >                   <param-name>LogToFileOnly</param-name>
> >  >>> >  >                   <param-value>false</param-value>
> >  >>> >  >           </init-param>
> >  >>> >  >               <load-on-startup>1</load-on-startup>
> >  >>> >  >       </servlet>
> >  >>> >  >
> >  >>> >  >public class Log4jInit extends HttpServlet {
> >  >>> >  >       static Logger log = Logger.getLogger(Log4jInit.class);
> >  >>> >  >       public void init() throws ServletException {
> >  >>> >  >
> >  >>> >
> > System.out.println("\n\n---------------Log4jInit---------------\n\n");
> >  >>> >
> >  >>> >  >
> > MyRepositorySelector.init(this.getServletConfig());
> >  >>> >  >               Logger log = Logger.getLogger(this.getClass());
> >  >>> >  >               log.info("Log message from Log4jInit servlet");
> >  >>> >  >               System.out.println("\n\n---------------Log4jInit:
> >  >>> >  >Complete---------------\n\n");
> >  >>> >  >
> >  >>> >  >       }
> >  >>> >  >
> >  >>> >  >}
> >  >>> >  >
> >  >>> >  >public class MyRepositorySelector implements RepositorySelector
> >  >>> >  >{
> >  >>> >  >   private static boolean initialized = false;
> >  >>> >  >   private static Object guard = LogManager.getRootLogger();
> >  >>> >  >
> >  >>> >  >   private static Map repositories = new HashMap();
> >  >>> >  >   private static LoggerRepository defaultRepository;
> >  >>> >  >
> >  >>> >  >   public static synchronized void init(ServletConfig config)
> >  >>> >  >        throws ServletException {
> >  >>> >  >      if( !initialized ) // set the global RepositorySelector
> >  >>> >  >      {
> >  >>> >  >         defaultRepository = LogManager.getLoggerRepository();
> >  >>> >  >         RepositorySelector theSelector = new
> > MyRepositorySelector();
> >  >>> >  >         LogManager.setRepositorySelector(theSelector, guard);
> >  >>> >  >         initialized = true;
> >  >>> >  >      }
> >  >>> >  >
> >  >>> >  >      Hierarchy hierarchy = new Hierarchy(new
> >  >>> > RootCategory(Level.DEBUG));
> >  >>> >  >      loadLog4JConfig(config, hierarchy);
> >  >>> >  >      ClassLoader loader =
> >  >>> > Thread.currentThread().getContextClassLoader();
> >  >>> >  >      repositories.put(loader, hierarchy);
> >  >>> >  >   }
> >  >>> >  >
> >  >>> >  >   public static synchronized void removeFromRepository()
{
> >  >>> >  >
> >  >>> >
> > repositories.remove(Thread.currentThread().getContextClassLoader());
> >  >>> >  >   }
> >  >>> >  >
> >  >>> >  >
> >  >>> >  >   private static void loadLog4JConfig(ServletConfig config,
> >  >>> >  >                                       Hierarchy hierarchy)
> >  >>> >  >                                            throws
> > ServletException {
> >  >>> >  >        try {
> >  >>> >  >
> >  >>> >  >               String strLogProperties =
> >  >>> >  >
> >  >>> > config.getInitParameter(GlobalDictionary.LOG_PROPERTIES);
> >  >>> >  >               System.out.println("strLogProperties: " +
> >  >>> > strLogProperties);
> >  >>> >  >               Properties logProperties = new Properties();
> >  >>> >  >               try {
> >  >>> >  >
> >  >>> >
> >  >>>
> > >logProperties.load(config.getServletContext().getResourceAsStream(strL
> >  >>> >  >ogProperties));
> >  >>> >  >               } catch (Exception e) {
> >  >>> >  >                       System.out.println("ERROR: Loading
log4j
> >  >>> > properties: " +
> >  >>> >  >e.getMessage());
> >  >>> >  >                       //e.printStackTrace();
> >  >>> >  >               }
> >  >>> >  >               PropertyConfigurator propConf = new
> >  >>> > PropertyConfigurator();
> >  >>> >  >            propConf.doConfigure(logProperties, hierarchy);
> >  >>> >  >                       } catch (Exception e) {
> >  >>> >  >            throw new ServletException(e);
> >  >>> >  >        }
> >  >>> >  >    }
> >  >>> >  >
> >  >>> >  >   private MyRepositorySelector() {
> >  >>> >  >   }
> >  >>> >  >
> >  >>> >  >   public LoggerRepository getLoggerRepository() {
> >  >>> >  >      ClassLoader loader =
> >  >>> > Thread.currentThread().getContextClassLoader();
> >  >>> >  >      LoggerRepository repository =
> >  >>> >  >(LoggerRepository)repositories.get(loader);
> >  >>> >  >
> >  >>> >  >      if (repository == null) {
> >  >>> >  >          return defaultRepository;
> >  >>> >  >      } else {
> >  >>> >  >          return repository;
> >  >>> >  >      }
> >  >>> >  >   }
> >  >>> >  >}
> >  >>> >  >--
> >  >>> >  >View this message in context:
> >  >>> >
> >  >>>
> > >http://www.nabble.com/separate-log-files-for-application%27s-on-weblog
> >  >>> >  >ic-with-log4j-using-RepositorySelector-tf3549324.html#a9908677
> >  >>> >  >Sent from the Log4j - Users mailing list archive at Nabble.com.
> >  >>> >  >
> >  >>> >  >
> >  >>> >
> > >---------------------------------------------------------------------
> >  >>> >  >To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> >  >>> >  >For additional commands, e-mail:
> > log4j-user-help@logging.apache.org
> >  >>> >
> >  >>> >
> >  >>> >
> > ---------------------------------------------------------------------
> >  >>> > To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> >  >>> > For additional commands, e-mail: log4j-user-help@logging.apache.org
> >  >>> >
> >  >>> >
> >  >>> >
> >  >>>
> >  >>> --
> >  >>> View this message in context:
> >  >>>
> >  >>
> >  >http://www.nabble.com/separate-log-files-for-application%27s-on-weblog
> >  >ic-with-log4j-using-RepositorySelector-tf3549324.html#a9926589
> >  >>> Sent from the Log4j - Users mailing list archive at Nabble.com.
> >  >>>
> >  >>>
> >  >>> ---------------------------------------------------------------------
> >  >>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> >  >>> For additional commands, e-mail: log4j-user-help@logging.apache.org
> >  >>>
> >  >>>
> >  >>
> >  >>
> >  >>
> >  >>
> >  >> ---------------------------------------------------------------------
> >  >> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> >  >> For additional commands, e-mail: log4j-user-help@logging.apache.org
> >  >>
> >  >>
> >  >>
> >  >
> >  >--
> >  >View this message in context:
> >  >http://www.nabble.com/separate-log-files-for-application%27s-on-weblog
> >  >ic-with-log4j-using-RepositorySelector-tf3549324.html#a9931051
> >  >Sent from the Log4j - Users mailing list archive at Nabble.com.
> >  >
> >  >
> >  >---------------------------------------------------------------------
> >  >To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> >  >For additional commands, e-mail: log4j-user-help@logging.apache.org
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> > For additional commands, e-mail: log4j-user-help@logging.apache.org
> >
> >
> >
>
> --
> View this message in context:
>
http://www.nabble.com/separate-log-files-for-application%27s-on-weblogic-with-log4j-using-RepositorySelector-tf3549324.html#a9941069
> Sent from the Log4j - Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>




---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Mime
View raw message