15

I'm writing an application where I need to write log to a file using org.apache.commons.logging library, but i don't know how to start.

Can anyone help me?

Thanks & best regards.

1
  • 2
    Any reason why you want to use apache commong logging? I think you are better of using slf4j instead. Commented Aug 5, 2012 at 11:04

2 Answers 2

20

Try this sample, first you need two properties files likes this;

commons-logging.properties that put in your application's classpath. The contents of this file should look like:

    org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger

You can also use Log4j logger besides Jdk14Logger.And need second custom properties file.For example log-config.properties looks like this:

    # The following creates two handlers
    handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler
    # Set the default logging level for the root logger
    .level=SEVERE
    # log level for the "com.example" package
    sample.logging.level=FINE
    # Set the default logging level
    java.util.logging.ConsoleHandler.level=ALL
    java.util.logging.FileHandler.level=FINE
    # Set the default formatter
    java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
    java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
    # Specify the location and name of the log file
    java.util.logging.FileHandler.pattern=D:/temp/log/test.log

This is sample test class

     public class TestLog {

     private static Log log = LogFactory.getLog(TestLog.class);
     public static void main(String[] args) {
          log.info("Testing Info Message.");
              if (log.isDebugEnabled()) {
                  log.debug("Testing Debug Message.");
          }
        }
     }

This is sample package structure using eclipse;

enter image description here

And add TestLog class's Edit Configuration under VM arguments likes this;

  -Djava.util.logging.config.file=/D:/dev/workspace/LoggingTest/bin/log-config.properties(your properties file path)

enter image description here

And run then you can find your log file under D:/temp/log/test.log

Sign up to request clarification or add additional context in comments.

2 Comments

hi @Sai Ye , please instruct me how to put commons-logging.properties in your application's classpath . I try this,but it still not working.Should I go to TestLog class folder and run command line or not?
@KhanhQuach I edited log-config.properties and others.Check my edited post.You can try this with eclipse.
2

I hope this helps... this is how we have done in our project...

A. Include the jar in your project.

B. Define log4j.xml for loggers definition something like this...

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

    <appender name="FILE" class="org.jboss.logging.appender.RollingFileAppender">
    <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
    <param name="File" value="${jboss.server.log.dir}/server.log"/>
    <param name="Append" value="false"/>
    <param name="MaxFileSize" value="1048576KB"/>
    <param name="MaxBackupIndex" value="3"/>

 <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
 </layout>      
</appender>

<root>
   <appender-ref ref="CONSOLE"/>
   <appender-ref ref="FILE"/>
</root>

</log4j:configuration>

C. Use the logger in the class:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

Class YourClass{
    private static Log log = LogFactory.getLog(YourClass.class);

    public void yourMethod(){
        log.info("Your Message");
    }
}

EDIT: D. Since we have a JBoss AS environment so the application is configured to read log4j.xml like following (You would need an equivalent config):

<mbean code="org.jboss.logging.Log4jService"
  name="jboss.system:type=Log4jService,service=Logging"
  xmbean-dd="resource:xmdesc/Log4jService-xmbean.xml">
  <attribute name="ConfigurationURL">resource:jboss-log4j.xml</attribute>
  <!-- Set the org.apache.log4j.helpers.LogLog.setQuiteMode. As of log4j1.2.8
  this needs to be set to avoid a possible deadlock on exception at the
  appender level. See bug#696819.
  -->
  <attribute name="Log4jQuietMode">true</attribute>
  <!-- How frequently in seconds the ConfigurationURL is checked for changes -->
  <attribute name="RefreshPeriod">60</attribute>
</mbean>

3 Comments

That is only if you use log4j as the backend for commons logging.
I tried this , but it not works ! It seem to be that org.apache.commons.logging didn't read log4j file I define
Yes. We can use log4j and apache commons logging together.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.