[英]Configuring multiple applications using Log4j to write simultaneously in same log file
有什么方法可以将相同应用程序的两个实例记录到相同的日志文件中? 目前,我有以下代码:
JAVA:
log = Logger.getLogger("APP");
Properties properties = new Properties();
properties.load(ClassLoader.getSystemClassLoader()
.getResourceAsStream("config/logger.properties"));
String logpath = properties.getProperty("log4j.appender.APP.File");
Properties log4jProperties = new Properties();
InputStream configStream = ClassLoader.getSystemClassLoader()
.getResourceAsStream("config/logger.properties");
log4jProperties.load(configStream);
configStream.close();
PropertyConfigurator.configure(log4jProperties);
log.error("error");
此配置-logger.properties
log4j.rootLogger = DEBUG, R
log4j.category.APP=DEBUG, APP
log4j.appender.APP= org.apache.log4j.RollingFileAppender
log4j.appender.APP.File = C:\\Users\\log4j\\Desktop\\b.txt
log4j.appender.APP.MaxFileSize = 2KB
log4j.appender.APP.MaxBackupIndex = 3
log4j.appender.APP.Append = true
log4j.appender.APP.layout = org.apache.log4j.PatternLayout
log4j.appender.APP.layout.ConversionPattern=%-2d{dd/MM/yy HH:mm:ss} %p %t %c - %m%n
当我启动应用程序的第二个实例时,出现以下错误:
log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: C:\\Users\\log4j\\Desktop\\c.txt (The process cannot access the file because it is being used by another process)
2015年7月2日更新:
我发现了问题。 显然RollingFileAppender存在一个错误,因此我将其更改为FileAppender,现在这两个实例可以访问该文件并记录其消息。
这是最终配置:
log4j.rootLogger = DEBUG, R
log4j.category.APP=DEBUG, APP
log4j.appender.APP= org.apache.log4j.RollingFileAppender
log4j.appender.APP.File = C:\\Users\\log4j\\Desktop\\b.txt
log4j.appender.APP.Append = true
log4j.appender.APP.layout = org.apache.log4j.PatternLayout
log4j.appender.APP.layout.ConversionPattern=%-2d{dd/MM/yy HH:mm:ss} %p %t %c - %m%n
我必须删除MaxFileSize和MaxBackupIndex,因为它们与FileAppender模式不兼容。
AFAIK这对于log4j是不可能的。 您可以在审慎模式下使用Logback( http://logback.qos.ch/manual/appenders.html ),也可以尝试使用其他工具进行集中式日志记录(例如http://logstash.net/ )
我认为这主要是Windows问题。 我已经在Linux下看到了这项工作。
但是,我不建议这样做:
如果要汇总某种报告的数据,请考虑记录到数据库中,该数据库可提供事务性并可以更好地控制数据。
如果要监视来自多个源的错误,则可以编写一个脚本,以捕获某些关键字的多个日志文件。
只需在Log4j.xml文件中添加所有必需的附加程序
例如
<category name="com.vasx.edm.common.parser.ParserBase" additivity="true">
<priority value="DEBUG"/>
<appender-ref ref="ROLLING_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</category>
<category name="com.vasx.edm.dsp.DSParser" additivity="true">
<priority value="DEBUG"/>
<appender-ref ref="ROLLING_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</category>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.