一、Log4j 日志级别(Log Levels)

日志级别从高到低(优先级递减)如下:

级别描述典型使用场景OFF最高级别,关闭所有日志输出。生产环境紧急禁用日志FATAL严重错误,导致应用程序崩溃(Log4j 2中已移除,用ERROR替代)。不可恢复的系统故障(如数据库连接彻底丢失)ERROR错误事件,但应用仍能运行。异常捕获、业务逻辑失败WARN潜在问题,不影响当前操作,但可能需要关注。非预期参数、性能警告INFO重要的运行时信息(默认级别)。启动配置、关键业务流程日志DEBUG调试信息,用于开发阶段。变量值、方法调用跟踪TRACE最详细的日志,记录程序执行的每一步。复杂问题排查(如循环内部状态)ALL最低级别,输出所有日志。极少使用

配置示例(log4j2.xml)

二、Log4j 日志格式(Layouts)

日志格式决定了每条日志的输出样式,常见的Layout类型如下:

1. PatternLayout(最常用)

通过模式字符串自定义日志格式,支持占位符(Conversion Patterns)。

示例配置:

常用占位符:

占位符含义示例输出%d日期时间2023-10-01 14:30:22%t线程名main%-5level日志级别(左对齐,固定5字符)INFO , ERROR%logger{36}类名(缩写,最长36字符)com.example.MyClass%msg日志消息内容User login failed%n换行符(系统相关的换行符)%M方法名(性能损耗高,慎用)doGet%l代码位置(类+方法+行号,性能低)com.example.MyClass.main(MyClass.java:10)

2. JSONLayout

将日志输出为JSON格式,便于ELK等日志分析系统处理。

示例配置:

输出示例:

{

"time": "2023-10-01T14:30:22.123Z",

"level": "ERROR",

"logger": "com.example.MyClass",

"message": "Database connection failed",

"thread": "main",

"stackTrace": "..."

}

3. CSVLayout

以CSV格式输出日志,适合导入Excel分析。

示例配置:

输出示例:

2023-10-01 14:30:22,ERROR,com.example.MyClass,"Database connection failed"

4. HTMLLayout

生成HTML格式的日志文件,支持颜色高亮。

示例配置:

输出效果:

(浏览器中打开,错误日志显示为红色)

5. XMLLayout

生成结构化XML日志。

示例配置:

输出示例:

com.example.MyClass

Database connection failed

三、日志级别与格式的典型组合

1. 开发环境(DEBUG级别 + 详细Pattern)

输出:

14:30:22.123 [main] DEBUG com.example.MyClass:42 - User ID: 12345

2. 生产环境(INFO级别 + JSON格式)

输出:

{"time":"2023-10-01T14:30:22Z","level":"INFO","message":"Server started on port 8080"}

3. 警告监控(WARN级别 + 邮件通知)

四、注意事项

性能影响:

避免在高频日志中使用%M(方法名)或%l(行号),它们会显著降低性能。

日志级别选择:

生产环境通常用INFO,开发环境用DEBUG或TRACE。

敏感信息过滤:

使用%replace或自定义过滤器隐藏密码等敏感数据:

总结

日志级别:控制日志的详细程度(从OFF到ALL)。

日志格式:决定日志的呈现方式(如PatternLayout、JSONLayout)。

最佳实践:根据环境选择级别和格式,平衡可读性与性能。

Copyright © 2088 羽毛球世界杯_世界女排世界杯 - umiloo.com All Rights Reserved.
友情链接