【问题标题】:Log file is created but File is empty日志文件已创建但文件为空
【发布时间】:2013-03-20 09:44:07
【问题描述】:

我正在使用 log4j.properties 文件在我的 java 项目中生成日志。我只想要自定义日志语句和与该语句对应的日志文件。 我的日志文件是这样的:

log4j.logger.org.apache.axis.enterprise=DEBUG, stdout,Rollfile
log4j.rootLogger=off
log4j.logger.com.gridsense.server.automode=Rollfile,stdout
log4j.appender.Rollfile=org.apache.log4j.RollingFileAppender
log4j.appender.Rollfile.Threshold=DEBUG
log4j.appender.Rollfile.File=D:/javaProjects/AutomodeGS_Prachi/AutoGS.log
log4j.appender.Rollfile.MaxFileSize=2MB
log4j.appender.Rollfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Rollfile.layout.ConversionPattern=[%t] %-5p %c %d{dd/MM/yyyy HH:mm:ss}  – %m%n

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x – %m%n

但是当我运行程序时,日志语句会打印在控制台上并创建空日志文件。我不明白什么是问题。为什么我的日志文件是空的? 在我的课堂上,我写了声明

private static  Logger logger = Logger.getLogger(Driver.class);

我正在导入

import org.apache.log4j.Logger;

实际上,我阅读了您针对与“Log4J 文件为空”相关的问题提供的解决方案,并对我的代码进行了一些更改。我将导入语句更改为

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

在我的课堂上:

static Log   logger = LogFactory.getLog(Driver.class);

我仍然遇到同样的问题。任何建议都会有所帮助。

【问题讨论】:

  • 您是否将 log4j.logger.yourPackageOrClass 添加到您的属性文件中?

标签: java logging log4j


【解决方案1】:

替换

log4j.rootLogger=off

log4j.rootLogger=DEBUG,stdout,Rollfile

【讨论】:

  • 如果我用 log4j.rootLogger=DEBUG,stdout,Rollfile 替换这个 log4j.rootLogger=off 语句,那么我会得到所有的日志语句。但我只想要选择性语句,所以添加了 log4j.rootLogger=off
  • 将 DEBUG 更改为 INFO 然后只会打印那些在 java 文件中的日志。例如logger.info("将打印此行");
【解决方案2】:

您的早期代码没有问题,但较新的代码更好,因为您的代码未绑定到 log4j API。

您确定您的应用程序正在加载此日志文件吗?

rollfile 将仅从包 com.gridsense.server.automode 下的类中获取日志消息。您确定有一些日志消息正在执行吗?

通常我一直使用

log4j.rootLogger=DEBUG, stdout,Rollfile

而不是下面,所以不确定它是否有任何冲突。

log4j.logger.org.apache.axis.enterprise=DEBUG, stdout,Rollfile
log4j.rootLogger=off

【讨论】:

  • 如果我删除这个 log4j.rootLogger=off 语句并添加 log4j.rootLogger=DEBUG, stdout,Rollfile 这个然后我得到所有的日志语句。但我只想要选择性语句,所以添加了 log4j.rootLogger=off
  • 你应该有 log4j.rootLogger=DEBUG、stdout 和 log4j.logger.com.gridsense.server.automode=Rollfile。
  • 您好,我找到了答案。需要将以下语句 log4j.logger.org.apache.axis.enterprise=DEBUG,stdout,Rollfile 替换为 log4j.logger.com.gridsense.server.automode=DEBUG,stdout,Rollfile
【解决方案3】:

解决方法很简单: 移动主项目目录中的“Log4j.properties”文件

  • 如果您在任何内部包或文件夹下有 Log4j.properties 文件,请将其移动到主项目文件夹。

Properties file structure

【讨论】:

  • 不一定。一些配置会期望在定义的路径中找到 log4j.properties 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 2021-11-06
  • 2018-06-28
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多