Cách sử dụng AsyncAppender trong log4j để viết thông điệp tường trình vào dịch vụ web? Tôi có nên tạo ứng dụng riêng của mình để mở rộng AsyncAppender hoặc chỉ đính kèm các ứng dụng tùy chỉnh vào AsyncAppender không? Nếu lựa chọn thứ hai là chính xác, tôi nên lấy đối tượng AsyncAppender ở đâu? Có ví dụ nào không?Làm thế nào để sử dụng AsyncAppender trong log4j?
Trả lời
Trả lời câu hỏi của riêng tôi.
Trong tệp cấu hình log4j (thường là log4j.xml hoặc log4j.properties), chúng ta nên định nghĩa AsyncAppender sẽ tham chiếu đến appender thực (có thể là lớp được định nghĩa riêng của chúng ta như trong trường hợp của tôi).
Vì vậy, tôi đã viết một lớp WebServiceAppender mở rộng AppenderSkeleton và triển khai 3 phương pháp trừu tượng. Phương pháp chính là "nối thêm" kết nối với dịch vụ web và gửi tất cả thông tin đến đó. Đó là nó.
Thêm AsyncAppender vào tệp cấu hình log4j sẽ đề cập đến một ứng dụng thực sự. Đối với bản demo: thêm asyncappender để an ủi appender trong 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>
Chúng tôi muốn sử dụng log4j.AsyncAppender nhưng không thể tìm thấy bất kỳ phương pháp setter để đính kèm appenders khác tại file log4j.property. Vì vậy, chúng tôi đã mở rộng lớp log4j.AsyncAppender và thêm một setter để thêm các appender khác. Điều này đã giúp thread chương trình chính độc lập với hoạt động khai thác gỗ của log4j. Chi tiết bên dưới.
nhập log4j:
Xác định một logger 'com.noPath' với log4j file appender, 'fileAppender'. Lưu ý rằng đường dẫn logger là không đáng kể và do đó tên 'com.noPath'
log4j.logger.com.noPath=DEBUG,fileAppender
log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.File=c:/test.log
Xác định logger rằng nhu cầu kinh doanh, 'com.business', Gắn appender tập tin của bước trước, 'fileAppender', đến log4j AsyncAppender qua một lớp com.log.AsyncAppenderHelper tùy chỉnh kéo dài log4j AsyncAppender
log4j.logger.com.business=DEBUG,asyncLog
log4j.appender.asyncLog=com.log.AsyncAppenderHelper
log4j.appender.asyncLog.appenderFromLogger=com.noPath
lớp java com.log.AsyncAppenderHelper mở rộng log4j.AsyncAppender, có nó có sẵn trong đường dẫn lớp.
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));
}
}
}
ví dụ hay về cách sử dụng trình bổ sung không đồng bộ trong log4j.properties – hudi
Cẩn thận, điều này có thể dễ dàng phá vỡ. Tôi đã thử điều này nhưng PropertyConfigurator loại bỏ các appender và thêm lại chúng khi nó xử lý. AsyncAppenderHelper của tôi đã kết thúc với một appender đóng. Đây là lý do tại sao bạn cần phải sử dụng DomConfigurator (xml) để sử dụng nó. –
@AlanYackel không có tùy chọn làm thế nào để sử dụng nó với log4j.properties? Tôi không thể sử dụng tệp xml – hudi
- 1. Trong Log4J, tại sao% C trong bản in ConversionPattern '?' (dấu chấm hỏi) với AsyncAppender?
- 2. Làm thế nào để tạo Logger Log4j
- 3. log4j: Cách sử dụng SocketAppender?
- 4. Làm thế nào để bắt đầu sử dụng Chainsaw cho Log4j?
- 5. Làm thế nào để sử dụng FileAppenders của log4j không đồng bộ?
- 6. Làm thế nào để thêm slf4j vào gói log4j pom.xml?
- 7. Làm thế nào để tắt đăng xuất bằng log4j?
- 8. Sử dụng MaxBackupIndex trong DailyRollingFileAppender -log4j
- 9. Log4J; làm thế nào để đảm bảo timestamps luôn luôn trong GMT bằng cách sử dụng ConversionPattern?
- 10. Sử dụng log4j với JBoss 7.1
- 11. cách cấu hình cầu cảng để sử dụng log4j?
- 12. Sử dụng log4j từ src/file groovy
- 13. Cách sử dụng log4j trong nhật thực rcp
- 14. Cách sử dụng các cấp độ log4J
- 15. Làm thế nào để sử dụng grails.plugin.location?
- 16. Làm thế nào để sử dụng QMutex?
- 17. Làm thế nào để sử dụng bitmask?
- 18. Làm thế nào để sử dụng TDictionary?
- 19. Làm thế nào để sử dụng Resources.getFraction()?
- 20. Làm thế nào để sử dụng SqlBulkCopyColumnMappingCollection?
- 21. Làm thế nào để sử dụng cepstral?
- 22. Làm thế nào để sử dụng Parcel.readBooleanArray()?
- 23. Làm thế nào để sử dụng Ant?
- 24. Làm thế nào để sử dụng NSScanner?
- 25. Làm thế nào để sử dụng ReadWriteLock?
- 26. Làm thế nào để sử dụng AutoMapper?
- 27. Làm thế nào để sử dụng DataProtectionProvider?
- 28. Làm thế nào để sử dụng pthread_mutex_trylock?
- 29. Làm thế nào để sử dụng SqlCacheDependency?
- 30. Làm thế nào để sử dụng Deblector?
vui lòng cung cấp mã ví dụ của bạn cho người dùng khác. cảm ơn – philipp
bạn có thể vui lòng cung cấp mã hoặc vài dòng không? –