2008-11-12 7 views
7

log4j 로깅 이벤트를 다른 응용 프로그램에서 기록중인 로그 파일에 기록하는 방법이 있습니까? 다른 응용 프로그램은 비 Java 응용 프로그램이 될 수 있습니다. 단점은 무엇입니까? 잠금 문제? 서식을 지정 하시겠습니까?Log4j 공유 로그 파일에 로깅

답변

9

Log4j에는 서비스에 이벤트를 보내는 SocketAppender가 있습니다.이 이벤트는 사용자가 직접 구현하거나 Log4j와 함께 제공되는 간단한 구현을 사용할 수 있습니다.

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

성능에 문제가있는 경우 다양한 로깅 응용 프로그램간에 일관된 잠금 전략을 조정하려고 시도하는 대신 단일 서비스에서 로그 파일을 작성해야합니다.

1

각 응용 프로그램별로 로그를 기록한 다음 예약 된 작업을 시간에 따라 파일을 '지퍼'로 배치하는 것이 가장 좋습니다. 전체 로그에 대한 최신 액세스가 필요하면 매 시간마다이 로그를 실행할 수 있습니다.

-1

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

당신의 주요 관심사는 다른 응용 프로그램에서 잠금 가능성이 높습니다. 모든 응용 프로그램에 파일에 대해 독점적 인 잠금 기능이 없는지 확인하십시오.

1

나는 다음과 같은 두 가지 방법과 경험이 있습니다

  1. 를 사용하여 데이터베이스 대신에 일반 텍스트 파일의 로깅을 - 그것 때문에 성능 문제의 금지 할 수있다, 다른 한편으로는 로그를 분석하는 것은 매우 쉽습니다 , 보고서를 작성하십시오. 데이터베이스는 모든 동시성 문제를 처리합니다.
  2. 다른 접근 방식은 JBoss 서버 사용과 관련이 있습니다. JBoss 서버는 다른 소스에서 로깅 정보를 읽는 데 사용할 수 있습니다. JBoss는 최소 구성으로 실행될 수 있으며, 실제로는 경량 (2 초의 시작 시간)입니다. 자세한 내용은 http://docs.jboss.org/process-guide/en/html/logging.html (별도의 서버에 기록)에서 확인할 수 있습니다. Log4J는 모든 잠금/동시성 문제를 처리합니다.

JBoss를 사용하지 않으려는 경우 두 번째 방법을 자체 로깅 솔루션의 기반으로 사용할 수 있습니다.

0

기본 log4j 애 퍼더가 파일 잠금 또는 동기화를 수행하지 않는다고 생각합니다. 이러한 잠금이 없으면 로그 메시지가 손실되거나 맹 글링 된 메시지가 수신 될 수 있습니다.

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

Log4perl에는 Appender, Log :: Log4perl :: Appender :: Synchronized가 동기화되어있어 Appender를 래핑하고이를 수행하며 Log :: Log4perl :: Appender :: File에 플래그를 제공하는 것으로 보입니다. 인터리빙 된 선. 자바에서 복제가 가능한지 확인해보십시오.