【日志框架】——通过log4j.properties文件学习log4j

来源:互联网 发布:高中物理仿真实验软件 编辑:程序博客网 时间:2024/06/05 18:17

  本篇文章将会介绍应用系统中使用日志的原因,为什么要使用日志框架log4j,并通过log4j.properties文件初步学习日志框架log4j。
    

必要性  

  在大型系统中日志处理是不可或缺的功能。日志主要记录两类信息:

【1】.异常信息:
  在系统开发过程中,异常信息直接打印到控制台,我们直接看到并进行解决,不用记录到日志中。但是当系统已经部署到测试环境或者生产环境中,这个时候开发人员并没有盯着控制台的异常信息,所以就需要我们把异常信息记录到日志中(可以存成文件或存到数据库中),以便之后,开发人员根据日志快速定位到发生异常的位置,了解异常产生原因。

【2】.操作信息:
  记录用户操作,跟踪用户行为,为以后对系统和用户进行分析,数据挖掘。


为什么要使用log4j

优势 日志框架log4j 自己实现 日志级别 提供了ERROR WARN,INFO,DEBUG…… 自己定义枚举类型来区分不同的日志信息 灵活地控制日志生成 通过配置文件配置即可决定输出什么样的日志信息,输出到哪里,以什么格式输出,不需修改代码 要想这么强大和灵活,需要我们自己编写很多代码,要用到AOP,Filter,以及读取配置文件的知识点

  先来直观看看log4j.properties长什么样子。我从中摘了两块内容:

组件

logger配置

log4j.rootLogger=ERROR, stdout, filelog4j.logger.com.tgb=INFO, filelog4j.logger.org=INFO, filelog4j.logger.org.hibernate=INFO, file

appender配置

log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.conversionPattern= %d [%X{loginUserId}/%X{req.remoteAddr}/%X{req.id} - %X{entranceMethod} - %X{req.requestURIWithQueryString}] %-5p %c - %m%n

  文件中省略部分类似于这两部分配置。一种是log4j.logger……开头,一种是log4j.appender……开头


  直观了解了这些配置之后,我们开始补充一些基本的log4j配置知识。
  网上查资料都说log4j有三大组件:logger,appender和layout。但是从配置文件中看layout更像是appender的一个option。例如appender的option有File,有layout。不过,怎么理解都可以。

logger

记录器,用来记录日志。在要输出日志的类中(如下所示,在ExcelSheetHandler这个类中),我们会通过以下代码获得logger。

  private static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(ExcelSheetHandler.class);

当你要记录日志时,通过如下代码就可以

 logger.error(e.getMessage(), e) ;

appender

附加器,他会携带日志输出的目的地的位置、日志格式(layout)信息,并把日志按指定格式输出到指定位置。
它有几种不同的类型:

- 类型 描述 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 将日志发送到任意指定位置

不同类型示例

#System cm log appender#appender类型log4j.appender.cm=org.apache.log4j.RollingFileAppender#输出日志到指定文件路径log4j.appender.cm.File=/was/waslogs/loislogs/lois-core-cm.log#超过文件最大容量,将会产生一个新文件如:lois-core-cm.log.1存放原来的内容log4j.appender.cm.MaxFileSize=5024KB#可以产生的新文件的最大数目log4j.appender.cm.MaxBackupIndex=100#布局(此种布局可以通过下面的ConversionPattern灵活指定格式)log4j.appender.cm.layout=org.apache.log4j.PatternLayout#布局中的格式log4j.appender.cm.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss S}> <%p> [%c] %x - %m%n

我们在代码中通过logger记录了日志信息,在配置文件中配了配置appender。现在就需要把两者结合起来。怎么结合呢?

log4j.logger.org.hibernate=INFO, file

org.hibernate是一个包的名称,file是appender,INFO是日志级别。这样配置的意思是这个包下所有logger,会按照file这个appender,输出满足INFO级别(小于等于该级别,Debug>INFO>ERROR)的日志。

总结

  logger就是让程序员来记录日志信息,appender就是定义日志信息可以保存的另一个位置,相当于对日志信息的备份,而且是按照布局和格式“优雅”的备份。然后,我们通过配置个性化定制不同package下的logger中的信息是否备份(日志级别来控制),备份到哪里(appender的类型),备份成什么样(appender的layout)。

0 0
原创粉丝点击