添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
玉树临风的鸵鸟  ·  延伸模組 - ...·  9 月前    · 
满身肌肉的皮带  ·  Tutorialspoint PDFBox ...·  1 年前    · 
温柔的沙滩裤  ·  webview - 知乎·  1 年前    · 

本人近年都在做 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注释说明:

<?xml version="1.0" encoding="UTF-8"?>  
<Configuration>  
    <Appenders>  
    <!-- 输出到控制台 -->  
        <Console name="CONSOLE" target="SYSTEM_OUT">  
            <!-- 输出格式 -->  
            <PatternLayout pattern="ROOT:%d %-5p %C %L - %m%n" />  
        </Console>  
        <!-- 按天备份一个日志 -->  
        <!-- fileName为生成的文件名,x为路径,也可以采用相对路径模式,filePattern为时间到达后产生新日志,旧日志的文件名 -->  
        <RollingFile name="TASK" fileName="x:/xxxx/logs.log"  
            filePattern="x:/xxxx/logs_%d{yyyy-MM-dd}.log" >   
            <!-- 输出格式 -->  
            <PatternLayout pattern="%d %-5p %m%n" />  
            <Policies>  
            <!-- 每1天更新一次,此处查阅网上和官方示例中,都是以小时出现,我测试是以天为单位。(官方文档中说明按item类型是否是小时,但没找到在哪里设置item类型)另有其他各类型策略,请参阅官方文档 --> 
<!-- TimeBasedTriggeringPolicy需要和filePattern配套使用,由于filePattern配置的时间最小粒度是dd天,所以表示每一天新建一个文件保存日志。SizeBasedTriggeringPolicy表示当文件大小大于指定size时,生成新的文件保存日志。 --> 
                <TimeBasedTriggeringPolicy modulate="true"  
                    interval="1" />  
                <!-- 此处为每个文件大小策略限制,使用它一般会在文件中filePattern采用%i模式 -->  
                <!-- <SizeBasedTriggeringPolicy size="128KB" /> -->  
            </Policies>  
            <!-- 最多备份30天以内的日志,此处为策略限制,Delete中可以按自己需要用正则表达式编写 -->  
        <!-- DefaultRolloverStrategy字段中加入max=“30”经测试是配合SizeBasedTriggeringPolicy限制%i的存在数量,并没有发现是网上流传的是最多保存多少个文件的限制,也或许是我写的有问题 -->  
         <DefaultRolloverStrategy>  
        <Delete basePath="x:/xxxx" maxDepth="1">  
                     <IfFileName glob="logs_*.log" />  
                     <IfLastModified age="30d" />  
            </Delete>  
            </DefaultRolloverStrategy>  
        </RollingFile>  
    </Appenders>  
    <!-- 链接到Console和RollingFile标签实现debug以上等级的输出 -->  
    <loggers>    
    <root level="debug">    
        <appender-ref ref="CONSOLE"/>    
        <AppenderRef ref="TASK" />  
    </root>    
    </loggers>    
</Configuration>  
  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. import taskservice.GlobalInstance;
  7. public class LogManage implements ILogManage {
  8. private ServiceState mServiceState;
  9. private final String strLogFilePath = GlobalInstance.taskServiceConfig.strLogFilePath;
  10. //初始化logger
  11. static Logger sLogger = LogManager.getLogger(LogManage. class .getName());
  12. public LogManage() {
  13. mServiceState = new ServiceState();
  14. }
  15. @Override
  16. public void log( int level, String strLog) {
  17. GlobalInstance.taskServiceUi.logInfo(strLog);
  18. //输出日志
  19. switch (level) {
  20. case LogLevel.DEBUG:
  21. sLogger.debug(strLog);
  22. break ;
  23. case LogLevel.INFO:
  24. sLogger.info(strLog);
  25. break ;
  26. case LogLevel.WARNING:
  27. sLogger.warn(strLog);
  28. break ;
  29. case LogLevel.ERROR:
  30. sLogger.error(strLog);
  31. break ;
  32. default :
  33. break ;
  34. }
  35. }
  36. }
网上看的文章,亲测有用. 果你做过类似的资料搜索工作, 你会容易找到相关的配置方法. 然而, 但是, 大部分都是你抄我, 我抄你的, 并没有仔细检测, 就写的教程. 其中重要的就是删除过期日志 文件 的配置. 很多都说通过max=数字控制. 这是扯淡, 这个只是控制某时间段内(根据配置不同) 文件 的数目.它并不会关心你的目录下一共有多少个日志 文件 了. 可想而知, 这样随着时间的推移, 虽然每个时间区间内日志数目控制在范围内, 但是, 总日志 文件 个数, 依然日益膨胀. log 4j2.xml RollingFile: 使用 文件 方式记录日志 - fileName:记录日志的 文件 - filePattern:当日志记录 文件 超过指定大小时,以指定的 文件 格式生成新的 文件 SizeBasedTriggeringPolicy - size:指定每个日志 文件 大小,如果超过该大小,则生成新的日志 文件 DefaultRolloverStrategy  - max 指定相同规则 文件 最多保留多少个,如果规则是root-%d{yyyy-MM-dd}-%i. log ,那么此时是以天为单位记录,会依次生成root-2022-0 当 log 4j 使用 DailyRollingFileAppender进行日志归档时,需要对日志的个数进行控制。 此时需要对DailyRollingFileAppender进行重写。 package org.apache. log 4j; import org.slf4j. Log ger; import org.slf4j. Log gerFactory; import java.io.File; import java.io.FileFilter; import java.io.IOException; <Configuration status="WARN"> <Properties> <Property name=" LOG _PATTERN">%highlight{%d{yyyy-MM-dd HH:mm:ss} ... 日志 文件 大小1MB,每天最多保留10个 文件 ,只保留7天的日志 rollingRandomAccessFile: # 日志 文件 Appender,将日志信息输出到日志 文件 - name: ROLLING_FILE fileName: ${ log Path}/${projectName}. log filePattern: "${ log Path}/history Log s/$${date:yyyy-MM}/${projectName}-%d{yyyy-MM-dd}-%i. log .gz" 原文:http://www.shanhh.com/set_max_count_of_ log _files_for_ log 4j/ Appender为日志输出目的地, log 4j已经提供了非常丰富的Appender用以满足不同的需求: org.apache. log 4j.ConsoleAppender 输出到控制台org.apache. log 4j.FileAppender 输出到 文件 org.a scan:当此属性设置为true时,配置 文件 如果发生改变,将会被重新加载,默认值为true。 scanPeriod:设置监测配置 文件 是否有修改的时间间隔,如果没有给出时间单位,默认... <?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/ log ging/ log back/defaults.xml" /> <appender name="CONSOLE" class="ch.qos. log back.core.ConsoleAppe