Руководство Java Commons Logging

1- Что такое Commons Logging?

В вашем приложении Java, вы хотите написать код для записи сообщения приложения во время его работы? Вы можете использовать одну из  следующих трех библиотек Logger:
  • Log4J Logger
  • Jdk14 Logger
  • Simple Logger
Commons Logging - это библиотека, которая позволяет вам легче работать с одной из трех библиотек выше. Таким образом, чтобы написать программу Log, сама библиотека не может быть Logger. Аналогичным образом, вы работаете с java.io для обработки потока данных, Commons IO - это библиотека, написанная на основе java.io, которая поможет вам легко обрабатывать IO, Common IO не может заменить  java.io.
Так что у вас 3 выбора:
Не имеет значения какой Logger вы выбираете, они обрабатываются одинаково с поддержкой Commons Logging.

2- Цель руководства

В этом руководстве я покажу вам, как работать с:
  • Commons Logging + Log4J Logger

3- Commons Logging + Log4J Logger

3.1- Библиотека (Library)

Библиотека  Commons Logging:
Maven:
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
</dependency>
Библиотека  Log4J Logger:
Maven:
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

3.2- Создать project

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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.o7planning</groupId>
   <artifactId>CommonsLoggingTutorial</artifactId>
   <version>0.0.1-SNAPSHOT</version>

   <dependencies>
       <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
           <version>1.1.3</version>
       </dependency>
       <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>1.2.17</version>
       </dependency>
   </dependencies>
   
</project>

3.3- Простой пример HelloWorld (Log в экран Console)

В этом шаге мы сделаем простой пример HelloWorld, он напишет Log в экране Console.
HelloWorld.java
package org.o7planning.tutorial.commonslogging;

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

public class HelloWorld {

   private static final Log log = LogFactory.getLog(HelloWorld.class);

   public static void main(String[] args) {
       log.debug("Example debug message ..");
       log.info("Example info message ..");
       log.warn("Example warn message ..");
       log.error("Example error message ..");
       log.fatal("Example fatal message ..");  
   }
}
commons-logging.properties
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

log4j.configuration=log4j.properties
log4j.properties
log4j.rootLogger=DEBUG, CA, NTEventLog

#Console Appender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
На самом деле, вы можете конфигурировать  Commons Logging для использования других библиотек Logger, а не log4j:
Запуск класса  HelloWorld:
С Log4j вы можете настроить в xml-файле, а xml-конфигурация проще и понятней, чем properties.
Откройте файл commons-logging.properties и измените:
commons-logging.properties
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

log4j.configuration=log4j.xml
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

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

   <appender name="MyConsole" class="org.apache.log4j.ConsoleAppender">
       <param name="Target" value="System.out" />
       <layout class="org.apache.log4j.PatternLayout">
           <param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n" />
       </layout>
   </appender>



   <root>
       <priority value="debug" />
       <appender-ref ref="MyConsole" />
   </root>

</log4j:configuration>
Запуск класса  HelloWorld и просмотр  Log на экране Console:

3.4- Пример посложнее (Log в файл)

Далее мы продолжим с более сложным примером, log в файл.
AdminApplication.java
package org.o7planning.tutorial.commonslogging.admin;

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

public class AdminApplication {

   private static final Log log = LogFactory.getLog(AdminApplication.class);

   public static void main(String[] args) {
       log.debug("Example debug message ..");
       log.info("Example info message ..");
       log.warn("Example warn message ..");
       log.error("Example error message ..");
       log.fatal("Example fatal message ..");

       try {
           raiseException();
       } catch (Exception e) {
           log.fatal("<Some Object>", e);
       }
   }

   private static void raiseException() throws Exception {
       throw new Exception("Test Exception");
   }
}
FrontEndApplication.java
package org.o7planning.tutorial.commonslogging.frontend;

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

public class FrontEndApplication {

   private static final Log log = LogFactory.getLog(FrontEndApplication.class);

