现在公司用 log4j2 进行日志记录, 我也看了相关的资料, 现在进行记录学习总结下
整体结构
Appenders 里设置日志的输出方式, 级别和格式
Loggers 里设置全局的级别和绑定 appenders 里的 name
简单代码 demo
加载依赖
登录官网, 找到 maven 依赖
- <dependencies>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
- <version>2.11.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <version>2.11.0</version>
- </dependency>
- </dependencies>
新建一个 log4j2.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <Configuration status="WARN">
- <Appenders>
- <Console name="Console" target="SYSTEM_OUT">
- <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
- </Console>
- </Appenders>
- <Loggers>
- <Root level="TRACE">
- <AppenderRef ref="Console" />
- </Root>
- </Loggers>
- </Configuration>
新建一个测试类
- Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
- logger.trace("trance level");
- logger.debug("debug level");
- logger.info("info level");
- logger.warn("warn level");
- logger.error("error level");
- logger.fatal("fatal level");
输出结果
- 22:36:42.966 [main] TRACE - trance level
- 22:36:42.968 [main] DEBUG - debug level
- 22:36:42.969 [main] INFO - info level
- 22:36:42.969 [main] WARN - warn level
- 22:36:42.969 [main] ERROR - error level
- 22:36:42.969 [main] FATAL - fatal level
细节分析
首先 我们要明白日志的级别
日志级别从低到高分为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL, 如果设置为 WARN, 则低于 WARN 的信息都不会输出
Configuration
Configuration 为根节点, 有一个 status 属性, 这个属性表示 log4j2 本身的日志信息打印级别
Appenders
建议大家去官网看看, 现在支持很多种 appender, 并且官网上也有示例.
Console 节点中的 PatternLayout 定义了输出日志时的格式
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5 表示左对齐并且固定输出 5 个字符, 如果不足在右边补 0
%logger 输出 logger 名称, 因为 Root Logger 没有名称, 所以没有输出
%msg 日志文本
%n 换行
其他的参数意义, 大家遇到自行搜索
自定义 Appender
我们发现这个 log4j2 是支持我们自定义的 Appender 的, 很好的体现了开闭原则: 对扩展支持, 对修改关闭. 再想想渣渣猿我自己写的代码, 果然大神们写的代码还是很 six 的, 这里不具体展开详细介绍, 我现在对这一块也不是很熟悉
注意事项
大家最好结合阿里规约中日志的规约, 大家自行查看. 摘出其中一句话, 供大家参考
大量地输出无效日志, 不利于系统性能提升, 也不利于快速定位错误点. 记录日志时请
思考: 这些日志真的有人看吗? 看到这条日志你能做什么? 能不能给问题排查带来好处?
来源: https://www.cnblogs.com/zhenghengbin/p/9297211.html