log4j2 使用详解

本人近年都在做Android项目,最近有个纯Java项目紧张,临时介入其中。日志模块,控制端显示不同等级日志同时保存到文件中,要求每天保存一个日志文件,日志目录保留最近30天日志文件。最初没想到用库,自己采用线程池方式写日志,在写日志时先判断是否有30天前的日志删除,然后对比时间判定是否有当天日志文件,之后采用BufferedWriter写日志。写好后,客户进行代码审查,不太相信我写的效率,要求采用公共控件的方式来写日志。无奈就找到了Log4j2。

以上,无聊记录一下,本文中不会涉及太基本的配置与字段的意义,部分会较详细说明一下。

1.官网下载Log4j包

2.将其中的log4j-api-2.5.jar,log4j-core-2.5.jar加入工程;

3.src目录下加入log4j2.xml,配置好相关属性;

4.需用的代码中加入static Logger sLogger = LogManager.getLogger(LogManage.class.getName()); sLogger.debug(strLog);即可调用使用。

现就log4j2.xml注释说明:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <Configuration>    
  3.     <Appenders>    
  4.     <!-- 输出到控制台 -->    
  5.         <Console name="CONSOLE" target="SYSTEM_OUT">    
  6.             <!-- 输出格式 -->    
  7.             <PatternLayout pattern="ROOT:%d %-5p %C %L - %m%n" />    
  8.         </Console>    
  9.         <!-- 按天备份一个日志 -->    
  10.         <!-- fileName为生成的文件名,x为路径,也可以采用相对路径模式,filePattern为时间到达后产生新日志,旧日志的文件名 -->    
  11.         <RollingFile name="TASK" fileName="x:/xxxx/logs.log"    
  12.             filePattern="x:/xxxx/logs_%d{yyyy-MM-dd}.log" >     
  13.             <!-- 输出格式 -->    
  14.             <PatternLayout pattern="%d %-5p %m%n" />    
  15.             <Policies>    
  16.             <!-- 每1天更新一次,此处查阅网上和官方示例中,都是以小时出现,我测试是以天为单位。(官方文档中说明按item类型是否是小时,但没找到在哪里设置item类型)另有其他各类型策略,请参阅官方文档 -->   
  17. <!-- TimeBasedTriggeringPolicy需要和filePattern配套使用,由于filePattern配置的时间最小粒度是dd天,所以表示每一天新建一个文件保存日志。SizeBasedTriggeringPolicy表示当文件大小大于指定size时,生成新的文件保存日志。 -->   
  18.                 <TimeBasedTriggeringPolicy modulate="true"    
  19.                     interval="1" />    
  20.                 <!-- 此处为每个文件大小策略限制,使用它一般会在文件中filePattern采用%i模式 -->    
  21.                 <!-- <SizeBasedTriggeringPolicy size="128KB" /> -->    
  22.             </Policies>    
  23.             <!-- 最多备份30天以内的日志,此处为策略限制,Delete中可以按自己需要用正则表达式编写 -->    
  24.         <!-- DefaultRolloverStrategy字段中加入max=“30”经测试是配合SizeBasedTriggeringPolicy限制%i的存在数量,并没有发现是网上流传的是最多保存多少个文件的限制,也或许是我写的有问题 -->    
  25.          <DefaultRolloverStrategy>    
  26.         <Delete basePath="x:/xxxx" maxDepth="1">    
  27.                      <IfFileName glob="logs_*.log" />    
  28.                      <IfLastModified age="30d" />    
  29.             </Delete>    
  30.             </DefaultRolloverStrategy>    
  31.         </RollingFile>    
  32.     </Appenders>    
  33.     <!-- 链接到Console和RollingFile标签实现debug以上等级的输出 -->    
  34.     <loggers>      
  35.     <root level="debug">      
  36.         <appender-ref ref="CONSOLE"/>      
  37.         <AppenderRef ref="TASK" />    
  38.     </root>      
  39.     </loggers>      
  40. </Configuration>    



代码片段说明,查看注释即可:

[java]  view plain  copy
  1. import org.apache.logging.log4j.LogManager;  
  2. import org.apache.logging.log4j.Logger;  
  3. import org.dom4j.Document;  
  4. import org.dom4j.DocumentHelper;  
  5. import org.dom4j.Element;  
  6.   
  7. import taskservice.GlobalInstance;  
  8.   
  9. public class LogManage implements ILogManage {  
  10.   
  11.     private ServiceState mServiceState;  
  12.     private final String strLogFilePath = GlobalInstance.taskServiceConfig.strLogFilePath;  
  13.         //初始化logger  
  14.     static Logger sLogger = LogManager.getLogger(LogManage.class.getName());  
  15.   
  16.     public LogManage() {  
  17.         mServiceState = new ServiceState();  
  18.     }  
  19.   
  20.     @Override  
  21.     public void log(int level, String strLog) {  
  22.         GlobalInstance.taskServiceUi.logInfo(strLog);  
  23.                 //输出日志  
  24.         switch (level) {  
  25.         case LogLevel.DEBUG:  
  26.             sLogger.debug(strLog);  
  27.             break;  
  28.         case LogLevel.INFO:  
  29.             sLogger.info(strLog);  
  30.             break;  
  31.         case LogLevel.WARNING:  
  32.             sLogger.warn(strLog);  
  33.             break;  
  34.         case LogLevel.ERROR:  
  35.             sLogger.error(strLog);  
  36.             break;  
  37.         default:  
  38.             break;  
  39.         }  
  40.     }  
  41. }  


工程配置如图所示:


以上,主要为实现日志按日期保存,并只保留最近30天的日志实现方式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值