• log4j的使用


    一、导论

    1、log4j是什么?

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

     

    2、log4j的组成

    Log4j中有三个主要的组件,它们分别是 LoggerAppenderLayout

    • Logger - 在执行应用程序时,接收日志语句生成的日志请求。
    • Appender - 管理日志语句的输出结果。
    • Layout - 用于指定 appender 将日志语句写入日志目的地所采用的格式。

    Logger,它是一种重要的日志处理组件, 可以通过 log4j API 的 logger 类对其进行访问。它的方法有:debug、info、warn、error、fatal 和 log。这些方法用于记录消息。

    Appender ,执行日志语句时,Logger 对象将接收来自日志语句的记录请求。此请求是通过 logger 发送至 appender 的。然后,Appender 将输出结果写入到用户选择的目的地。对于不同的日志目的地,提供不同的 appender 类型。这些 appender 包括:用于文件的 file appender、用于数据库的 JDBC appender 和用于 SMTP 服务器的 SMTP appender。

    Layout 主要包括简单布局、模式布局和 HTML 布局。而Appender采用Layout所采用的布局以及格式,将输出结果写入日志目的地。

    三大组件之间的关系图:

    BE8(BUV9M$B(MWRY}4(H6_L

     

    二、log4j的使用

     

    2.1、log4j的配置

    目前log4j的配置只支持两种方式,第一种是XML文件,第二种是.properties文件。当前,大多数都采用第二种方式。为了偷懒,小主也采用第二种方式配置。

     

    2.1.1、配置Logger

    # 在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用。
    
    # 使用log4j大概涉及3个主要概念:
    
    # 	1.公共类 Logger:
    
    # 		Logger 负责处理日志记录的大部分操作。
    
    # 	2.公共接口 Appender
    
    # 		Appender 负责控制日志记录操作的输出。
    
    # 	3.公共抽象类Layout
    
    # 		Layout 负责格式化Appender的输出。 
    
    # -----------------Logger----------------------------------
    
    # 日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。
    
    # DEBUG < INFO < WARN < ERROR < FATAL 
    
    # 配置根Logger
    
    # log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …
    
    log4j.rootLogger=debug,console,file
    
    # -----------------Logger----------------------------------

    分析:

    image

     

     

    2.1.2、 配置Appender

    配置日志信息输出目的地Appender,主要有以下几种Appender:

    # org.apache.log4j.FileAppender(文件)
    
    # org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
    
    # org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
    
    # org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) 
    
    # org.apache.log4j.SocketAppender(Socket)
    
    # org.apache.log4j.NtEventLogAppender(NT的Event Log)
    
    # org.apache.log4j.JMSAppender(电子邮件)
    
    # org.apache.log4j.ConsoleAppender(输出到控制台)

    我们先配置输出到控制台的appender

    log4j.appender.console = org.apache.log4j.ConsoleAppender

    分析:

    2

     

     

    2.1.3、配置Layout

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

    配置Layout如下:

    log4j.appender.console.layout=org.apache.log4j.PatternLayout
          配置Layout的选项参数:

    log4j.appender.console.layout.ConversionPattern =[%c.%p] %m %t %d{yyyy-MM-dd HH:mm:ss,SSS}%n

     

     

    2.1.4、综合实验

    一般情况下,都是以分类方式配置的,这样更方便更改配置,比如配置控制台、文件输出等。
    #总体设置日志级别,appender
    
    log4j.rootLogger=debug,console,file  
    
    #------------------------------ 文件 -------------------------------
    
    # 输出源file将日志输出到文件 (指定appender)
    
    log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
    
    # 日志输出的文件(设置appender的选项参数)
    
    log4j.appender.file.File = mylog.log
    

     

     

    # 指定Layout
    
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    
    # 指定Layout的选项参数
    
    log4j.appender.file.layout.ConversionPattern =[%c.%p] %m %t %d{yyyy-MM-dd HH:mm:ss,SSS}%n
    
    #-------------------------------------------------------------------
    

    2.2 配置文件的读取

    Untitled 

    2.3 封装log4j

    为了方便性,往往会封装一下log4j的一些方法体。比如:
    Untitled 

    2.4 正式使用logger记录信息

    Untitled 

    附录

    1、输出级别的种类

    ERROR、WARN、INFO、DEBUG
    1.ERROR 为严重错误 主要是程序的错误
    2.WARN 为一般警告,比如session丢失
    3.INFO 为一般要显示的信息,比如登录登出
    4.DEBUG 为程序的调试信息

     

    2、appender

    appender的种类

    1.org.apache.log4j.ConsoleAppender(控制台)
    2.org.apache.log4j.FileAppender(文件)
    3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
    4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
    5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

    appender的选项参数

    1.控制台选项(ConsoleAppender)

    Threshold=DEBUG:指定日志消息的输出最低层次。
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
    Target=System.err:默认情况下是:System.out,指定输出控制台

    2.文件选项(FileAppender)

    Threshold=DEBUF:指定日志消息的输出最低层次。
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
    File=mylog.txt:指定消息输出到mylog.txt文件。
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

    3.RollingFileAppender

    Threshold=DEBUG:指定日志消息的输出最低层次。
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
    File=mylog.txt:指定消息输出到mylog.txt文件。
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
    MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
    MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

    具体的可以参照log4j官网。

     

     

    3、Layout

    Layout的种类

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

    Layout的选项参数

    日志信息格式中几个符号所代表的含义:
    -X号: X信息输出时左对齐;
    %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
    %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
    %r: 输出自应用启动到输出该log信息耗费的毫秒数
    %c: 输出日志信息所属的类目,通常就是所在类的全名
    %t: 输出产生该日志事件的线程名
    %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
    %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
    %%: 输出一个"%"字符
    %F: 输出日志消息产生时所在的文件名称
    %L: 输出代码中的行号
    %m: 输出代码中指定的消息,产生的日志具体信息
    %n: 输出一个回车换行符,Windows平台为" ",Unix平台为" "输出日志信息换行
    可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
    1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
    2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
    3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
    4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。

     

    常用:log4j.appender.file.layout.ConversionPattern =%d{yyyy-MM-dd HH:mm:ss} [%-5p]  %t (%F:%L) -%m%n

    相关链接:

    1、 log4j使用细节

     

    参考:http://www.cnblogs.com/iteagle/archive/2010/04/23/1718365.html

  • 相关阅读:
    图文详解——将本地项目上传到码云(gitee)远程仓库
    mysql 查询正在执行的sql
    MySql 缓冲池(buffer pool) 和 写缓存(change buffer) 转
    SQLserver 查询某个表的字段及字段属性
    FastDFS 客户端(二)
    FastDFS 服务器(一)
    C# WPF 正常的项目突然提示 当前上下文中不存在名称“InitializeComponent”
    C# 程序自动重启的解决方法
    Array知识点总结(一)
    JavaScript中为false的情况归档
  • 原文地址:https://www.cnblogs.com/aoguren/p/4660738.html
Copyright © 2020-2023  润新知