首页 > 解决方案 > Log4j2.xml 在 java hibernate 框架中不会突然创建文件

问题描述

我在 NetBeans 中有一个带有休眠框架的 Maven 项目。很长一段时间以来,它都在正确地工作。对数据库进行一些修改后,控制台日志仍在工作,但写入文件已停止,没有任何错误或异常。我已删除日志文件目录并重新启动项目,但这一次它甚至无法创建文件路径目录。这是我的 log4j2.xml 配置(在 src/main/resources 中)

我已将路径更改为 D:\logs 和 D:/logs,并尝试了不同的级别(调试、信息、错误)。还尝试由管理员从命令行运行我的“Server.jar”。应该提到的是,我尝试了Log4J 中的解决方案创建日志文件但没有写入它以及许多其他建议的解决方案,但没有成功。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
    <Properties>
        <Property name="path">${sys:user.home}/logs/server</Property>
    </Properties>
    <Appenders >
        <RollingFile name="connections"  append="true"  fileName="${path}/connections.log"
                     filePattern="${path}/connections-%d{yyyy-MM-dd}-%i.log" >
            <!-- log pattern -->
            <PatternLayout>
                <pattern> %d{yyyy-MM-dd HH:mm:ss}  [%-4level] - %msg %n</pattern>
            </PatternLayout>
            <!-- set file size policy -->
            <Policies>
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>        
        <RollingFile name="unexpected-events"  append="true"  fileName="${path}/unexpected-events.log"
                     filePattern="${path}/unexpected-events-%d{yyyy-MM-dd}-%i.log" >
            <!-- log pattern -->
            <PatternLayout>
                <pattern> %d{yyyy-MM-dd HH:mm:ss}  [%-4level] - %msg %n</pattern>
            </PatternLayout>
            <!-- set file size policy -->
            <Policies>
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
        <RollingFile name="readouts"  append="true"  fileName="${path}/readouts.log"
                     filePattern="${path}/readouts-%d{yyyy-MM-dd}-%i.log" >
            <!-- log pattern -->
            <PatternLayout>
                <pattern> %d{yyyy-MM-dd HH:mm:ss}  [%-4level] - %msg %n</pattern>
            </PatternLayout>
            <!-- set file size policy -->
            <Policies>
                <SizeBasedTriggeringPolicy size="20 MB" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>        
    </Appenders>
    <Loggers>
        <Logger name="connections" level="info" additivity="false">
            <appender-ref ref="connections" level="debug"/>
            <!--<appender-ref ref="console-log" level="debug"/>-->
        </Logger>                
        <Logger name="unexpected-events" level="info" additivity="false">
            <appender-ref ref="unexpected-events" level="debug"/>
            <!--<appender-ref ref="console-log" level="debug"/>-->
        </Logger>
        <Logger name="readouts" level="info" additivity="false">
            <appender-ref ref="readouts" level="debug"/>
            <!--<appender-ref ref="console-log" level="debug"/>-->
        </Logger>
        <Root level="error" additivity="false">
            <!--<AppenderRef ref="console-log"/>-->
        </Root>
    </Loggers>
</Configuration>

这就是我在我的java类中使用它的方式:

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;

    ......

    private static final Logger connectionsLog = LogManager.getLogger("connections");

    ....
     connectionsLog.info("device" + deviceNumber + " disconnected");

标签: javahibernatemavenlog4j2

解决方案


当两者都在类路径上时commons-logging,我已经看到了这样的怪异。jcl-over-slf4j从 Maven 类路径中排除commons-logging它出现的任何地方通常都有帮助。


推荐阅读