문제

다른 애플리케이션에서도 기록되는 로그 파일에 log4j 로깅 이벤트를 기록하는 방법이 있습니까?다른 애플리케이션은 Java가 아닌 애플리케이션일 수 있습니다.단점은 무엇입니까?잠금 문제?포맷 중이신가요?

도움이 되었습니까?

해결책

Log4J에는 SocketAppender가있어 서비스에 이벤트를 보낼 수있는 이벤트를 보낼 수 있습니다.이 이벤트는 직접 구현하거나 Log4J와 함께 번들 된 간단한 구현을 사용할 수 있습니다.

또한 SYSLOGD 및 Windows 이벤트 로그를 지원하며, 이는 비 Java 응용 프로그램의 이벤트와 로그 출력을 통합하는 데 유용 할 수 있습니다.

성능이 전혀 문제 인 경우 다양한 로깅 애플리케이션간에 일관된 잠금 전략을 조정하려고 시도하는 대신 로그 파일을 작성하는 단일 서비스를 원합니다.

다른 팁

가장 좋은 방법은 각 애플리케이션을 별도로 로그한 다음 예약된 작업을 실행하여 시간에 따라 파일을 '압축'하는 것입니다.전체 로그에 대한 최신 액세스가 필요한 경우 매시간마다 실행되도록 할 수 있습니다.

다음 두 가지 접근 방식에 대한 경험이 있습니다.

  1. 일반 텍스트 파일 대신 로깅에 데이터베이스를 사용하십시오. 성능 문제로 인해 금지 될 수 있습니다. 반면에 로그를 분석하고 보고서 작성이 매우 쉽습니다. 데이터베이스는 모든 동시성 문제를 처리합니다.
  2. 다른 접근법에는 JBoss Server의 사용이 포함되며, 이는 다른 소스의 로깅 정보를 읽는 데 사용할 수 있습니다. JBOSS는 최소한의 구성으로 실행할 수 있으며 실제로 가볍습니다 (2 초의 시작 시간). 세부 사항은 여기에서 찾을 수 있습니다 http://docs.jboss.org/process-guide/en/html/logging.html (별도의 서버에 로그). Log4J는 모든 잠금/동시성 문제를 처리합니다.

JBoss를 사용하지 않을 계획이라면 두 번째 접근 방식을 자신의 로깅 솔루션의 기반으로 사용할 수 있습니다.

기본 LOG4J 부속기가 파일 잠금 또는 동기화를 수행한다고 생각하지 않습니다. 그러한 잠금이 없으면 로그 메시지를 잃어 버리거나 엉망이 될 수 있습니다.

Java에서 파일 잠금을 수행하는 것이 얼마나 쉬운 지 잘 모르겠지만,이 작업을 직접 만들려면 적절한 appender를 서브 클래스하고 로깅 방법을 재정의하고 파일을 잠그고 잠금 해제하는 동기화 코드로 포장해야한다고 생각합니다. . 시스템로드에 따라 성능에 영향을 줄 수 있습니다.

log4perl에는 동기화 appender, log :: log4perl :: appledender :: synchronized가 있으며, 이는 appender를 감싸고 이것을 달성하고, 로그에 플래그를 제공하는 것 같습니다. 자바에서 복제 할 수 있는지 확인하기 위해 무엇을하는지 살펴볼 수 있습니다.

Log4J는 이미 파일의 레코드와 호환되는 형식으로 로그 항목을 만들 수있을 정도로 유연합니다. 특정 데이터 필드를 포맷하는 방법에 대해서는 부록을 살펴보십시오.

주요 관심사는 다른 응용 프로그램에 의해 잠금에 관한 것입니다. 모든 애플리케이션에 파일에 독점 잠금 장치가 없으며 괜찮을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top