Java Language
log4j / log4j2
수색…
소개
Apache Log4j 는 Java 기반 로깅 유틸리티이며 여러 Java 로깅 프레임 워크 중 하나입니다. 이 주제는 Log4j를 Java로 설정하고 구성하는 방법을 보여 주며 가능한 모든 사용 측면에 대한 자세한 예제를 제공합니다.
통사론
- Logger.debug ( "text to log"); // 디버깅 정보 로깅
- Logger.info ( "text to log"); // 공통 정보 로깅
- Logger.error ( "text to log"); // 오류 정보 로깅
- Logger.warn ( "텍스트를 기록"); // 경고 로깅
- Logger.trace ( "text to log"); // 추적 정보 로깅
- Logger.fatal ( "text to log"); // 치명적인 오류 로깅
- 매개 변수 로깅을 사용하는 Log4j2 사용 :
- Logger.debug ( "Debug params {} {} {,"param1, param2, param3); // 매개 변수를 사용하여 디버그 로깅
- Logger.info ( "Info params {} {} {}", param1, param2, param3); // 매개 변수를 사용하여 로깅 정보
- Logger.error ( "오류 params {} {} {}", param1, param2, param3); // 매개 변수로 로깅 오류
- Logger.warn ( "경고 params {} {} {,"param1, param2, param3); // 매개 변수로 경고 로깅
- Logger.trace ( "Trace params {} {} {}", param1, param2, param3); // 매개 변수를 사용하여 추적 기록
- Logger.fatal ( "치명적인 params {} {} {}", param1, param2, param3); // 매개 변수로 치명적인 로깅
- Logger.error ( "잡힌 예외 :", 예); // 메시지 및 스택 추적으로 예외 로깅 (자동으로 추가됨)
비고
Log4j 1의 수명 만료 됨
2015 년 8 월 5 일 로깅 서비스 프로젝트 관리위원회 (Logging Services Project Management Committee)는 Log4j 1.x의 수명이 끝났음을 발표했습니다. 발표 내용의 전체 내용은 Apache 블로그를 참조하십시오. Log4j 1 사용자는 Apache Log4j 2로 업그레이드하는 것이 좋습니다 .
Log4j를 얻는 방법
현재 버전 (log4j2)
Maven 사용 :
POM.xml
파일에 다음 종속성을 추가하십시오.
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
Ivy 사용 :
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-api" rev="2.6.2" />
<dependency org="org.apache.logging.log4j" name="log4j-core" rev="2.6.2" />
</dependencies>
Gradle 사용 :
dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.6.2'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.6.2'
}
log4j 1.x 구하기
참고 : Log4j 1.x는 EOL (End-of-Life)에 도달했습니다 (참고 정보 참조).
Maven 사용 :
POM.xml
파일에서이 종속성을 선언하십시오.
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Ivy 사용 :
<dependency org="log4j" name="log4j" rev="1.2.17"/>
Gradle 사용 :
compile group: 'log4j', name: 'log4j', version: '1.2.17'
Buildr 사용 :
'log4j:log4j:jar:1.2.17'
수동으로 경로 빌드에 추가 :
Log4j 웹 사이트 프로젝트 에서 다운로드
Log4j를 Java 코드로 사용하는 방법
먼저 final static logger
객체를 생성해야합니다.
final static Logger logger = Logger.getLogger(classname.class);
그런 다음 로깅 메서드를 호출합니다.
//logs an error message
logger.info("Information about some param: " + parameter); // Note that this line could throw a NullPointerException!
//in order to improve performance, it is advised to use the `isXXXEnabled()` Methods
if( logger.isInfoEnabled() ){
logger.info("Information about some param: " + parameter);
}
// In log4j2 parameter substitution is preferable due to readability and performance
// The parameter substitution only takes place if info level is active which obsoletes the use of isXXXEnabled().
logger.info("Information about some param: {}" , parameter);
//logs an exception
logger.error("Information about some error: ", exception);
특성 파일 설정
Log4j를 사용하면 동시에 데이터를 콘솔과 파일에 기록 할 수 있습니다. log4j.properties
파일을 log4j.properties
기본 구성 안에 넣으십시오.
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Maven을 사용하고 있다면,이 특성 파일을 경로에 넣으십시오 :
/ProjectFolder/src/java/resources
기본 log4j2.xml 구성 파일
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
이것은 콘솔 appender와 root logger를 가진 기본적인 log4j2.xml 설정입니다. 패턴 레이아웃은 명령문 로깅에 사용할 패턴을 지정합니다.
log4j2.xml의로드를 디버깅하려면 status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO>
를 log4j2.xml의 구성 태그에 입력하십시오.
모니터 간격을 추가하여 지정된 간격 후에 구성을 다시로드 할 수도 있습니다. 모니터 간격은 구성 태그에 다음과 같이 추가 할 수 있습니다. monitorInterval = 30
. 설정이 30 초마다로드된다는 것을 의미합니다.
log4j 1.x에서 2.x로 마이그레이션
프로젝트의 기존 log4j 1.x에서 log4j 2.x로 마이그레이션하려면 기존 log4j 1.x 종속성을 모두 제거하고 다음 종속성을 추가하십시오.
Log4j 1.x API Bridge
메이븐 빌드
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
아이비 빌드
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-1.2-api" rev="2.6.2" />
</dependencies>
Gradle Build
dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-1.2-api', version: '2.6.2'
}
Apache Commons Logging Bridge 프로젝트가 log4j 1.x를 사용하는 Apache Commons Logging을 사용하고 log4j 2.x로 마이그레이션하려는 경우 다음 종속성을 추가하십시오.
메이븐 빌드
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
아이비 빌드
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-jcl" rev="2.6.2" />
</dependencies>
Gradle Build
dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-jcl', version: '2.6.2'
}
참고 : Apache 공유 로깅의 기존 종속성을 제거하지 마십시오.
참조 : https://logging.apache.org/log4j/2.x/maven-artifacts.html
속성 - DB에 기록 할 파일
이 예제가 작동하려면 데이터베이스가 실행중인 시스템과 호환되는 JDBC 드라이버가 필요합니다. IBM System i의 DB2 데이터베이스에 연결할 수있는 opensource는 다음에서 찾을 수 있습니다. JT400
이 예제는 DB2와 관련이 있지만 드라이버를 교환하고 JDBC URL을 적용하면 거의 모든 다른 시스템에서 작동합니다.
# Root logger option
log4j.rootLogger= ERROR, DB
# Redirect log messages to a DB2
# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
# Set JDBC URL (!!! adapt to your target system !!!)
log4j.appender.DB.URL=jdbc:as400://10.10.10.1:446/DATABASENAME;naming=system;errors=full;
# Set Database Driver (!!! adapt to your target system !!!)
log4j.appender.DB.driver=com.ibm.as400.access.AS400JDBCDriver
# Set database user name and password
log4j.appender.DB.user=USER
log4j.appender.DB.password=PASSWORD
# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO DB.TABLENAME VALUES('%d{yyyy-MM-dd}','%d{HH:mm:ss}','%C','%p','%m')
# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout
수준별로 로그 출력 필터링 (log4j 1.x)
필터를 사용하여 예를 들어 ERROR
레벨보다 "낮은"메시지 만 기록 할 수 있습니다. 그러나 Filter는 PropertyConfigurator에서 지원하지 않습니다. 그래서 그것을 사용하려면 XML 설정으로 변경해야합니다 . 필터에 관해서는 log4j-Wiki를 참조하십시오.
"특정 수준"
<appender name="info-out" class="org.apache.log4j.FileAppender">
<param name="File" value="info.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="info" />
<param name="AcceptOnMatch" value="true"/>
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
또는 "레벨 범위"
<appender name="info-out" class="org.apache.log4j.FileAppender">
<param name="File" value="info.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="info"/>
<param name="LevelMin" value="info"/>
<param name="AcceptOnMatch" value="true"/>
</filter>
</appender>