我有一个使用 log4j 作为日志记录 jar 的 java 应用程序,但是当我尝试调试我的应用程序并打开日志文件时,我发现它很短,并且只有我记录的最后几行,并且旋转文件没有显示任何内容我以前见过的日志。
我的配置文件有问题吗?我有多个项目指向同一个日志文件,这可能是问题所在吗?
这是我的 log4j.properties:
log4j.rootLogger=ERROR,logfile
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=/opt/tomcat7/logs/mylogs.log
log4j.appender.logfile.MaxFileSize=500KB
# Keep one backup file
log4j.appender.logfile.MaxBackupIndex=2
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %5p (%F:%L) - %m%n
谢谢
最佳答案
您将根记录器的级别指定为 ERROR,而在大多数情况下,不会有很多 ERROR 消息 - 也许每条 INFO 级别消息只有一到两个,而您却抑制了它们:ERROR 级别仅允许 ERROR 和 FATAL要记录的消息。它会过滤出任何信息、警告、调试、跟踪级别。通常您不会在开发中使用此类设置。在生产中,您通常只抑制一些详细的类/包,而不是您发布的配置中的所有内容(意味着这里的错误级别适用于每个类)。
所以我想你应该在配置中将 ERROR 替换为 INFO。
更新:log4j 也可能根本看不到您的配置文件。我个人多次遇到这个问题,每次我都有这样的解决方法:
public class Log4JProperties {
public static void setupLog4j(){
String log4jPathFile = Log4JProperties.class.getResource("/log4j.properties").getFile();
Properties props = new Properties();
try {
InputStream configStream = new FileInputStream(log4jPathFile);
props.load(configStream);
configStream.close();
} catch (IOException e) {
System.out.println("log4j configuration file not found");
}
LogManager.resetConfiguration();
PropertyConfigurator.configure(props);
}
}
当我从 Intellij 内部运行代码时,这是不必要的,但是当我使用 Maven 运行时,如果不在执行开始时调用此函数,日志记录将无法工作。
关于java - 为什么我的日志被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40477306/