Log4j2.xml 不会在 java 休眠框架中突然创建文件
Log4j2.xml doesn't create file suddenly in java hibernate framework
我在 NetBeans 中有一个带有休眠框架的 Maven 项目。很长一段时间它都在正确地工作。在数据库中进行一些修改后,控制台日志仍在工作,但写入文件已停止,没有任何错误或异常。我已经删除了日志文件目录并重新启动项目,但这次它甚至无法创建文件路径目录。
这是我的 log4j2.xml 配置(在 src/main/resources 中)
我已将路径更改为 D:\logs 和 D:/logs,并尝试了不同级别(调试、信息、错误)。管理员还尝试从命令行 运行 我的 "Server.jar"。应该提到的是,我尝试了 Log4J creates log file but does not write to it 中的解决方案和许多其他建议的解决方案,但没有成功。
<?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 class 中使用它的方式:
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");
当 commons-logging
和 jcl-over-slf4j
都在类路径中时,我曾见过这样的怪事。从 Maven 类路径中排除 commons-logging
,它出现的任何地方通常都有帮助。
特别感谢 user944849 ,我了解到问题可能与 maven 依赖项有关。然后我检查了我的项目的以前版本(它有正确的日志记录)并比较依赖关系,发现添加了一个库 "log4j-to-slf4j"(由于导入 "org.springframework.boot" 而添加)。然后首先我将它从 pom.xml 文件的依赖项中排除,结果它在 NetBeans IDE 中工作正常但在它之外没有。然后,我从 pom.xml 中删除了该依赖项,问题得到了解决!
我在 NetBeans 中有一个带有休眠框架的 Maven 项目。很长一段时间它都在正确地工作。在数据库中进行一些修改后,控制台日志仍在工作,但写入文件已停止,没有任何错误或异常。我已经删除了日志文件目录并重新启动项目,但这次它甚至无法创建文件路径目录。 这是我的 log4j2.xml 配置(在 src/main/resources 中)
我已将路径更改为 D:\logs 和 D:/logs,并尝试了不同级别(调试、信息、错误)。管理员还尝试从命令行 运行 我的 "Server.jar"。应该提到的是,我尝试了 Log4J creates log file but does not write to it 中的解决方案和许多其他建议的解决方案,但没有成功。
<?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 class 中使用它的方式:
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");
当 commons-logging
和 jcl-over-slf4j
都在类路径中时,我曾见过这样的怪事。从 Maven 类路径中排除 commons-logging
,它出现的任何地方通常都有帮助。
特别感谢 user944849 ,我了解到问题可能与 maven 依赖项有关。然后我检查了我的项目的以前版本(它有正确的日志记录)并比较依赖关系,发现添加了一个库 "log4j-to-slf4j"(由于导入 "org.springframework.boot" 而添加)。然后首先我将它从 pom.xml 文件的依赖项中排除,结果它在 NetBeans IDE 中工作正常但在它之外没有。然后,我从 pom.xml 中删除了该依赖项,问题得到了解决!