로그 메시지를 웹 서비스에 기록하기 위해 log4j에서 AsyncAppender를 사용하는 방법은 무엇입니까? AsyncAppender를 확장하거나 AsyncAppender에 사용자 정의 appender를 연결하는 자체 Appender를 만들어야합니까? 두 번째 선택 사항이 맞으면 AsyncAppender 객체를 어디서 가져야합니까? 어떤 예가 있습니까?log4j에서 AsyncAppender를 사용하는 방법은 무엇입니까?
답변
내 질문에 답해주세요.
log4j 설정 파일 (일반적으로 log4j.xml 또는 log4j.properties)에서 실제 appender를 참조하는 AsyncAppender를 정의해야합니다 (내 경우처럼 우리 자신의 정의 된 클래스 일 수 있음).
그래서 AppenderSkeleton을 확장하고 3 가지 추상 메소드를 구현하는 WebServiceAppender 클래스를 작성했습니다. 주된 방법은 웹 서비스에 연결하고 모든 정보를 웹 서비스에 보내는 "추가"입니다. 그게 전부 야.
실제 appender를 참조하는 log4j 구성 파일에 AsyncAppender를 추가하십시오. 데모 : 추가 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>
우리는 log4j.AsyncAppender을 사용하고 싶었에서 펜더 콘솔하지만 log4j.property 파일에서 다른 펜더를 연결하는 모든 setter 메소드를 찾을 수 없습니다. 그래서 우리는 log4j.AsyncAppender 클래스를 확장하고 setter를 추가하여 다른 appender를 추가했습니다. 이것은 주 프로그램 스레드가 log4j의 로깅 작업과 독립적 이도록 도왔습니다. 아래의 내용.
의 log4j 항목 :
는 log4j에 파일이 appender, 'fileAppender'와 로거 'com.noPath'을 정의합니다. 로거 경로는 중요하지 않습니다 따라서 이름이 '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
log4j.logger.com.business=DEBUG,asyncLog
log4j.appender.asyncLog=com.log.AsyncAppenderHelper
log4j.appender.asyncLog.appenderFromLogger=com.noPath
log4j.AsyncAppender 연장 자바 클래스를 확장 com.log.AsyncAppenderHelper 맞춤 클래스 com.log.AsyncAppenderHelper Log4j를 통해 AsyncAppender는, 클래스 경로에 사용할 수있다.
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));
}
}
}
log4j.properties에서 비동기식 appender를 사용하는 좋은 예 – hudi
조심스럽게, 이것은 쉽게 깨질 수 있습니다. 나는 이것을 시도했지만 PropertyConfigurator가 appenders를 제거하고 처리 할 때 다시 추가한다. 내 AsyncAppenderHelper가 폐쇄 된 appender로 끝났습니다. 그래서 DomConfigurator (xml)를 사용해야합니다. –
@AlanYackel log4j.properties와 함께 사용하는 방법은 없습니다. 나는 xml 파일을 사용할 수 없다. – hudi
- 1. log4J에서 사용하는 동안 Async Appender에서 버퍼가 도움이되는 방법
- 2. log4j에서 SMTPAppender를 구성하는 적절한 방법은 무엇입니까?
- 3. log4j에서 로그백 (마이그레이션)
- 4. Log4j에서 크기가 아닌 시간 기준으로 로그 파일을 회전하는 방법은 무엇입니까?
- 5. Log4j에서 출력 로그 파일 이름과 경로를 설정하는 방법은 무엇입니까?
- 6. 원격 jboss 컨테이너가있는 Log4J에서 Logger를 사용/배포하는 방법은 무엇입니까?
- 7. log4j에서 롤오버가 발생했을 때 프로그래밍 방식으로 결정하는 방법은 무엇입니까?
- 8. Log4J에서 문제 제기하기
- 9. log4j에서 예외 스택 트레이 숨기기
- 10. log4j에서 패키지 레벨 로깅을 활성화하는 방법
- 11. 번들로 제공되는 log4j.xml 파일을 .jar에서 인식하고 사용하는 방법은 무엇입니까?
- 12. log4j에서 패키지의 로그 수준을 변경할 수 있습니까?
- 13. log4j에서 예외 이메일을 스로틀 할 수 있습니까?
- 14. log4j에서 로그 콘솔 출력을 제어하는 방법
- 15. 롤링 로그 파일 용 log4j에서 RollingFileAppender 사용
- 16. 변화 datepattern (타임 스탬프) 위치의 log4j에서
- 17. CS_PARENTDC를 사용하는 방법은 무엇입니까?
- 18. HttpContext.GetGlobalResourceObject를 사용하는 방법은 무엇입니까?
- 19. 이미지를지도처럼 사용하는 방법은 무엇입니까?
- 20. 'copy_to_user'를 사용하는 방법은 무엇입니까?
- 21. matplotlib를 사용하는 방법은 무엇입니까?
- 22. nspredicate를 사용하는 방법은 무엇입니까?
- 23. requestAnimationFrame을 사용하는 방법은 무엇입니까?
- 24. addEventListener를 사용하는 방법은 무엇입니까?
- 25. Linux에서 SDL을 사용하는 방법은 무엇입니까?
- 26. 서블릿을 사용하는 올바른 방법은 무엇입니까?
- 27. CodeIgniter에서 모델을 사용하는 방법은 무엇입니까?
- 28. morphing에 VBO를 사용하는 방법은 무엇입니까?
- 29. alertbox에서 sharedPreferences를 사용하는 방법은 무엇입니까?
- 30. UIPanGestureRecognizer의 _firstScreenLocation을 사용하는 방법은 무엇입니까?
다른 사용자에게 예제 코드를 제공해주십시오. 덕분에 – philipp
코드 또는 몇 줄을 제공해 주실 수 있습니까? –