当前位置: 首页 > 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)。

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

相关文章:

  • mapbox V3 新特性,实现三维等高线炫酷效果
  • 工业物联网中隐私保护入侵检测的联邦学习增强型区块链框架
  • MyBatis-Plus的自带分页方法生成的SQL失败:The error occurred while setting parameters
  • 522UART是什么
  • 【项目】抽奖系统bug历程(持续更新)
  • Git分支的强制回滚
  • Python Click库:轻松构建优雅的命令行工具
  • 技术篇-2.1.C\C++应用场景及开发工具安装
  • Java使用Collections集合工具类
  • 力扣238.除自身以外数组的乘积
  • 【TI MSP430与SD NAND:心电监测的长续航解决方案】
  • Oracle 中 SHRINK 与 MOVE 操作的比较
  • 第二十九天打卡
  • 分布式锁(详解)
  • ISO 26262-5 生产维护和报废
  • MQTT控制报文
  • 初学c语言18(自定义类型:结构体)
  • 硬件开发复盘实战指南
  • DiagramJS设计原理解读(二)
  • MVC和MVVM架构的区别
  • danbold做动漫的网站/百度竞价推广一个月多少钱
  • 电子商务网站建设系统特点/滕州百度推广
  • 网络营销师资格证有什么用/sem和seo
  • 玩弄已婚熟妇做爰网站/百度推广售后电话
  • 前沿设计公司网站/凡科建站的免费使用
  • 昆明网站建设兼职/北京做网站推广