   public static void main(String[] args) {
       log.debug("Example debug message ..");
       log.info("Example info message ..");
       log.warn("Example warn message ..");
       log.error("Example error message ..");
       log.fatal("Example fatal message ..");
   }
}
 
Добавляем конфигурацию в  log4j.xml, добавляем строчку конфигурации::
  <appender name="AdminFileAppender" class="org.apache.log4j.FileAppender">
      <param name="File" value="logs/admin.log" />
      <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern"
              value="%d{dd MMM yyyy HH:mm:ss,SSS} {%t} %-5p %c %x - %m%n" />
      </layout>
  </appender>

  <appender name="FrontEndFileAppender" class="org.apache.log4j.FileAppender">
      <param name="File" value="logs/frontEnd.log" />
      <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern"
              value="%d{dd MMM yyyy HH:mm:ss,SSS} {%t} %-5p %c %x - %m%n" />
      </layout>
  </appender>

  <!-- logger name must by package name! -->
  <logger name="org.o7planning.tutorial.commonslogging.admin">
      <level value="ERROR" />
      <appender-ref ref="AdminFileAppender" />
  </logger>

  <!-- logger name must by package name! -->
  <logger name="org.o7planning.tutorial.commonslogging.frontend">
      <level value="DEBUG" />
      <appender-ref ref="FrontEndFileAppender" />
  </logger>
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

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

  <appender name="MyConsole" class="org.apache.log4j.ConsoleAppender">
      <param name="Target" value="System.out" />
      <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n" />
      </layout>
  </appender>




  <appender name="AdminFileAppender" class="org.apache.log4j.FileAppender">
      <param name="File" value="logs/admin.log" />
      <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern"
              value="%d{dd MMM yyyy HH:mm:ss,SSS} {%t} %-5p %c %x - %m%n" />
      </layout>
  </appender>

  <appender name="FrontEndFileAppender" class="org.apache.log4j.FileAppender">
      <param name="File" value="logs/frontEnd.log" />
      <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern"
              value="%d{dd MMM yyyy HH:mm:ss,SSS} {%t} %-5p %c %x - %m%n" />
      </layout>
  </appender>

  <!-- logger name must by package name! -->
  <logger name="org.o7planning.tutorial.commonslogging.admin">
      <level value="ERROR" />
      <appender-ref ref="AdminFileAppender" />
  </logger>

  <!-- logger name must by package name! -->
  <logger name="org.o7planning.tutorial.commonslogging.frontend">
      <level value="DEBUG" />
      <appender-ref ref="FrontEndFileAppender" />
  </logger>


  <root>
      <priority value="debug" />
      <appender-ref ref="MyConsole" />
  </root>

</log4j:configuration>
Когда вы конфигурируете  log4j.xml, обратите внимание на порядок тэгов:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

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

    <!-- render -->
    <renderer></renderer>
    <renderer></renderer>
    <renderer></renderer>
    
    <!-- appender -->
    <appender></appender>
    <appender></appender>
    <appender></appender>
    
    
    <!-- plugin -->
    <plugin></plugin>
    <plugin></plugin>
    <plugin></plugin>
    
    <!-- logger -->
    <logger></logger>
    <logger></logger>
    <logger></logger>
    
    <!-- category -->
    <category></category>
    <category></category>
    <category></category>
    
    <!-- root -->
    <root></root>
    <root></root>
    <root></root>
    
    <!-- loggerfactory -->
    <loggerfactory></loggerfactory>
    <loggerfactory></loggerfactory>
    <loggerfactory></loggerfactory>
    
    <!-- categoryfactory -->
    <categoryfactory></categoryfactory>
    <categoryfactory></categoryfactory>
    <categoryfactory></categoryfactory>

</log4j:configuration>
Запуск класса  AdminApplication:
Запуск класса  FrontEndApplication:
Создана папка logs с двумя файлами log ( admin.log и frontEnd.log)

View more categories: