zoukankan      html  css  js  c++  java
  • Log4j 日志

    日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录。Log4j是Apache基金会的一个项 目,Log4j是一个基于Java的日志组件,Log4j是Java的几个日志框架中的一种。

    日志记录器(Logger)是日志处理的核 心组件。log4j具有6种一般的日志级别(Level)。 日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4j API (http://jakarta.apache.org/log4j/docs/api/index.html): 

    public static final Level  TRACE
    The TRACE Level designates finer-grained informational events than the DEBUG. Since:1.2.12

    static Level DEBUG 
    DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。

    static Level INFO 
    INFO level表明消息在粗粒度级别上突出强调应用程序的运行过程。 

    static Level WARN
    WARN level表明会出现潜在错误的情形。

    static Level ERROR
    ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。

    static Level FATAL
    FATAL level指出每个严重的错误事件将会导致应用程序的退出。

    另外,还有两个可用的特别的日志记录级别: (以下描述来自log4j API http://jakarta.apache.org/log4j/docs/api/index.html): 
    static Level ALL
    ALL Level是最低等级的,用于打开所有日志记录。 

    static Level OFF
    OFF Level是最高等级的,用于关闭所有日志记录。 

    日志记录器(Logger)的行为是分等级的。具体分为:OFF、 FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来。程序会打印高于或等于所 设置级别的日志,设置的日志等级越高,打印出来的日志就越少。如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、 WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。

    1.Log4j的优点

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送地;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

    log4j的好处在于:

    (1) 通过修改配置文件,就可以决定log信息的目的地——控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。

    (2) 通过修改配置文件,可以定义每一条日志信息的级别,从而控制是否输出。在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(......)等)。

    (3) 使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。

    2.配置文件

    Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有FATAL、ERROR、WARN、INFO、DEBUG 、TRACE 、ALL ,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

    2.1 日志信息的优先级

    Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。 通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。 如在这里定义了INFO级别,则应用程序中所有低于INFO级别的日志信息将不被打印出来。

    2.2 输出源的使用

    有选择的能用或者禁用日志请求仅仅是Log4j的一部分功能。Log4j允许日志请求被输出到多个输出源。用Log4j的话说,一个输出源被称做一个Appender。

    Appender包括console(控制台), files(文件), GUI components(图形的组件), remote socket servers(socket 服务), JMS(java信息服务), NT Event Loggers(NT的事件日志), remote UNIX Syslog daemons(远程UNIX的后台日志服务)。它也可以做到异步记录。 一个logger可以设置超过一个的appender。 用addAppender方法添加一个appender到一个给定的logger。对于一个给定的logger它每个生效的日志请求都被转发到该logger所有的appender上和该logger的父辈logger的appender上。

            2.2.1 ConsoleAppender

    如果使用ConsoleAppender,那么log信息将写到Console。效果等同于直接把信息打印到System.out上了。

        2.2.2 FileAppender

    使用FileAppender,那么log信息将写到指定的文件中。这应该是比较经常使用到的情况。 相应地,在配置文件中应该指定log输出的文件名。如下配置指定了log文件名为log.txt。

    log4j.appender.appendername.File=log.txt 注意将appendername替换为具体配置中Appender的别名。

    注意:指定的log文件路径问题(默认为tomcatwebapp目录)

              2.2.3 DailyRollingAppender

    使用FileAppender可以将log信息输出到文件中,但是如果文件太大了读起来就不方便了。这时就可以使用DailyRollingAppender。DailyRollingAppender可以把Log信息输出到按照日期来区分的文件    中。配置文件就会 每天(时间可以设定)产生一个log文件,每个log文件只记录当天的log信息:

    #log to file
    log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
    #the file path base on ${catalina_home}/webapp
    log4j.appender.logfile.File=../logs/hrm.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p [%c] - %m%n

                2.2.4 RollingFileAppender

    文件大小到达指定尺寸的时候产生一个新的文件。

    log4j.appender.R=org.apache.log4j.RollingFileAppender
    #文件设置在tomcat目录下的logs子目录中
    log4j.appender.R.File=../logs/hrm.log
    log4j.appender.R.MaxFileSize=100KB
    log4j.appender.R.MaxBackupIndex=1
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

     这个配置文件指定了输出源 R ,是一个轮转日志文件。最大的文件是100KB,当一个日志文件达到最大尺寸时,Log4J会自动把hrm.log重命名为hrm.log.1 ,然后重建一个新的hrm.log文件,依次轮转。

    2.2.5 WriterAppender

    将日志信息以流格式发送到任意指定的地方。

    2.3 Layout的配置

    Layout指定了log信息输出的样式。

    2.3.1 布局样式

    org.apache.log4j.HTMLLayout(以HTML表格形式布局),  
    org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  
    org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  
    org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

      2.3.2 格式

    %m 输出代码中指定的消息  
    %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL  
    r 输出自应用启动到输出该log信息耗费的毫秒数  
    %c 输出所属的类目,通常就是所在类的全名  
    %t 输出产生该日志事件的线程名  
    %n 输出一个回车换行符,Windows平台为"rn",Unix平台为"n"  
    %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:20021018221028921  
    %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(Test Log4.java:10)

     

    3、完整例子

    log4j.rootLogger=debug, stdout, logfile
    
    #log to console
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p [%c] - %m%n
    
    #log to file
    log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
    #the file path base on ${catalina_home}/webapp
    log4j.appender.logfile.File=../logs/hrm.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p [%c] - %m%n
    
    #log4j.appender.logfile=org.apache.log4j.RollingFileAppender
    #log4j.appender.logfile.File=../logs/hrm.log
    #log4j.appender.logfile.MaxFileSize=100KB
    #log4j.appender.logfile.MaxBackupIndex=1
    #log4j.appender.logfile.layout.ConversionPattern=%p %t %c - %m%n
    欢迎加入我的QQ群(JAVA开发):216672921,程序 元 世界
  • 相关阅读:
    再谈 最速下降法/梯度法/Steepest Descent
    再谈 共轭方向法/Conjugate Direction Method In Optimization
    最速下降法/steepest descent,牛顿法/newton,共轭方向法/conjugate direction,共轭梯度法/conjugate gradient 及其他
    conjugate gradient method (共轭梯度法)
    牛顿法
    海森矩阵 Hessian matrix
    Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Random forest 和 gradient boosting的区别
    机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size
    机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting
    无约束最优化方法
  • 原文地址:https://www.cnblogs.com/icerainsoft/p/2665409.html
Copyright © 2011-2022 走看看