zoukankan      html  css  js  c++  java
  • log4j的使用

     日志的作用

    • 便于分析程序执行过程
    • 方便调试
    • 可以将业务数据存储到文件、数据库,有利于后期分析

    log4j简介

    log4j是 Apache 的一个开源项目,通过设置日志级别来指定输出哪些类型的日志。log4j功能强大:

    • 可以将日志信息输出到控制台、文件、GUI 组件、甚至是数据库中
    • 可以控制每一条日志的输出格式

    log4j的日志级别

    log4j在 org.apache.log4j.Level 类中定义了七种日志级别,级别从高到低依次为:

    • OFF   最高日志级别,即关闭日志
    • FATAL  导致应用程序退出的错误
    • ERROR     运行发生错误,但仍不影响系统(程序)继续运行
    • WARN    警告,即潜在的错误情形
    • INFO   一般用在粗粒度级别上,记录程序全程执行过程,强调应用程序的运行全程
    • DEBUG   一般用于细粒度级别上,对调试应用程序非常有帮助
    • ALL    最低日志级别,记录所有级别的日志

    一般只使用4个级别,优先级从高到低为 ERROR > WARN > INFO > DEBUG。


    log4j的组成

    log4j 主要由三部分组成:

    (1) Loggers (日志记录器)    控制日志的输出级别与日志是否输出

    (2)Appenders(输出端) 指定日志的输出到哪个地方(输出到控制台、文件等),常用的输出端:

    • ConsoleAppender   将日志输出到控制台
    • FileAppender   将日志输出到文件中
    • RollingFileAppender   将日志信息输出到一个文件中,并指定文件尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时创建一个新的文件来保存日志
    • DailyRollingFileAppender   将日志输出到文件中,会周期性输出到一个新的文件
    • JDBCAppender   把日志信息保存到数据库中

    (3)Layout(日志格式化器),常用的格式化器类型:

    • HTMLLayout   格式化日志输出为HTML表格形式
    • SimpleLayout   简单的日志输出格式化
    • PatternLayout   最强大的格式化器,可自定义日志输出格式

    log4j使用示例

    (1)下载log4j,导入log4j.jar

    注意是log4j,不是log4j2。

    log4j的作者先开发了log4j,版本号以1开头。后面对log4j进行重构,改进了log4j的不足,即log4j2,版本号以2开头。log4j和log4j2的用法区别很大。

    下载的log4j,有的版本含有log4j.jar、log4j-core.jar、log4j-api.jar3个jar包,我们只需导入log4j.jar。


    (2)src下新建log4j的配置文件log4j.properties

    ### 日志记录器Logger的全局设置 ###
    #第一个参数指定输出的最低日志级别,即只输出该级别及以上级别的日志
    #后面的参数指定要进行哪些配置
    log4j.rootLogger = DEBUG,stdout,D,E
    
    
    ### 设置控制台输出 ###
    #stdout即standard out 标准输出,默认为控制台,所以可将stdout换为Console
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    #指定标准输出设备为系统输出设备
    log4j.appender.stdout.Target = System.out
    #指定使用自定义的格式化器
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    #指定日志输出格式
    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
    
    ### 输出DEBUG及以上级别的日志到D:/logs/debug.log###
    #配置时,输出级别用首字母表示,D即DEBUG
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    #指定将日志输出到哪个文件中
    log4j.appender.D.File = D:/logs/debug.log
    #指定文件写入方式为追加
    log4j.appender.D.Append = true
    #指定最低输出级别
    log4j.appender.D.Threshold = DEBUG 
    log4j.appender.D.DatePattern='.'yyyy-MM-dd-HH-mm
    #指定日志输出格式
    log4j.appender.D.layout = org.apache.log4j.SimpleLayout 
    
    
    ### 输出ERROR及以上级别的日志到D:/logs/error.log ###
    log4j.appender.E = org.apache.log4j.RollingFileAppender
    log4j.appender.E.File =D:/logs/error.log 
    log4j.appender.E.Append = true
    log4j.appender.E.Threshold = ERROR 
    #指定日志文件的最大尺寸
    log4j.appender.E.MaxFileSize = 2KB
    #指定最大备份数为5
    log4j.appender.E.MaxBackupIndex = 5
    #指定日志输出格式使用自定义格式
    log4j.appender.E.layout = org.apache.log4j.PatternLayout
    #指定日志格式
    log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

    此配置只是为了演示效果。


    DailyRollingFileAppender 独有的选项

    DatePattern='.'yyyy-ww 

    可选的值:

    • '.'yyyy-MM  每月
    • '.'yyyy-ww   每周
    • '.'yyyy-MM-dd  每天
    • '.'yyyy-MM-dd-a  每天两次
    • '.'yyyy-MM-dd-HH  每小时
    • '.'yyyy-MM-dd-HH-mm  每分钟

    比如 '.'yyyy-MM-dd-HH-mm ,每分钟都产生一个同名的新文件来保存这分钟内的日志。

    同名的新文件?就是在扩展名后加上时间,要查看需要改扩展名。

    如果这分钟内没有日志输出,则不新建文件。


    RollingFileAppender独有的选项

    #指定日志文件的最大尺寸
    MaxFileSize = 2KB
    #指定最大备份数为5
    MaxBackupIndex = 5

    最初的文件是error.log,达到指定的最大尺寸后,把这个文件重命名为error.log.1(扩展名后面加索引),再新建一个error.log来保存日志。

    error.log达到最大尺寸后,把error.log.1重命名为error.log.2,把error.log重命名为error.log.1,再新建一个error.log来保存日志

    .......

    最多可有5个备份(1,2,3,4,5)。

    有了5个备份,如果error.log达到了最大尺寸,把error.log.5删除,将error.log.4重命名为error.log.5,error.log.3重命名为error.log.4......error.log重命名为error.log.1,再新建一个error.log来保存日志。


     

    日志输出格式

    • HTMLLayout    

    将日志以html代码的形式输出到指定文件中,将文件扩展名修改为.html即可查看效果:

     

    • SimpleLayout 

    级别 - 日志信息    

    DEBUG - This is debug message.
    INFO - This is info message.
    ERROR - This is error message.
    • PatternLayout 

    自定义格式,和 C 语言的 printf() 差不多,都是使用占位符:

    %m   代码中指定的日志信息

    %p    日志级别,DEBUG、INFO 等

    %n    换行符

    %c    打印语句所属的类的全名

    %t     产生该日志的线程全名

    %d    服务器当前时间,可在后面指定格式,比如   %d{yyyy年MM月dd日 HH:mm:ss}

    %l     日志时间发生的位置,包括类名、发生的线程,以及在代码中的行数,如:Test.main(Test.java:10)

    %F    日志消息产生时所在文件的文件名

    %L    代码所在行号

    %%   输出一个 %

    可指定宽度、对齐方式:

    %5p    宽度是5,字符个数小于5时,默认右对齐
    %-5p   宽度是5,字符个数小于5时,左对齐


    (3)src下新建测试类test.Log4jTest

    package test;
    
    import org.apache.log4j.Logger;
    
    public class Log4jTest {
        public static void main(String[] args) {
            // 获取当前类的Logger
            Logger logger = Logger.getLogger(Log4jTest.class);
    
            // 输出DEBUG级别的日志,参数为日志信息
            logger.debug("This is debug message.");
            // 输出INFO级别的日志
            logger.info("This is info message.");
            // 输出ERROR级别的日志
            logger.error("This is error message.");
        }
    }

    说明

    log4j可单独使用,单独使用时只需添加log4j.jar包。

    如果要在其他框架中使用log4j,一般还要下载添加apache的commons-logging.jar。

    因为log4j实现了记录日志的功能,commons-logging.jar定义了日志接口,commons-logging本身并不具备记录日志的功能,二者的关系是接口-实现类的关系,引入commons-logging.jar,使得框架与日志的耦合从类降到了接口。

    log4j的配置文件必须名为log4j.properties或log4j.xml,且必须放在资源根目录下(src是默认的资源根目录)。


    附   log4j常用配置

    ### 日志记录器Logger的全局设置 ###
    #日志输出的最低级别设置为DEBUG
    log4j.rootLogger = DEBUG,stdout,D,E
    
    
    ### 设置日志的控制台输出 ###
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    #如果想查看程序的具体执行过程(在控制台输出DEBUG级的日志),把下面一行代码注释掉或把ERROR改为DEBUG即可
    log4j.appender.stdout.Threshold = ERROR
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
    
    ### 输出日志到文件 ###
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.D.File =D://log/debug/debug.log 
    log4j.appender.D.Append = true
    #如果想把DEBUG级的日志输出到文件,把下面一行注释掉或把ERROR改为DEBUG即可
    log4j.appender.D.Threshold = ERROR
    log4j.appender.D.DatePattern='.'yyyy-ww
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
  • 相关阅读:
    Hbase数据备份&&容灾方案
    maven 高级玩法
    Python操作MySQL -即pymysql/SQLAlchemy用法
    python
    Redis的AOF功能
    Redis的快照功能
    查看哪些进程占用了SWAP分区?
    Java进程CPU使用率高排查
    利用iptables实现基于端口的网络流量统计
    从free命令看Linux内存管理
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12117192.html
Copyright © 2011-2022 走看看