Articles

는 방법 Log4J2 작품:10 가지 방법 그것의 대부분

Log4j2 입 업데이트된 버전의 인기와 영향력 있는 log4j 라이브러리,전반에 걸쳐 광범위하게 사용 Java 생태계에 대한 그렇게 많은 년이다. 버전 2.x 모든 의 로깅 기능을 그 이전에 건축하는 기초와 몇몇 중요한 개선 사항,특히 지역에서의 성능이다.

그리고 물론,방법을 제공 instrumental 로깅이 필요한 어플리케이션에 대한 감사 및 디버깅 목적으로 선택,고체 로깅 라이브러리는 아주 중요한 결정입니다.

다음 섹션에서,우리가 봐 왜 log4j2 라이브러리에 위치해 있는 결정에 어떻게 우리가 그것을 사용할 수 있습니다.

기본 Log4j2 구성

프로젝트에서 log4j2 사용을 시작하려면 log4j-core 종속성을 추가하기 만하면됩니다. Maven 을 사용하는 경우 pom 에 다음과 같은 종속성을 추가하면됩니다.xml 파일:

그리고 Gradle 로 작업하는 경우 빌드에 종속성을 추가해야합니다.gradle 파일:

dependencies { compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.8.2'}

상자 log4j2 것이 자동으로 제공하는 간단한 구성하지 않는 경우 명시적으로 정의합니다. 기본 구성은 오류 수준 이상의 수준에서 콘솔에 로그합니다.

이 기본 구성을 사용하여 메시지 로깅을 시작하려면 LogManager 클래스를 사용하여 로거 인스턴스를 가져 오기 만하면됩니다:

private static Logger logger = LogManager.getLogger(MyService.class);

할 수 있습니다 다음 사용하 logger 체와 방법에 해당하는 로그인하려는 수준을:

logger.error("This is an error message");

사용자 지정 Log4j2 구성

사용자 지정 log4j2 구성할 수 있을 만들거나 프로그래밍 방식으로를 통해 구성 파일입니다.

라이브러리는 XML,JSON,YAML 로 작성된 설정 파일뿐만 아니라 지원합니다.속성 형식. 여기에서는 XML 을 사용하여 모든 예제를 주로 논의 할 것입니다.

먼저 log4j2 를 만드는 것만으로 기본 구성을 재정의 할 수 있습니다.클래스 경로의 xml 파일:

의 자세히 보면 태그에 사용이 간단한 구성:

  • Configuration:루트의 요소 log4j2 구성 파일 상태를 나타내는 특성의 레벨에서는 내부 log4j 이벤트를 기록해야 하
  • Appenders:이 요소의 목록을 포함 appenders;우리의 예에서,추가 해당하는 시스템 콘솔 정의
  • 로거: 이 요소의 목록을 포함 Logger 인스턴스가 있습니다. 루트 요소는 표준 로거 출력하는 모든 메시지

이해하는 것이 중요하다는 Root 로거에는 필수입니다 모든 구성이 있습니다. 논의 된 바와 같이,하나를 제공하지 않으면 콘솔 애 펜더 및 오류 로그 레벨로 기본적으로 자동으로 구성됩니다.

Appenders 구성

log4j2 아키텍처에서 appender 는 기본적으로 로그 메시지를 특정 출력 대상으로 보내는 책임이 있습니다.

다음은 라이브러리에서 제공하는 가장 유용한 appenders 유형입니다:

  • ConsoleAppender–메시지를 기록하는 시스템 콘솔
  • FileAppender–쓰기 로그 메시지를 파일에
  • RollingFileAppender–쓴다는 메시지를 압연한 로그 파일
  • JDBCAppender–사 관계형 데이터베이스에 대한 로그
  • AsyncAppender–의 목록을 포함하는 다른 appenders 고 결정하는 로그에서 이러한에서 쓸 수 있는 별도의 스레드

을 더 나은 방법을 이해하 appenders 작업 중 일부를 살펴 보자 구성의 예입니다.

RollingFileAppender

모든 것을 단일 파일로 로깅하는 것은 물론 이상적이지 않습니다. 그것은 일반적으로 훨씬 더 나은 롤인 로그 파일 정기적으로는 무엇인지 정확히 RollingFileAppender 않습니다.

할 수도 있을 넘어서 기초와 이 유형의 추 및 구성을 모두 사용자 지정 트사항뿐만 아니라 롤오버 전략입니다.

트리거사항을 결정한 로그 파일을 열간압연,의미를 새로운 파일을 만든 반면,롤오버 전략을 결정하는 방법 파일의 유연성을 제공합니다.

으로는 빠르게 구성 펜더를 만드는 새로운 로그 파일을 기반으로 3 정책:

  • OnStartupTriggeringPolicy–새로운 로그 파일이 만들어 모든 시간을 JVM 을 시작
  • TimeBasedTriggeringPolicy–로그 파일을 압연을 기반으로 날짜/시간 패턴
  • SizeBasedTriggeringPolicy–이 파일은 압연에 도달할 때 특정 크기

구성을 사용합니다 DefaultRolloverStrategy:

당신이 볼 수있는 단지 어떻게 가동 가능한 이 스타일의 구성은,어떻게 조정할 수 있는 정확한 의미의 전략을 마지막 세부 사항입니다.

Jdbcappender

이름에서 알 수 있듯이이 appender 는 jdbc 를 사용하여 관계형 데이터베이스에 로그를 작성합니다.

이 구성의 경우 Jndi 데이터 소스 또는 사용자 정의 ConnectionFactory 일 수있는 ConnectionSource 를 정의해야합니다. Logger 는 ConnectionSource 를 사용하여 JDBC 연결을 가져 오므로 더 나은 성능을 위해 연결 풀을 사용하는 것이 중요합니다.보시다시피 JNDI 데이터 소스는 DataSource 태그의 jndiName 속성을 사용하여 간단히 지정됩니다. ConnectionSource 와 함께 로그 데이터를 저장하는 데 사용할 테이블과 열을 정의할 수 있습니다.

이 FailoverAppender

마지막으로,하자 보 FailoverAppender;이 설정은 사용자의 기본부 생산 및 백업 목록 하는 것입 단계에서 처리에 로그인 경우 기본 하나 실패합니다.

예를 들어,당신은 당신을 구성할 수 있는 기본 JDBCAppender,보조합 RollingFile 및 콘솔 appenders 경우에는 데이터베이스 연결을 설정할 수 없습니다:

프로덕션 환경에서는 장애 조치 전략에 대한 로깅 메커니즘은 항상 좋은 생각이 아니다.

구성하는 레이아웃

동안 appenders 에 대한 책임은 로그를 보내고 목적지에 메시지,레이아웃에 의해 사용되는 appenders 을 정의하는 방법 로그 메시지 포맷됩니다.

다음은 log4j2 가 제공하는보다 일반적으로 사용되는 레이아웃 중 일부에 대한 간략한 설명입니다:

  • PatternLayout–구성하는 메시지에 따라 문자열 패턴
  • JsonLayout–정 JSON 형식으로 로그 메시지
  • CsvLayout–를 만드는 데 사용할 수 있는 메시지에서 CSV 형식

이 PatternLayout

첫 번째 유형의 레이아웃을 우리가 보입니다 PatternLayout. 이것은 당신에게 로그 메시지의 최종 출력을 통해 많은 제어를 제공하는 매우 유연한 솔루션입니다.

메커니즘은 주로 변환 지정자를 포함하는 변환 패턴에 의해 구동됩니다. 각 지정자로 시작%로그인에 의해 다음,수정을 제어하는 것을 너비와 컬러의 메시지의 변환 문자를 나타내는 콘텐츠,같은 날짜 또는 스레드에 이름입니다.

살펴보자를 구성하는 예제를 PatternLayout 구성하는 로그인하여 날짜,thread,로그 및 로그 레벨 메시지와는 다른 색깔 서로 다른 로그 수준:

이 지정자가 이해에 세부사항,그래서 그들에게 보기

  • %d{HH:mm:ss.SSS}–출력한 날짜의 이벤트 로그에서 지정된 형식
  • %t–출력이 스레드 이름
  • %수준을 표시–로그 수준의 메시지
  • %강조 표시{%수준}–은을 정의하는 데 사용되는 색깔에 대한 패턴 사이에 괄
  • %msg%n–출력 로그 메시지

출력을 표시 로그 수준으로 다른 색상:

에 대해 자세히 알아볼 수 있습의 전체 세트에 대한 옵션을 정의하는 패턴을 log4j2documentation PatternLayout.

이 JsonLayout

로깅을 사용하여 데이터 JSON 형식으로 몇 가지 중요한 장점이 있으로 로그를 보다 쉽게 분석되고 처리되는 로그인하여 도구입니다.

을 구성하 JSONLayout 에 log4j2,당신은 단순히 정의하고 해당 태그:

<JSONLayout complete="true" compact="false"/>

설정이 완료=true 생산할 것이 잘 형성되 JSON document

를 생산할 수 있 JSON,당신은 또한에 추가해야 합 잭슨-바인딩 클래스 경로에 라이브러리:

필터 구성

Log4j2 의 필터는 로그 메시지를 처리해야하는지 또는 건너 뛰어야 하는지를 결정하는 데 사용됩니다.

필터는 전체 구성 또는 로거 또는 애 펜더 수준에서 구성 할 수 있습니다.

라이브러리는 사용할 수있는 여러 유형의 필터를 제공합니다:

  • BurstFilter–컨트롤 수의 로그인 이벤트 허용되
  • DynamicThresholdFilter–필터 로그를 기반으로 하는 라인에서 특정 속성
  • RegexFilter–필터를 기반으로 메시지 여부에 그들이 일치 정규식

할 수 있는,예를 들어,제어의 평가는 허용되는 응용 프로그램 로그인 페이지가 나타납니다.

하기 위해 BurstFilter 를 설정하고 정보 메시지에 적용 할 수 있습니다:

<Filters> <BurstFilter level="INFO" rate="10" maxBurst="100"/></Filters>

이 선택적으로 무시하 제어 트래픽 정보의 수준의 메시지와 아래 있는지 확인하는 동안 당신의 모든 더 중요한 메시지 위 정보.

이 경우에는,평가의 정의 평균 메시지를 기록 처리해야 하는 당 두 번째,그리고 maxBurst 컨트롤 전체 크기의 버스트 트래픽을 하기 전에 필터가 시작 삭제 로그 항목이 있습니다.

마찬가지로 특정 정규 표현식과 일치하는 로그 메시지를 수락하도록 appender 만 구성 할 수 있습니다:

<Appenders> <JDBC name="JDBCAppender"> <RegexFilter regex="*jdbc*" onMatch="ACCEPT" onMismatch="DENY"/> </JDBC></Appenders>

전반적으로,이 필터링 메커니즘과 함께 사용할 수 있는 좋은 정밀도를 확인하는 각부 생산에서 당신의 전반적인 logging configuration 추적이 올바른 정보. 하는 기능만을 로그에는 매우 특정과 관련된 정보를 일반적으로 지도 매우 빠른 근본 원인을 분석,특히 복잡한 시스템에서 특히 함께 사용할 경우 강력한 로그를 보는 도구입니다.

구성하거

게다가 뿌리 logger,우리는 우리를 정의할 수도 있습 추가 Logger 요소로 다른 로그 레벨,appenders 또는 필터입니다. 각 로거는 필요합 이름을 사용할 수 있는 나중에 참조:

<Loggers> <Logger name="RollingFileLogger"> <AppenderRef ref="RollingFileAppender" /> </Logger></Loggers>

작성하는 로그 메시지 사용이 특정 Logger,당신을 얻을 수 있습니다 그것을 참조하여 LogManager class:

Logger rfLogger = LogManager.getLogger("RollingFileLogger");rfLogger.info("User info updated");

또 다른 매우 일반적 방법 구조는 계층 구조의 이러한 로거 기반에서 Java 클래스:

Logger logger = LogManager.getLogger(MyServiceTest.class);

를 사용하여 조회

조회를 나타내는 방법으로 삽입하고 외부 값으로 log4j2 구성이 있습니다. 우리는 이미 rollingfileappender 구성에서 날짜 조회의 예를 보았습니다:

<RollingFile name="RollingFileAppender" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">

${날짜:yyy-MM}조회가 삽입됩 현재 날짜으로 파일의 이름을 하는 동안 이전$은 탈출문자 삽입합 검색 표현으로 filePattern 특성이 있습니다.

삽입할 수도 있습니스 속성 값으로 log4j2 구성 형식을 사용하여${sys:property_name}

<File name="ApplicationLog" fileName="${sys:path}/app.log"/>

또 다른 유형의 정보를 조회할 수 있습과 삽입 Java 환경 정보:

<PatternLayout header="${java:version} - ${java:os}"> <Pattern>%d %m%n</Pattern></PatternLayout>

자세한 내용을 찾을 수 있습니다 데이터의 종류에 당신을 삽입 할 수 있습을 통해 조회에서 log4j2 문서입니다.

프로그래밍 방식 구성

구성 파일 외에도 log4j2 는 프로그래밍 방식으로 구성 할 수 있습니다. 거기에 몇 가지 다른 방법으로 그렇게 하도록 요청합니다.

  • 사용자 지정 ConfigurationFactory
  • 사용하여 클래스 구성자
  • 수정을 구성한 후 초기화
  • 속성을 결합한 파일과 프로그래밍 방식으로 구성

살펴을 구성하는 방법에 대해서는 레이아웃 및 프로그래밍 방식으로 추:

,다음 을 정의할 수 있습 로거를 사용하 LoggerConfig 클래스에 연결시키고,추가하고,업데이트 구성:

그 후,당신은 당신을 사용하여 시작할 수 있습니다 logger 평소와 같이

Logger pLogger = LogManager.getLogger("programmaticLogger");pLogger.info("Programmatic Logger Message");

이 스타일의 유창한 API 를 지도할 수 있는 빠르게 개발하고 반복에 더 복잡한 로깅을 구성하기 때문에 당신은 지금에서 혜택의 이득을 직접 작동하 Java 코드입니다.

주어진,그러나는 XML 수 있는 여전히 읽을 수 있으며 소형,종종 있습니다 당신이 개발한 프로그래밍 방식으로 구성한 다음 변환 XML 때 모든 것을 이루어집니다.

사용자 정의 로그 수준

log4j2 에 대한 기본 제공 로그 수준은 다음과 같습니다:

  • OFF
  • 치명적인
  • 오류가
  • 정보
  • 디버깅
  • TRACE
  • ALL

이 외에도,정의할 수도 있습니다 사용자 지정 로그 레벨 응용 프로그램에 따라 필요합니다.

예를 들어,이 새 로그 수준을 정의하려면 레벨을 사용할 수 있습니다.forName()API-새 레벨 이름과 로그 레벨 계층 구조에서 레벨의 위치를 나타내는 정수를 지정합니다:

Level myLevel = Level.forName("NEW_LEVEL", 350);

을 결정하는 어떤 정수 값을 사용할 수 있습에 정의된 값은 다른 로그 레벨에서 log4j2 문서화:

350 값을 두고 수준 사이에 경고와 정보를 의미하는 메시지가 표시됩니다면 레벨을 설정하는 정보 또는다.

을 로그 메시지에 사용자 지정 수준을 사용할 필요가 로그()메소드:

logger.log(myLevel, "Custom Level Message");

해당하는 XML 은 구성 될 수 있습니다:

<CustomLevels> <CustomLevel name="NEW_XML_LEVEL" intLevel="350" /></CustomLevels>

다음 사용될 수 있습을 통해 표준 로그 API:

logger.log(Level.getLevel("NEW_XML_LEVEL"),"Custom XML Level Message");

새로운 사용자 지정 수준에 표시되는 동일한 방식으로 표준람:

11:28:23.558 NEW_LEVEL - Custom Level Message11:28:23.559 NEW_XML_LEVEL - Custom XML Level Message

에서 마이그레이션 Log4j1.x

1 을 사용하여 응용 프로그램을 마이그레이션하는 경우.현재 2 로 라이브러리의 x 버전.x 버전,당신이 따를 수있는 몇 가지 경로가 있습니다:

  • log4j1 을 사용하십시오.x bridge
  • 브리지를 사용하여 API 및 구성

를 수동으로 업데이트하는 것은 사소한 일입니다. Log4j 종속성을 log4j-1.2-api 라이브러리로 바꾸기 만하면됩니다:이것이 더 빠른 방법이지만 변환 할 수있는 구성 유형이 제한된다는 단점이 있습니다.물론 수동 방법은 더 많은 작업이지만 결국에는 더 유연하고 강력한 로깅 솔루션으로 이어질 것입니다.

여기에 몇 가지의 가장 일반적인 유형의 변경 내용은 당신이해야 할 것이다:

결론

로그 파일이 중요한 프로덕션 환경에서,그리고 좋은 선택한 로깅 솔루션이 될 수 있습니다 간의 차이를 지출을 5 분간을 보내고 일을 이해하는 문제를 생산합니다.

Log4j2 는 다양한 구성 옵션을 갖춘 최신 Java 애플리케이션을위한 강력하고 강력한 로깅 솔루션입니다.

그것을 구의 고급 로깅 모범 사례와 같이 회전 파일,다른 형태의 로그 출력을 목적,지원에 대한 구조화된 로깅 등과 같은 형식은 JSON or XML 을 사용하여,여러 로거와 필터를 사용자 지정 로그 수준이다.

마지막으로,필요할 때를 넘어 갈 수동으로 분석하는 로그 데이터를 확실히 확인은 로깅 기능이 포함 되돌아 APM.