zoukankan      html  css  js  c++  java
  • Apache CommonLogging + Log4J

    package cn.byref.demo.logging;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    public class CommonLoggingTest {
        public static void main(String[] args) {
            
            Log logger = LogFactory.getLog(CommonLoggingTest.class);
    //        Logger logger = Logger.getLogger(CommonLoggingTest.class);
    //        log.info("load test");
            logger.debug("CommonLoggingTest log");
        }
    }
    # An example log4j configuration file that outputs to System.out.  The
    # output information consists of relative time, log level, thread
    # name, logger name, nested diagnostic context and the message in that
    # order.
    
    # For the general syntax of property based configuration files see the
    # documenation of org.apache.log4j.PropertyConfigurator.
    
    log4j.rootLogger=DEBUG,B1,A2
    log3j.logger.cn.byref.demo.logging.CommonLoggingTest = DEBUG, B1
    
    # A1 is set to be a ConsoleAppender which outputs to System.out. 
    log4j.appender.B1=org.apache.log4j.ConsoleAppender
    
    # A1 uses PatternLayout.
    log4j.appender.B1.layout=org.apache.log4j.PatternLayout
    
    # The conversion pattern uses format specifiers. You might want to
    # change the pattern an watch the output format change.
    log4j.appender.B1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
    
    # In this example, we are not really interested in INNER loop or SWAP
    # messages. See the effects of uncommenting and changing the levels of
    # the following loggers.
    # log4j.logger.org.apache.log4j.examples.SortAlgo.INNER=WARN
    # log4j.logger.org.apache.log4j.examples.SortAlgo.SWAP=WARN
    
    # Appender A2 writes to the file "test".
    log4j.appender.A2=org.apache.log4j.FileAppender
    log4j.appender.A2.File=test.log
    
    # Truncate 'test' if it aleady exists.
    log4j.appender.A2.Append=true
    
    # Appender A2 uses the PatternLayout.
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=%-5r %-5p [%t] %c{2} - %m%n
     

    有必要详细说明一下调用LogFactory.getLog()时发生的事情。调用该函数会启动一个发现过程,即找出必需的底层日志记录功能的实现,具体的发现过程在下面列出。注意,不管底层的日志工具是怎么找到的,它都必须是一个实现了Log接口的类,且必须在CLASSPATH之中。Commons Logging API直接提供对下列底层日志记录工具的支持:Jdk14Logger,Log4JLogger,LogKitLogger,NoOpLogger (直接丢弃所有日志信息),还有一个SimpleLog。

    ⑴ Commons的Logging首先在CLASSPATH中查找commons-logging.properties文件。这个属性文件至少定义org.apache.commons.logging.Log属性,它的值应该是上述任意Log接口实现的完整限定名称。如果找到org.apache.commons.logging.Log属相,则使用该属相对应的日志组件。结束发现过程。

    ⑵ 如果上面的步骤失败(文件不存在或属相不存在),Commons的Logging接着检查系统属性org.apache.commons.logging.Log。 如果找到org.apache.commons.logging.Log系统属性,则使用该系统属性对应的日志组件。结束发现过程。

    ⑶ 如果找不到org.apache.commons.logging.Log系统属性,Logging接着在CLASSPATH中寻找log4j的类。如果找到了,Logging就假定应用要使用的是log4j。不过这时log4j本身的属性仍要通过log4j.properties文件正确配置。结束发现过程。

    ⑷ 如果上述查找均不能找到适当的Logging API,但应用程序正运行在JRE 1.4或更高版本上,则默认使用JRE 1.4的日志记录功能。结束发现过程。

    ⑸ 最后,如果上述操作都失败(JRE 版本也低于1.4),则应用将使用内建的SimpleLog。SimpleLog把所有日志信息直接输出到System.err。结束发现过程。

  • 相关阅读:
    第四章:Django模型——添加 Event发布会的表 报错
    第四章:Django模型——admin后台管理
    第四章:Django 模型 —— 设计系统表
    第三章:3.9 清除 Google 浏览器中的缓存
    第三章:3.9 关上窗户
    第三章:3.9 引用Django 认证登陆
    第三章:3.8 登陆 Django 默认后台
    降脂食物
    决定孩子人生高度的,不是知识而是这个!
    百万保险
  • 原文地址:https://www.cnblogs.com/byxxw/p/4895346.html
Copyright © 2011-2022 走看看