Java Log4j不';不要将日志写入文件

Java Log4j不';不要将日志写入文件,java,log4j,Java,Log4j,我在log4j上使用slf4j <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.12</version> </dependency> <dependency&

我在log4j上使用slf4j

     <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>
     <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
     </dependency>
在另一个具有相同版本Tomcat的环境中,相同的响应工作正常,记录到文件…

而不是:

log4j.appender.mainpappender.File=mainloggs.log

log4j.appender.mainpappender.Append=true

使用:


当您不在类路径中添加log4j.properties文件时,问题可能会出现。要修复相同的问题,请执行以下步骤:-

  • 在project中创建一个文件夹resources,并将log4j.properties放入其中
  • 转到项目属性-->Java生成路径-->单击添加文件夹-->检查资源文件夹-->单击确定并完成。它应该能解决你的问题

  • 您的
    log4j.properties
    文件应该在
    WEB-INF/classes
    中,而不是
    WEB-INF
    WEB-INF
    不在WEB应用程序类路径中,但
    WEB-INF/classes
    在其中。

    对于基于Maven的项目,请将log4j.properties保存在src/main/resources中

     log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
     log4j.appender.file.Append=true
    

    如果它不工作。请将您的web.xml文件放到另一个环境中。您说过相同的配置文件在另一个环境中工作正常。你能详细介绍一下环境之间的差异吗。e、 它们都在窗户上吗?is在另一个环境中工作正常这一事实表明您的配置很好,但您的环境存在一些问题。以下是一些需要检查的事项:

    • tomcat进程是否具有写入该文件的权限?例如,写入D:\logs\log4j.log是否需要管理员权限

    • 确保tomcat目录中没有任何临时文件,这可能会阻止您的更改生效。当然,停止tomcat,从%CATALINA_HOME%\webapps中删除扩展的war,删除%CATALINA_HOME%\temp和%CATALINA_HOME%\work的内容

    • 检查类路径上是否没有任何其他log4j配置文件,因为这些文件可能会覆盖log4j文件并阻止其生效。要再次检查这一点,您可以尝试暂时删除log4j.properties文件,查看是否收到消息说日志系统未正确初始化


      • 可能根本没有读取您的log4j.properties。如果找不到,那么log4j将使用默认配置,您甚至可能不知道它。 试着越过这条线

        -Dlog4j.configuration=file:///D:/yourPathToFile/log4j.properties


        作为运行配置中的VM参数,并查看它是否有帮助。

        我也遇到了同样的问题。它以前工作过,但现在不工作了。 我想这不是log4j2或slf4j的问题(就像我的例子一样),而是配置文件的相对路径的问题

        若您已经更新了java或更新了IDE,或者更改了一些系统变量或文件夹的相对路径,那个么您的问题和我的类似

        可能的修复/解决方法-

        • 尝试将log4j2配置文件包括在工件中,同时 建造它
        • 或者,您可以从属性文件和硬代码获取配置 登录代码本身——这对我来说很有用

        在提到windows上的文件路径时,请尝试使用该方案。在其他平台上不需要这样提及,但在windows上您需要这样做。我观察到有关没有scheme的文件路径的问题

        log4j.appender.file.File=file://d:/logs/log4j.log
        

        因此,在tomcat上编写web应用程序时,我遇到了一个类似的问题,即.log文件没有写入。最后,我将文件路径更改为与类似
        \log.log
        的内容相关。然后我注意到,当我使用tomcat 7运行程序时,我在tomcat安装中的\bin目录而不是\log目录中找到了日志文件。

        我也遇到了同样的问题,将log4j.log放入源代码工作。我以为它是在EAR文件中编译的,但事实并非如此。假设它使用默认值。

        我也有同样的问题。事实证明,Tomcat中还有另一个web应用程序,其中包含另一个log4j.properties文件。删除此应用程序后,一切正常

        请查看此问题是否对您有用:是否可以发布扩展的项目结构?是否尝试将-Dlog4j.debug添加到JVM参数中,以使log4j打印其启动信息?您的日志语句是否显示在System.out中?它们是否遵循配置文件中指定的格式?如果更改配置文件中的格式,System.out中的语句是否也会更改?如果他们没有,log4j就找不到你的配置文件。你试过这个简单的helloworld+1吗?这个解决了我的问题,似乎是这个问题的最佳答案(也许不是“最干净”的解决方案,但它确实有效)。
        log4j.appender.file.File=${user.home}\\Logs\\mylogfile.log
        
        log4j.appender.file.File=file://d:/logs/log4j.log
        
        log4j.appender.file.File=${user.home}\\Logs\\mylogfile.log