本文共 2850 字,大约阅读时间需要 9 分钟。
本人近年都在做项目,最近有个纯项目紧张,临时介入其中。日志模块,控制端显示不同等级日志同时保存到文件中,要求每天保存一个日志文件,日志目录保留最近30天日志文件。最初没想到用库,自己采用线程池方式写日志,在写日志时先判断是否有30天前的日志删除,然后对比时间判定是否有当天日志文件,之后采用BufferedWriter写日志。写好后,客户进行代码审查,不太相信我写的效率,要求采用公共控件的方式来写日志。无奈就找到了Log4j2。
以上,无聊记录一下,本文中不会涉及太基本的配置与字段的意义,部分会较详细说明一下。
1.官网下载;
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>
-
-
- <RollingFile name="TASK" fileName="x:/xxxx/logs.log"
- filePattern="x:/xxxx/logs_%d{yyyy-MM-dd}.log" >
-
- <PatternLayout pattern="%d %-5p %m%n" />
- <Policies>
-
-
- <TimeBasedTriggeringPolicy modulate="true"
- interval="1" />
-
-
- </Policies>
-
-
- <DefaultRolloverStrategy>
- <Delete basePath="x:/xxxx" maxDepth="1">
- <IfFileName glob="logs_*.log" />
- <IfLastModified age="30d" />
- </Delete>
- </DefaultRolloverStrategy>
- </RollingFile>
- </Appenders>
-
- <loggers>
- <root level="debug">
- <appender-ref ref="CONSOLE"/>
- <AppenderRef ref="TASK" />
- </root>
- </loggers>
- </Configuration>
代码片段说明,查看注释即可:
- import org.apache.logging.log4j.LogManager;
- import org.apache.logging.log4j.Logger;
- import org.dom4j.Document;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
-
- import taskservice.GlobalInstance;
-
- public class LogManage implements ILogManage {
-
- private ServiceState mServiceState;
- private final String strLogFilePath = GlobalInstance.taskServiceConfig.strLogFilePath;
-
- static Logger sLogger = LogManager.getLogger(LogManage.class.getName());
-
- public LogManage() {
- mServiceState = new ServiceState();
- }
-
- @Override
- public void log(int level, String strLog) {
- GlobalInstance.taskServiceUi.logInfo(strLog);
-
- switch (level) {
- case LogLevel.DEBUG:
- sLogger.debug(strLog);
- break;
- case LogLevel.INFO:
- sLogger.info(strLog);
- break;
- case LogLevel.WARNING:
- sLogger.warn(strLog);
- break;
- case LogLevel.ERROR:
- sLogger.error(strLog);
- break;
- default:
- break;
- }
- }
- }
工程配置如图所示:
以上,主要为实现日志按日期保存,并只保留最近30天的日志实现方式。
转载地址:http://oqzoi.baihongyu.com/