log4j入门配置及组件详解

    xiaoxiao2021-12-14  22

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

    一、Log4j基本用法

    1. 添加log4j依赖(添加Log4j包)

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency>

    2. 在相关业务类中创建Logger对象

    2.1创建Logger对象有两种方式,第一种是通过当前类的Class对象创建。

    public class UserService { //用当前类创建Logger对象 public static final Logger logger = Logger.getLogger(UserService.class); public void userAdd(){ //省略内容... } }

    2.2第二种方式则通过自定义名称创建。(不建议采用该方式)

    public class UserService { //用当前类创建Logger对象 public static final Logger logger = Logger.getLogger("test"); public void userAdd(){ //省略内容... } }

    3. 在业务代码中添加日志输出代码

    根据系统中日志信息的重要程度,选择logger对象不同的级别进行记录,log4j会根据配置文件(log4j.properties)中配置的日志级别来输入对应的日志。

    public void userAdd(){ logger.debug("记录Debug级别信息......"); logger.info ("记录Info级别信息......"); logger.warn ("记录Warn级别信息......"); logger.error("记录Error级别信息......"); logger.fatal("记录fatal级别信息......"); }

    4. 添加Log4j配置文件

    Log4j中组件是通过属性文件进行配置的,该文件默认名称为log4j.properties,默认路径在src根目录下,在web项目中,通过在web.xml文件中添加log4jConfigLocation属性来修改配置文件名称及路径。

    4.1 web.xml中修改log4j.properties文件名称及路径

    <context-param> <param-name>log4jConfigLocation</param-name > <param-value>classpath:log4j.properties</param-value> </context-param>

    4.2 log4j.properties文件配置示例

    ######配置输出日志的目录和输出日志的级别########## #rootLogger:设置输出根目录(classpath)下所有配置了Logger对象的日志 #第一个参数Debug: 输出什么级别的日志 #第二个参数stout: 输出哪个Appender(可配置多个Appender,如:DF_DEBUG,DF_ERROR) #log4j.logger.cn.ship.log4j=warn,stout :输出cn.ship.log4j包下的配置了Logger对象的日志,如果指定包下的日志级别小于rootLogger,则指定包下的日志按当前配置级别输出 #log4j.logger.test = warn,stout:基于Logger名称的访问,需要在创建logger对象的时候用名称指定(参见创建Logger第二种形式) ############################################# log4j.rootLogger=debug,stout,DF_DEBUG,DF_ERROR log4j.logger.cn.ship.log4j=warn,stout log4j.logger.test = warn,stout ##################控制台输出################## #log4j.appender.stout : 指定采用那种方式进行日志输出(控制台方式),stout为用户自定义appender名称 #log4j.appender.stout.Target : 采用System.out方式进行输出,还可以使用System.err #log4j.appender.stout.layout : 指定当前Appender的日志的布局模式(当前选用PatternLayout模式) #log4j.appender.stout.layout.ConversionPattern : 指定PatternLayout模式的日志格式 ############################################ log4j.appender.stout=org.apache.log4j.ConsoleAppender log4j.appender.stout.Target=System.out log4j.appender.stout.layout=org.apache.log4j.PatternLayout log4j.appender.stout.layout.ConversionPattern= [%5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ##################滚动文件输出(DEBUG级别)################## log4j.appender.DF_DEBUG=org.apache.log4j.DailyRollingFileAppender log4j.appender.DF_DEBUG.File=/home/ship/log/debug.log log4j.appender.DF_DEBUG.Threshold=DEBUG log4j.appender.DF_DEBUG.DatePattern='.'yyyy-MM-dd' log4j.appender.DF_DEBUG.layout=org.apache.log4j.PatternLayout log4j.appender.DF_DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ##################滚动文件输出(ERROR级别)################## log4j.appender.DF_ERROR=org.apache.log4j.DailyRollingFileAppender log4j.appender.DF_ERROR.File=/home/ship/log/error.log log4j.appender.DF_ERROR.Threshold=ERROR log4j.appender.DF_ERROR.DatePattern='.'yyyy-MM-dd' log4j.appender.DF_ERROR.layout=org.apache.log4j.PatternLayout log4j.appender.DF_ERROR.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

    二、Log4j组件

    通过log4j结构图可以看出Log4j分别由Logger(日志写入器)、日志输出终端(Appender)、日志布局模式(Layout)三个重要组件构成。其中一个Logger对应多个Appender,一个Appender包含一种日志布局模式。

    1. 日志写入器(Logger)

    Logger主要负责记录日志信息,根据日志信息的重要程度,Logger对象共分为以下几种日志级别,从高到底分别为:

    日志级别说明OFF最高等级,用于关闭所有的日志记录FATAL指出每个严重的错误事件将会导致应用程序的退出ERROR指出虽然发生错误事件,但仍然不影响系统的继续允许WARN指出会出现潜在的错误情形INFO一般用于粗粒度级别上,强调应用程序的运行全程DEBUG一般用于细粒度级别上,对于调式程序非常有帮助ALL最低等级,用于打开所有日志记录

    Log4j建议只使用四个级别,优先级从高到低分别是:ERROR、WARN、INFO、DEBUG。通过在这里定义级别,你可以控制应用程序中相应级别的日志信息的开关。

    2. 日志输出终端(Appender)

    Appender用于配置日志信息输出的目的地,Log4j提供了一下几种Appender对象:

    Appender对象说明org.apache.log4j.ConsoleAppender输入至控制台org.apache.log4j.FileAppender输入至文件org.apache.log4j.DailyRollingFileAppender输入至文件(按照指定时间生成文件)org.apache.log4j.RollingFileAppender输入至文件(按照指定文件大小生成文件)org.apache.log4j.WriterAppende将日志信息以流的方式发送到指定地点

    3. 日志布局模式(Layout)

    3.1 Layout负责控制日志信息输出格式,Log4j提供了以下几种布局模式:

    Layout对象对象说明org.apache.log4j.HTMLLayout已HTML表格形式布局org.apache.log4j.PatternLayout可以灵活地自定义布局org.apache.log4j.SimpleLayout包含日志信息的级别和消息字符串的简单布局org.apache.log4j.TTCCLayout包含日志产生的时间、线程、类别等等信息

    3.2 如果采用PatternLayout模式,则可以通过如下参数来自定义日志格式:

    参数说明%m输入代码中指定的消息%p输出优先级,即DEBUG,INFO,WARN,ERROR%r输出自应用启动到输出该log消息耗费的毫秒数%c输出所属的类目,通常就是所在类的全名%t输出产生该日志事件的线程名%n输出一个回车换行符%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如%d{yyyy-MM-dd HH:mm:ss,SSS}%l输出日志事件的发生位置,包括类名,发生的线程,以及在代码中的函数%x输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像Java Servlet这样的多客户多线程的应用中%%输出一个”%”字符%F输出日志消息产生时所在的文件名称%L输出代码中的行号

    3.3 我们也可以通过在百分号(%)与模式字符之间加上修饰符来控制最小宽度、最大宽度和对齐方式,如下:

    c : 指定输出category的名称,最小宽度是20,如果category的名称小于20的话,默认右对齐。%-20c : 指定输出category的名称,最小宽度是20,如果category的名称小于20的花,“-”号指定左对齐。%.30c : 指定输出category的名称,最大宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 .30c : 如果category的名称小于20就补空格,并且右对齐,如果其名称大于30, 就将左边多出的字符截掉。
    转载请注明原文地址: https://ju.6miu.com/read-962771.html

    最新回复(0)