[转]Log4j不同等级输入不同文件的配置

本文详细介绍了Log4j的日志配置方法,包括不同级别的日志输出设置、文件滚动策略及输出格式等。通过实例展示了如何将日志输出到控制台及指定文件中,并解释了各个配置项的作用。

#Console Log
#log4j.rootLogger=DEBUG,console,debug,info,warn,error
log4j.rootLogger=DEBUG,console,debug,info,warn,error
#A1--Print log to Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=INFO
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p]%d{yyyy-MM-dd HH:mm:ss,SSS} MESSAGE : %m%n
#debug--Print log to JAVAHOME
log4j.appender.debug=org.apache.log4j.RollingFileAppender
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.MaxFileSize=10240KB
log4j.appender.debug.MaxBackupIndex=3
log4j.appender.debug.file=./sdklog/sdkclient_debug.log 
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%-5p]%d{yyyy-MM-dd HH:mm:ss,SSS} MESSAGE : %m%n
#info--Print log to JAVAHOME
log4j.appender.info=org.apache.log4j.RollingFileAppender
log4j.appender.info.Threshold=INFO
log4j.appender.info.MaxFileSize=10240KB
log4j.appender.info.MaxBackupIndex=1
log4j.appender.info.file=./sdklog/sdkclient_info.log 
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%-5p]%d{yyyy-MM-dd HH:mm:ss,SSS} MESSAGE : %m%n
#warn--Print log to JAVAHOME
log4j.appender.warn=org.apache.log4j.RollingFileAppender
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.MaxFileSize=10240KB
log4j.appender.warn.MaxBackupIndex=1
log4j.appender.warn.file=./sdklog/sdkclient_warn.log 
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
#error--Print log to JAVAHOME
log4j.appender.error=org.apache.log4j.RollingFileAppender
log4j.appender.error.Threshold=ERROR
log4j.appender.error.MaxFileSize=10240KB
log4j.appender.error.MaxBackupIndex=1
log4j.appender.error.file=./sdklog/sdkclient_error.log 
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


其中

log4j.appender.error.file=./sdklog/sdkclient_error.log 可以指定输出路径,

例如${user.dir}/logs/logs_error.log 表示在当前工作目录->log目录下输出

logs_error.log




### Log4j 的基本概念 Log4j 是 Apache 提供的一个开源的日志记录工具库,广泛应用于 Java 开发项目中。它提供了灵活的方式控制日志输出级别、格式以及目标位置。 #### 配置文件类型 Log4j 支持两种主要的配置文件形式:`log4j.properties` 和 `log4j.xml`[^2]。本文将以 `log4j.properties` 文件为例进行说明。 --- ### 基本配置项解析 以下是常见的 `log4j.properties` 配置示例及其含义: ```properties # 设置全局日志级别为 DEBUG log4j.rootLogger=DEBUG, consoleAppender, fileAppender # 定义 Console 输出方式 log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout log4j.appender.consoleAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n # 定义 File 输出方式 log4j.appender.fileAppender=org.apache.log4j.DailyRollingFileAppender log4j.appender.fileAppender.File=logs/app.log log4j.appender.fileAppender.DatePattern='.'yyyy-MM-dd log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout log4j.appender.fileAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n ``` 上述配置定义了一个根日志器 (`rootLogger`) 并设置了两个输出目的地:一个是控制台 (`consoleAppender`),另一个是按天滚动的日志文件 (`fileAppender`)。每种 Appender 类型都可以指定其布局模式 (layout),用于自定义日志输出格式[^1]。 --- ### 日志级别的设置 Log4j 中支持多种日志级别,按照优先级从低到高依次为: - **TRACE** - **DEBUG** - **INFO** - **WARN** - **ERROR** - **FATAL** 如果将某个 logger 或 rootLogger 的日志级别设为 INFO,则低于此级别的消息(如 TRACE 和 DEBUG)不会被打印出来[^3]。 --- ### Logger 对象的作用 在实际开发过程中,通常会创建一个静态常量类型的 Logger 实例以便于管理日志操作。例如,在类 `Test` 中初始化如下所示的 Logger 对象: ```java package org.example.additivity; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Test { private static final Logger LOGGER = LogManager.getLogger(Test.class); public static void debug(String s) { LOGGER.debug("org.example.additivity.Test#debug 输入参数 s: {}", s); } } ``` 这里通过 `LogManager.getLogger()` 方法获取当前类对应的 Logger 实例,并利用它的 API 来记录不同等级的消息。 --- ### 示例程序运行流程分析 假设我们执行以下代码片段: ```java public static void main(String[] args) { String message = "这是一个测试"; Test.debug(message); } ``` 当调用 `LOGGER.debug(...)` 时,如果当前 Logger 的有效日志级别允许调试信息显示,则会在终端或者指定文件中看到类似这样的输出结果: ``` 2023-09-28 17:36:45 DEBUG org.example.additivity.Test - org.example.additivity.Test#debug 输入参数 s: 这是一个测试 ``` 这表明成功实现了日志功能。 --- ### 向更现代的选择 —— Log4j2 尽管传统版本的 Log4j 功能强大,但由于存在严重的安全漏洞(如 CVE-2021-44228),官方推荐迁移到更新一代框架即 Log4j2。关于后者如何配置与应用,请参阅专门文档进一步学习。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值