Log4j不同等级输入不同文件

本文详细介绍了Log4j的配置方法,特别是如何使用Threshold来控制不同级别的日志输出。通过实例展示了如何设置全局及特定appender的日志级别,帮助读者更好地理解和应用Log4j。

主要是利用Threshold.

Threshold的语法

log4j.threshold=level

level就是前面所说的 OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。Threshold是个全局的过滤器,它将把低于所设置的level的信息过滤不显示出来。
看一个例子:

log4j.rootLogger=DEBUG, CON
log4j.appender.CON=org.apache.log4j.ConsoleAppender
log4j.appender.CON.layout=org.apache.log4j.PatternLayout
log4j.appender.CON.layout.ConversionPattern=[%t] %-5p %c - %m%n
#Only print log statement of level WARN or above regardless of the(只打印warn级别以上的信息)
#logger.
log4j.threshold=WARN

Threshold的用法很灵活,还可以在appender中增加threshold

log4j.rootLogger=DEBUG, C
log4j.appender.C=org.apache.log4j.ConsoleAppender
# Set the appender threshold to INFO
log4j.appender.C.Threshold=INFO
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

这里初始设置 level为DEBUG ,但log4j.appender.C.Threshold=INFO 设置为INFO。因为 INFO>DEBUG 所以如果含有DEBUG级别的信息,将被过滤。


log4j.rootLogger=debug, stdout, R


log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d] [%4p] %l %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.Encoding=GBK
log4j.appender.R.Threshold=info
log4j.appender.R.File=cohl_elearning.log
#..//oil//applications//cohlElearning//cohlElearning//
log4j.appender.R.MaxFileSize= 2048KB
log4j.appender.R.MaxBackupIndex=20
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%d] [%t] [%4p] %l %m%n  

public class TestJava {

	static Logger logger = Logger.getLogger(TestJava.class);
	/**
	 * @param args
	 */
	public static void main(String[] args) {
	loggerTest();
	}    
public static void loggerTest() {
    	logger.info("logger info");
    	logger.debug("logger debug");
    	logger.error("logger error");
    	
    }
}


### 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、付费专栏及课程。

余额充值