当前位置: 首页 > news >正文

关于常见日志的几种级别和格式

一、Log4j 日志级别(Log Levels)

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

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

配置示例(log4j2.xml)

<Root level="INFO"><AppenderRef ref="Console"/>
</Root>
<Logger name="com.example" level="DEBUG"/> <!-- 特定包使用DEBUG级别 -->

二、Log4j 日志格式(Layouts)

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

1. PatternLayout(最常用)

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

<Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>

常用占位符

占位符含义示例输出
%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等日志分析系统处理。
示例配置

<Console name="Console" target="SYSTEM_OUT"><JsonLayout complete="true" compact="false"/>
</Console>

输出示例

{"time": "2023-10-01T14:30:22.123Z","level": "ERROR","logger": "com.example.MyClass","message": "Database connection failed","thread": "main","stackTrace": "..."
}

3. CSVLayout

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

<File name="File" fileName="logs/app.log"><CsvLayout delimiter="," header="time,level,logger,message"/>
</File>

输出示例

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

4. HTMLLayout

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

<File name="HtmlFile" fileName="logs/app.html"><HTMLLayout title="MyApp Logs"/>
</File>

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


5. XMLLayout

生成结构化XML日志。
示例配置

<File name="XmlFile" fileName="logs/app.xml"><XMLLayout/>
</File>

输出示例

<Event timestamp="1696163422123" level="ERROR"><Logger>com.example.MyClass</Logger><Message>Database connection failed</Message>
</Event>

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

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

<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36}:%L - %msg%n"/>

输出

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

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

<JsonLayout complete="true"/>

输出

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

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

<SMTP name="Mail" subject="App Alert" to="admin@example.com"><PatternLayout pattern="%d %-5level %msg"/><ThresholdFilter level="WARN" onMatch="ACCEPT"/>
</SMTP>

四、注意事项

  1. 性能影响

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

  2. 日志级别选择

    • 生产环境通常用INFO,开发环境用DEBUGTRACE

  3. 敏感信息过滤

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

      <PatternLayout pattern="%replace{%msg}{password=.*?,}{password=***}%n"/>

总结

  • 日志级别:控制日志的详细程度(从OFFALL)。

  • 日志格式:决定日志的呈现方式(如PatternLayoutJSONLayout)。

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

http://www.xdnf.cn/news/595729.html

相关文章:

  • 加工生产调度(Johnson算法)
  • vue vite textarea标签按下Shift+Enter 换行输入,只按Enter则提交的实现思路
  • 准备好,开始构建:由 Elasticsearch 向量数据库驱动的 Red Hat OpenShift AI 应用程序
  • 手写ES6 Promise() 相关函数
  • 怎么把https://github.com项目拉到自己的github
  • 在Ubuntu18.04下搭建SadTalker让图片开口说话
  • 第五章:异步幻境 · 时间与数据的秘密
  • STM32之温湿度传感器(DHT11)
  • 纯惯导(INS)的误差来源及其对静态漂移曲线的影响
  • SS928V100(Hi3403V100)----NNN推理引擎,AMCT-ONNX模型压缩量化踩坑记录(LINUX版)
  • 数据指标体系:企业数字化转型的“数字基因“革命
  • Even Split_CodeForces - 1666E分析与解答
  • 【三轴加速度计】QMA6100P数据手册解析
  • 基于RFSOC49DR-16收16发 PCIE4.0 X8 射频采集卡
  • 航电系统之云台检测技术篇
  • 5月22总结
  • 浅聊一下搭建企业私有知识库的可行方案
  • Springboot3
  • mapbox V3 新特性,实现三维等高线炫酷效果
  • Linux(Ubuntu)新建文件权限继承问题
  • MQTT-主题(Topic)
  • DeepSeek:以开源之力,引领AI技术新风潮
  • MySQL初阶:JDBC
  • 海盗王客户端创建角色遮罩层修改成自适应窗口尺寸
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.10)
  • QT入门基础
  • python训练营打卡第31天
  • 【C++】控制台小游戏
  • 【人工智能】低代码基础技术讲解,规则引擎,在低代码平台上的作用,有哪些规则引
  • 前端请求状态出现CORS错误