Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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 已创建但未写入的log4j2文件_Java_Eclipse_Logging_Log4j2_Rollingfileappender - Fatal编程技术网

Java 已创建但未写入的log4j2文件

Java 已创建但未写入的log4j2文件,java,eclipse,logging,log4j2,rollingfileappender,Java,Eclipse,Logging,Log4j2,Rollingfileappender,我最近在一个JavaWeb服务应用程序中更新了log4j,从v1.2升级到v2.6.2;该应用程序托管在Tomcat 7.0.21上,使用Java 7.0_67-b01;使用EclipseJuno(v4.2.0)进行编码/编译 我在一个新的lo4j2.xml配置文件中复制了log4j.properties功能。下面是代码示例,我尝试在标准控制台appender之外使用RollingFile appender和File appender 正在预期位置创建日志文件,但它们仍然为空。控制台本身正在记录

我最近在一个JavaWeb服务应用程序中更新了log4j,从v1.2升级到v2.6.2;该应用程序托管在Tomcat 7.0.21上,使用Java 7.0_67-b01;使用EclipseJuno(v4.2.0)进行编码/编译

我在一个新的lo4j2.xml配置文件中复制了log4j.properties功能。下面是代码示例,我尝试在标准控制台appender之外使用RollingFile appender和File appender

正在预期位置创建日志文件,但它们仍然为空。控制台本身正在记录我的应用程序向它抛出的所有消息;catalina.yyy-mm-dd.log文件的日志信息级别更高。如上所述,创建了tearsLog.log和tearsLogRF.log文件,但根本没有向它们写入日志消息

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
    <Properties>
        <Property name="log-path">${sys:catalina.home}/logs</Property>
    </Properties>
    <Appenders>
        <Console name="Console" 
                target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%t] (%F:%L) - %m%n" />
        </Console>

        <File name="MyFile" 
                append="true" immediateFlush="true" 
                fileName="${log-path}/tearsLog.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%t] (%F:%L) - %m%n" />
        </File>

        <RollingFile name="MyRollingFile" 
                append="true" immediateFlush="true" 
                fileName="${log-path}/tearsLogRF.log" 
                filePattern="${log-path}/tearsLogRF_%d{yyyy-MM-dd_HH-mm-ss}.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%t] (%F:%L) - %m%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="100 KB" />
            </Policies>
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
    </Appenders>

    <Loggers>
        <Logger name="us.ak.state.adfg.tears.service.TearsService" level="info" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="MyFile" level="trace" />
            <AppenderRef ref="MyRollingFile" />
        </Logger>

        <Logger name="us.ak.state.adfg.tears.data.GenericDao" level="info" additivity="false">
            <AppenderRef ref="MyFile" level="trace" />
            <AppenderRef ref="MyRollingFile" />
        </Logger>

        <Logger name="us.ak.state.adfg.tears.data.EmployeeDao" level="info" additivity="false">
            <AppenderRef ref="MyFile" level="trace" />
            <AppenderRef ref="MyRollingFile" />
        </Logger>

        <Logger name="us.ak.state.adfg.tears.data.TimesheetDao" level="info" additivity="false">
            <AppenderRef ref="MyFile" level="trace" />
            <AppenderRef ref="MyRollingFile" />
        </Logger>

        <Logger name="us.ak.state.adfg.tears.data.SecurityDao" level="info" additivity="false">
            <AppenderRef ref="MyFile" level="trace" />
            <AppenderRef ref="MyRollingFile" />
        </Logger>

        <Root level="debug">
            <AppenderRef ref="Console" />
            <AppenderRef ref="MyFile" level="trace" additivity="false" />
            <AppenderRef ref="MyRollingFile" additivity="false" />
        </Root>
    </Loggers>
</Configuration>

我一直在努力,看了很多很多的代码示例,ApacheLog4J文档,等等问题/答案,使用的示例代码和建议。。。不知道怎么了。我知道这很接近,只是一些小把戏让我无法修复它,无法继续前进。如果你能帮忙,我将不胜感激。提前感谢…

您在控制台上看到的消息可能是tomcat发出的。如果您只运行这个示例代码,那么日志中没有任何内容是可以的——唯一的日志是在出错时完成的。更改您的代码:

public int saveTimesheet(User user, Timesheet ts) throws Exception {        
    String msg = "";  
    log.info("Message:{}",msg);
    if (user == null) {
        msg = "Null user.";
        log.error(msg);
        throw new Exception(msg);
    }
    ...
    return 0;
}
顺便说一句,您不应该为每个类定义一个记录器,它足够为所有内容定义一个通用记录器:

 <Loggers>
    <root level="debug">
      ...
    </root>
    <Logger name="us.ak.state.adfg.tears" level="info" additivity="false">
        <AppenderRef ref="Console" />
        <AppenderRef ref="MyFile" level="trace"/>
        <AppenderRef ref="MyRollingFile" />
    </Logger>

 </Loggers>

...

您在控制台上看到的消息可能是tomcat发出的。如果您只运行这个示例代码,那么日志中没有任何内容是可以的——唯一的日志是在出错时完成的。更改您的代码:

public int saveTimesheet(User user, Timesheet ts) throws Exception {        
    String msg = "";  
    log.info("Message:{}",msg);
    if (user == null) {
        msg = "Null user.";
        log.error(msg);
        throw new Exception(msg);
    }
    ...
    return 0;
}
顺便说一句,您不应该为每个类定义一个记录器,它足够为所有内容定义一个通用记录器:

 <Loggers>
    <root level="debug">
      ...
    </root>
    <Logger name="us.ak.state.adfg.tears" level="info" additivity="false">
        <AppenderRef ref="Console" />
        <AppenderRef ref="MyFile" level="trace"/>
        <AppenderRef ref="MyRollingFile" />
    </Logger>

 </Loggers>

...

最终,重新启动Tomcat服务器神奇地解决了这个问题。奇怪的是,这是必要的,代码和log4j模块在应用程序中都是独立的,我想简单地重新部署应用程序就能让它工作(它创建了文件)?无论如何,它现在似乎正在工作。

最终,重新启动Tomcat服务器神奇地解决了这个问题。奇怪的是,这是必要的,代码和log4j模块在应用程序中都是独立的,我想简单地重新部署应用程序就能让它工作(它创建了文件)?不管怎么说,它现在似乎正在发挥作用。

不要在评论中发表这一点。编辑问题。删除评论。不要在评论中发布。编辑问题。删除评论。谢谢你的提示,我希望我能减少代码重复。你得到了努力的回报。。。但最终,重启Tomcat服务器神奇地解决了这个问题。奇怪的是,这是必要的,代码和log4j模块在应用程序中都是独立的,我想简单的重新部署就能让它工作(它创建了文件)?不管怎样,它现在似乎正在工作。谢谢你的提示,我希望我能减少代码重复。你得到了努力的回报。。。但最终,重启Tomcat服务器神奇地解决了这个问题。奇怪的是,这是必要的,代码和log4j模块在应用程序中都是独立的,我想简单的重新部署就能让它工作(它创建了文件)?不管怎么说,它现在似乎起作用了。