[英]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.