Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何配置log4j和logback以正确登录到单个文件?_Java_Maven_Log4j_Slf4j_Logback - Fatal编程技术网

Java 如何配置log4j和logback以正确登录到单个文件?

Java 如何配置log4j和logback以正确登录到单个文件?,java,maven,log4j,slf4j,logback,Java,Maven,Log4j,Slf4j,Logback,我有一个java web应用程序,它使用带有slf4j的logback进行日志记录。 这个项目有一个依赖项jar(它是一个子项目)。这个依赖项jar使用org.apache.log4j.Logger进行日志记录。 所有日志必须放在一个日志文件中。 我的问题是,无论我用jar文件中的代码记录什么,都不会写入日志文件。 最初我有logback.xml。为了解决上述问题,我将log4j.properties文件添加到我的web应用程序中。 它解决了我的问题,现在我可以在一个文件中看到所有日志 同样,我

我有一个java web应用程序,它使用带有slf4j的logback进行日志记录。 这个项目有一个依赖项jar(它是一个子项目)。这个依赖项jar使用org.apache.log4j.Logger进行日志记录。 所有日志必须放在一个日志文件中。 我的问题是,无论我用jar文件中的代码记录什么,都不会写入日志文件。 最初我有logback.xml。为了解决上述问题,我将log4j.properties文件添加到我的web应用程序中。 它解决了我的问题,现在我可以在一个文件中看到所有日志

同样,我的新问题是:以前日志文件是根据logback.xml中的滚动策略每天滚动的。 现在它没有滚动。即使我在log4j.properties中配置了与logback.xml中的滚动策略相匹配的滚动策略,滚动也不会发生

我不想用logback替换依赖项中的log4j。我还想把我所有的日志都写进一个文件。 有没有可能,我该如何解决我的问题

仅供参考:我的pom.xml中包含了“log4j-over-slf4j”依赖项

Log4j.properties:

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=SOME_PATH/logs/studentApp.log
log4j.appender.file.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.rollingPolicy.FileNamePattern = SOME_PATH/logs/studentApp.%d{yyyy-MM-dd}.log    
log4j.appender.file.maxBackupIndex=14
log4j.appender.file.threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p] %d %c - %m%n
log4j.rootLogger=DEBUG,file

假设您的滚动策略是正确的,那么log4j可能会选择错误的配置。log4j在类路径中查找第一个配置文件(首先是
.xml
然后是
.properties
),如果它恰好是某个依赖项的配置,则滚动策略将不起作用

为了测试这一点,您可以添加一个系统属性
-Dlog4j.configuration=…
,并将您的配置路径添加到tomcat启动脚本中。或者简单地将日志级别设置为跟踪/调试,看看它是否会影响输出

编辑:您的log4j配置看起来不错,但是缺少日期模式。 尝试添加
log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-MM
(注意,为了便于测试,我已将模式设置为每分钟滚动一次)


编辑:您可以删除包含
rollingPolicy
maxBackupIndex
的每一行-在这种情况下将不会拾取这些内容

以下配置将为当前日期创建一个.log文件,并继续在该文件中添加日志。当日期更改时,它将使用当前日期创建一个新文件。此配置还将在文件超过某个大小限制时压缩文件

    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <fileNamePattern>log.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>

                          <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                                <!-- or whenever the file size reaches 500MB -->
                                <maxFileSize>300MB</maxFileSize>
                        </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %logger{0} - %msg%n</pattern>
        </encoder>
    </appender>

日志。%d{yyyy-MM-dd}。%i.log.zip
300MB
%日期%level[%thread]%logger{0}-%msg%n

希望有帮助。

谢谢你的回答,但是我的Dependency中没有任何log4j的配置。你是否尝试更改调试级别以确保正确选择了配置?也许你的滚动策略有问题,我已经编辑了我的问题以显示我的属性文件。请查看它让我知道它是否有任何错误,,Thank我尝试将调试级别设置为debug,我注意到它正确地选择了配置我做了编辑中所说的,现在它正在滚动,但文件名错误。例如,它显示的不是studentApp.2016-03-17-10-53.log,而是studentApp.log.2016-03-17-10-53,因此我无法打开该文件,你知道吗??