如何在log4j中使用AsyncAppender將日誌消息寫入Web服務?我應該創建自己的Appender來擴展AsyncAppender,或者只是將自定義的appender附加到AsyncAppender上?如果第二種選擇是正確的,我應該在哪裏使用AsyncAppender對象?有沒有例子?如何在log4j中使用AsyncAppender?
21
A
回答
-4
回答我自己的問題。
在log4j配置文件中(通常是log4j.xml或log4j.properties),我們應該定義AsyncAppender,它會引用一個真正的appender(它可能是我們自己定義的類,就像我的情況一樣)。
所以我寫了一個擴展AppenderSkeleton並實現3個抽象方法的WebServiceAppender類。主要方法是「追加」,它連接到Web服務並將所有信息發送給它。而已。
35
在log4j配置文件中添加AsyncAppender,它將引用一個真正的appender。 對於演示:將asyncappender安慰附加器中的log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p] %d{dd MMM hh:mm:ss aa} %t [%l] %m%n"/>
</layout>
</appender>
<appender name="async" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="500"/>
<appender-ref ref="console"/>
</appender>
<root>
<priority value="all"></priority>
<appender-ref ref="async"/>
</root>
</log4j:configuration>
9
我們想用log4j.AsyncAppender,但找不到任何setter方法在log4j.property文件附加其他附加目的地。所以我們擴展了log4j.AsyncAppender類並添加了一個setter來添加其他appender。這有助於主程序線程獨立於log4j的日誌操作。下面的細節。
log4j的條目:
定義一個記錄器 'com.noPath' 與log4j的文件追加程序, 'fileAppender'。需要注意的是記錄器路徑是無關緊要的,故而得名「com.noPath」
log4j.logger.com.noPath=DEBUG,fileAppender
log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.File=c:/test.log
定義記錄,企業的需求,「com.business」,附加上一步「fileAppender」的文件附加目的地,到log4j的AsyncAppender通過自定義類com.log.AsyncAppenderHelper延伸的log4j AsyncAppender
log4j.logger.com.business=DEBUG,asyncLog
log4j.appender.asyncLog=com.log.AsyncAppenderHelper
log4j.appender.asyncLog.appenderFromLogger=com.noPath
延伸log4j.AsyncAppender Java類com.log.AsyncAppenderHelper,有它在類路徑可用。
package com.log
import java.util.Enumeration;
import org.apache.log4j.Appender;
import org.apache.log4j.AsyncAppender;
import org.apache.log4j.Logger;
/*
* This class helps configure to AsyncAppender from log4j as part of log4j.properties
* You can inject other appenders to AsyncAppender using the AsyncAppenderHelper
* This would free up the main program thread to be independent of log4j's logging operation
* @Author http://www.linkedin.com/in/jobypgeorge
*/
public class AsyncAppenderHelper extends AsyncAppender{
public AsyncAppenderHelper(){
super();
}
public void setAppenderFromLogger(String name){
Logger l = Logger.getLogger(name);
Enumeration<Appender> e = l.getAllAppenders();
while(e.hasMoreElements()){
Appender a = e.nextElement();
this.addAppender(a);
System.out.println("The newAppender "+a.getName() +" attach status "+this.isAttached(a));
}
}
}
相關問題
- 1. Log4j AsyncAppender
- 2. 使用AsyncAppender時log4j重複郵件
- 3. log4j AsyncAppender不顯示行號
- 4. 停止log4j的AsyncAppender線程
- 5. 在Log4J中,爲什麼ConversionPattern中的%C打印'?' (問號)與AsyncAppender?
- 6. 如何在gradle任務中使用log4j
- 7. 如何在eclipse rcp中使用log4j
- 8. 如何在代碼中使用log4j?
- 9. 如何在glassfish中使用log4j
- 10. 如何在Log4j中使用SizeBasedTriggeringPolicy和TimeBasedRollingPolicy?
- 11. Log4J:堆棧跟蹤打印期間出現AsyncAppender和NullPointerException
- 12. 如何使用Log4j與WebLogic
- 13. 如何使用log4j與udp
- 14. 如何使用Log4J的
- 15. log4j:如何使用SocketAppender?
- 16. Spring 5如何使用log4j
- 17. 如何使用的Log4j
- 18. 如何使用Maven在RCP應用程序中使用log4j?
- 19. log4j.properties文件中的AsyncAppender
- 20. 如何在log4j-web上使用WebLookup?
- 21. 在log4j中使用FileNamePattern,RollingFileAppender
- 22. 在oc4j中使用log4j 10.1.3
- 23. 在JBoss 7.1中使用log4j
- 24. 如何在使用java的多線程中使用log4j?
- 25. 如何在JBoss5中用log4j設置DBAppender?
- 26. 如何在grails中禁用log4j插件?
- 27. 如何在Web環境中禁用log4j?
- 28. 如何使Apache httpcomponents使用log4j?
- 29. 如何使用jboss 7.1.1在web應用程序中配置log4j?
- 30. 我如何在grails應用程序中使用log4j?
請爲其他用戶提供您的示例代碼。謝謝 – philipp
你能否提供代碼或幾行? –