java - 为什么我的日志被删除?

标签 java log4j

我有一个使用 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/

相关文章:

java - Log4j 2 记录输出消息以及文​​件编号的链接

java - jsp HTTPS POST 请求

java - 使用 SpringMVC 和 Thymeleaf 提交时出现空表单

java - FileAppender 打开 FileHandle 但从不记录

grails - Grails log4j版本与第三方Java API发生冲突

java - Log4j:socketappender - 当远程主机关闭时如何捕获本地文件中的日志

java - 使用可选参数记录

java - 以编程方式安装 apk,无需定义 apk 名称

java - 如何避免观察者模式中的无限循环?

java - Jsoup 中的正则表达式适用于 java 项目,不适用于 Android 项目