为应用添加log4j遇日志输出问题:警告信息无法打印
看起来你遇到的问题是log4j的warn日志没有输出到控制台和文件,主要是因为你的配置里缺少了几个关键设置项,我帮你调整一下配置,确保info、warn、error级别的日志能正常输出:
调整后的完整log4j配置
# Root logger: 指定最低级别为INFO,同时输出到stdout和file log4j.rootLogger=INFO, stdout, file # 控制Hibernate日志级别为INFO,避免冗余日志 log4j.logger.org.hibernate=INFO # Console Appender配置:输出到IntelliJ控制台 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out # 指定控制台输出的最低日志级别为INFO log4j.appender.stdout.Threshold=INFO log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # 定义日志格式:时间、级别、类名、行号、消息 log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # File Appender配置:输出到atp.log文件 log4j.appender.file=org.apache.log4j.RollingFileAppender # 指定日志文件路径(相对路径会生成在项目根目录) log4j.appender.file.File=atp.log # 单个日志文件最大大小,避免文件过大 log4j.appender.file.MaxFileSize=10MB # 保留的备份日志文件数量 log4j.appender.file.MaxBackupIndex=5 # 指定文件输出的最低日志级别为INFO log4j.appender.file.Threshold=INFO log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
关键问题说明
- Root Logger缺少级别:你原来的
log4j.rootLogger= stdout, file没有指定日志级别,log4j默认根级别是DEBUG,但未明确配置时可能导致级别过滤异常。加上INFO后,根logger会捕获INFO及以上(INFO、WARN、ERROR)的日志。 - Appender未设置Threshold:每个appender需要通过
Threshold指定自己输出的最低级别,确保控制台和文件都只输出你需要的级别。 - PatternLayout配置不完整:你原来的配置里
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout后面没有定义日志格式,补全后日志会更清晰易读。 - File Appender配置缺失:你原来只提到了file appender,但没有具体的实现类和文件路径等配置,这里用
RollingFileAppender(滚动文件追加器)比普通FileAppender更实用,会自动分割大文件。
代码使用示例
确保你在代码中正确获取Logger并输出日志:
import org.apache.log4j.Logger; public class YourServiceClass { // 获取当前类的Logger实例 private static final Logger logger = Logger.getLogger(YourServiceClass.class); public void doSomething() { // 输出不同级别的日志 logger.info("业务操作开始"); logger.warn("注意:当前操作可能存在风险"); try { // 模拟异常 int i = 1 / 0; } catch (Exception e) { logger.error("操作失败", e); } } }
依赖检查(Maven为例)
如果用Maven管理项目,确保pom.xml中包含log4j的依赖:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> <!-- 可根据需要选择合适的1.x版本 --> </dependency>
内容的提问来源于stack exchange,提问作者user9729328




