1. 개요
1.1 배경
로깅은 일상 개발에서 매우 중요합니다. 응용 프로그램에서 로깅 추가는 일반적으로 세 가지 목적을 기반으로합니다. 코드의 변수 변경 모니터링, 다른 응용 프로그램의 통계 분석을 위해 파일에 주기적으로 기록합니다. 향후 감사의 기초로 코드 런타임 궤적 추적; 통합 개발 환경에서 디버거 역할을하며 코드 디버깅 정보를 파일 또는 콘솔로 인쇄합니다.
1.2 소개
Log4J (Java의 Log)는 Apache의 오픈 소스 프로젝트로 로그를 관리하는 섬세한 방법을 제공합니다. 구성 파일을 통해 여러 선택으로 각 로그의 출력 형식과 대상을 제어 할 수 있습니다. 정보 수준을 정의함으로써 코드에서 피드백 정보를 유연하게 전환 할 수도 있습니다. 간단히 말해서 Log4J는 개발자가 로그 출력을 관리하는 데 도움이되는 API 라이브러리입니다. 가장 중요한 기능은 구성 파일이 로그 정보의 우선 순위, 로그 정보의 출력 대상 및 로그 정보의 출력 형식을 유연하게 설정할 수 있다는 것입니다.
2. LOG4J 구성
2.1LOG4J 클래스 다이어그램
2.2 구성 파일 정의
LOG4J는 Java 프로그램을 통해 동적으로 설정할 수 있습니다. 이 메소드의 명백한 단점은 다음과 같습니다. 로그 출력 레벨 및 기타 정보를 수정 해야하는 경우 Java 파일을 수정 한 다음 다시 컴파일해야합니다.
구성 파일을 사용하여 응용 프로그램을보다 유연하게 구성하여 로그를 구성 할 수 있으며 로그 출력 방법에는 출력 우선 순위, 출력 대상 및 출력 형식이 포함됩니다. Log4J는 두 개의 구성 파일 형식을 지원합니다. 하나는 XML 파일이고 다른 하나는 Java 기능 파일 log4j.properties (key = value)입니다.
2.3 구성 파일 log4j.properties
Log4J가 처음으로 호출되면 Log4J는 클래스 경로에서 파일을 찾아서 디렉토리가 클래스 경로에 포함되어있는 한 물론 파일의 전체 구성을 읽습니다. 이 구성 파일은 Log4J에 어떤 형식, 어디에 있는지에 대한 정보를 알려줍니다. 이에 따라 세 가지 측면을 구성해야합니다.
1. 루트 디렉토리 (레벨 및 대상);
2. 목적지 (콘솔, 파일 등);
3. 출력 스타일 (로그 컨텐츠 표시 방법)
예는 다음과 같습니다.
#로그 출력 레벨을 세트합니다
log4j.rootlogger = Debug, Appender1
콘솔에 #output
log4j.appender.appender1 = org.apache.log4j.consoleappender
#Style은 ttcclayout입니다
log4j.appender.appender1.layout = org.apache.log4j.ttcclayout
2.4. LOG4J 세 가지 구성 요소 설명
Log4J에는 로그거, appender (출력 소스) 및 레이아웃 (레이아웃)의 세 가지 주요 구성 요소가 있습니다. 이 세 가지 구성 요소를 결합하면 정보 유형 및 수준을 쉽게 로깅 할 수 있으며 런타임에 로그 출력의 스타일과 위치를 제어 할 수 있습니다. 다음은 세 가지 구성 요소입니다.
2.4.1 로거 로거
Logger 객체는 System.out 또는 System.err의 로그 라이터를 대체하는 데 사용되며 프로그래머에게 로그 정보 출력을 제공하는 데 사용됩니다.
루트 로거는 구문으로 구성됩니다.
log4j.rootlogger = [level], 부록, 부록 이름,…
그중에서도 레벨은 로깅의 우선 순위, 꺼짐, 치명적, 오류, 경고, 정보, 디버그, 전부 또는 사용자 정의 레벨로 나뉩니다. Log4J는 4 레벨 만 사용하는 것이 좋습니다. 오류, 경고, 정보 및 디버그는 높음에서 낮은 곳에서 우선 순위로 우선 순위가 있습니다. 여기에 정의 된 레벨에 따라 응용 프로그램의 해당 로그 정보 수준으로 스위치를 제어 할 수 있습니다. 예를 들어, 정보 수준이 여기에 정의되면 응용 프로그램의 모든 디버그 레벨 로그 정보는 인쇄되지 않습니다. 부록 이름은 로그 정보가 출력되는 위치를 지정합니다. 여러 출력 대상을 동시에 지정할 수 있습니다.
2.4.2 출력 대상 appender
Log4J 로그 시스템을 사용하면 콘솔 (콘솔), 파일 (파일)과 같은 다른 장소로 로그 출력을 허용하며, 새 파일은 날이나 파일 크기에 따라 생성되며 스트림 형태의 다른 장소로 전송됩니다.
appender 구성, 구문은 다음과 같이 표현됩니다.
log4j.appender.appendername = fully.qualified.name.of.appender.classlog4j.appender.appendername.option1 = value1… log4j.appender.appendername.option = Valuen
"Full.qualified.name.of.appender.class"다음 5 가지 목적지 중 하나를 지정할 수 있습니다.
1) .org.apache.log4j.consoleappender (콘솔)
2) .org.apache.log4j.fileAppender (파일)
3) .org.apache.log4j.dailyrollingfileAppender (매일 하나의 로그 파일 생성)
4) .org.apache.log4j.rollingFileAppender (파일 크기가 지정된 크기에 도달하면 새 파일이 생성됩니다)
5) .org.apache.log4j.writerAppender (지정된 모든 장소로 스트림 형식으로 로그 정보 보내기)
(1)
(2) .FileAppender 옵션
(3) .DailyrollingFileAppender 옵션
즉, 해당 형식은 다음과 같습니다.
1) '.'yyyy-mm : 매월
2) '.'Yyyy-WW : 주간
3) '.'yyyy-mm-dd : 매일
4) '.'yyyy-mm-dd-a : 하루에 두 번
5) '.'yyyy-mm-dd-hh : 시간별
6) '.'yyyy-mm-dd-hh-mm : 분당
4. RollingFileAppender 옵션
2.4.3 형식 (레이아웃) 레이아웃
때로는 선호도에 따라 내 로그 출력을 포맷하고 싶습니다. Log4J는이 기능을 완료하기 위해 Appender 뒤에 레이아웃을 부착 할 수 있습니다.
레이아웃을 구성하면 구문이 다음과 같이 표현됩니다.
log4j.appender.appendername.layout = fully.qualified.qualified.name.of.layout.classlog4j.appender.appendername.layout.option1 = value1… log4j.appender.appendername.layout.option = Valuen
레이아웃은 다음과 같이 4 가지 로그 출력 스타일을 제공합니다.
(1) .org.apache.log4j.htmllayout (HTML 테이블 양식의 레이아웃),
(2) .org.apache.log4j.patternlayout (레이아웃 모드를 유연하게 지정할 수 있음),
(3) .org.apache.log4j.simplelayout (로그 정보의 레벨 및 정보 포함),
(4) .org.apache.log4j.ttcclayout (로그 생성 시간, 스레드, 카테고리 등 포함) 정보)
htmllayout 옵션
LocationInfo = true : 기본값은 False이고 Java 파일 이름과 줄 번호를 출력합니다.
title = 내 앱 파일 : 기본값은 log4j 로그 메시지입니다.
2. PatternLayout 옵션
converionPattern =%m%n : 지정된 메시지를 포맷하는 방법을 지정합니다.
여기에서 설명해야 할 것은 로그 정보 형식의 여러 기호의 의미입니다.
수정자는 %와 패턴 문자 사이에 추가하여 최소 너비, 최대 너비 및 텍스트 정렬을 제어 할 수 있습니다. 좋다:
1)%20c : 출력 범주의 이름을 지정하고 최소 너비는 20입니다. 범주의 이름이 20 미만인 경우 기본적으로 오른쪽으로 정렬됩니다.
2)%-20C : 출력 범주의 이름을 지정하고 최소 너비는 20입니다. 범주의 이름이 20 미만인 경우 "-"부호는 왼쪽 정렬을 지정합니다.
3)%. 30C : 출력 범주의 이름을 지정하십시오. 최대 너비는 30입니다. 카테고리 이름이 30보다 크면 왼쪽의 추가 문자가 차단되지만 30 미만이면 공백이 없습니다.
4)%20.30c : 카테고리 이름이 20 미만인 경우 공간을 채우고 올바르게 정렬하십시오. 이름이 30 자 미만인 경우 왼쪽에서 추가 문자를 잘라냅니다.
2.5.LOG4J 구성 예
Log4J 구성의 단순성으로 인해 점점 더 많은 응용 프로그램에 걸쳐 확산됩니다. LOG4J 구성 파일에 대한 출력, 파일, 롤백 파일, 로그 메일 전송, 데이터베이스 로그 테이블로의 출력 및 사용자 정의 태그와 같은 전체 기능 세트를 구현합니다.
log4j.rootlogger = debug, console, a1, im log4j.addivity.org.apache = true
n 콘솔에 적용됩니다
log4j.appender.console = org.apache.log4j.consoleappenderlog4j.appender.threshold = debug log4j.appender.console.target = system.outlog4j.appender.console.layout = org.apache.log4j.patternlayout log4j.appender.console.layout.conversionpattern =%d-%c-%-4r [%t]%-5p%c%x-%m%n
n 파일에 적용됩니다
log4j.appender.file = org.apache.log4j.fileAppenderLog4j.appender.file = file.loglog4j.pile.file.pile.append = falselog4j.appender.file.layout = org.apache.log4j.patternoutlog4j.file.file.layout.layout. %c- %-4r [ %t] %-5p %c %x- %m %n
n 파일 롤백에 적용됩니다
log4j.appender.rolling_file = org.apache.log4j.rollingfileAppenderLog4j.appender.rolling_file.threshold = errorlog4j.appender.rolling_file.file = Rolling.loglog4j.appender.rolling_file.append = truelog4j.append.append.append.append.append.append.puleg4j.append.puleg4J. ender.rolling_file.maxfilesize = 10kblog4j.appender.rolling_file.maxbackbackupindex = 1log4j.appender.rolling_file.layout = org.apache.log4j.patternlayoutlog4j.appender.rolling_file.layout.conversionpattern " %-5p %c %x- %m %n
n 소켓에 적용됩니다
log4j.appender.socket = org.apache.log4j.rollingfileAppenderLog4j.appender.socket.remoteHost = localhost log4j.appender.socket.port = 5001log4j.appender.socket.locationInfo = true log4j.appender.socket.layout = org.apache.log4j.patternlayoutlog4j.appender.socet.layout.conversionpattern = [start]%d {date} [date]%n%p [우선 순위]%n%x [ndc]%n%n%n%n%n%n%n%n%n%n## log4j.appender.lf5_appender = org.apache.log4j.lf5.lf5appender log4j.appender.lf5_appender.maxnumberofrecords = 2000n 이메일로 로그를 보내십시오
log4j.appender.mail = org.apache.log4j.net.smtpappenderlog4j.appender.mail.threshold = fatallog4j.appender.mail.buffersize = 10log4j.appender.mail.from=web@www.wuset.comlog4j.appender.mail.smtphost=www.wusetu.comlog4j.appender.mail.subject=log4j 메시지 log4j.appender.mail.to=web@www.wusetu.comlog4j.appender.mail.layout=org.apache.log4j.patternlayout log4j.appender.mail.layout.conversionpattern =%d-%c-%-4r [%t]%-5p%c%m%m%n
데이터베이스의 경우 N
log4j.appender.database = org.apache.log4j.jdbc.jdbcappenderlog4j.appender.url = jdbc : mysql : // localhost : 3306/testlog4j.appender.database.driver = com.mysql.jdbc.driver log4j.appender.database.user = rootlog4j.appender.database.password = log4j.appender.database.sql = log4j (메시지) 값 ( ' %d- %c- %-4r [ %t] %-5p %c %x- %m %n ') log4j.appender.database.layout = org.apache.log4j.patternlayout log4j.appender.database.layout.conversionpattern =%d-%c-%-4r [%t]%-5p%c%x-%m%nlog4j.appender.a1 = org.apache.log4j.dailingfileappender log4j.appender.a1.file = samplemessages.log4j log4j.appender.a1.datepattern = yyyymmdd-hh'.log4j'log4j.appender.a1.layout = org.apache.log4j.xml.xmllayout
n 사용자 정의 appender
log4j.appender.im = net.cybercorlin.util.logger.appender.imappenderlog4j.appender.im.host = mail.cybercorlin.net log4j.appender.im.username = username log4j.im.im.password = password log4j.appender.im.recipient = [email protected]=org.apache.log4j.patternlayoutlog4j.appender.im.layout.conversionpattern = [framework] %d- %c- %-4r [ %t] %-5p %c %x - %m %m %n
3. 웹 애플리케이션에서 스프링에 대해 Log4J를 구성하십시오
먼저 Web.xml 파일에 다음 구성 문을 추가해야합니다.
<!-프로젝트 간의 충돌을 피하기 위해 고유 한 WebApprootKey를 정의합니다-> <coundxt-param> <param-name> webApprootkey </param-name> <param- value> myProject.root </param-value> </context-param> <!-구성 파일 log4j.properties-> groglocam> <param-name> <param-value>/web-inf/classes/config/log4j/log4j.properties </param-value> </context-param> <!-로그 구성 파일을 새로 고치기위한 시간 간격을 설정하고 60s로 설정-> <context-param> <param-name> log4jrefreshinterval> <Param-value> 60000 </param-value> </context-param> <!-스프링 프레임 워크에 log4j 리스너를로드하여 log4jconfiglistener-> <layer> <layer-class> org.springframework.web.util.log4jconfiglistener </listener class>
속성 log4jconfiglocation의 값을 : /web-inf/classes/log4j.properties로 설정하는 것이 좋습니다. 따라서 일부 테스트를 수행하면 웹 응용 프로그램을 시작하지 않을 때 로그 정보를 올바르게 기록 할 수 있습니다. log4jconfiglistener는 Spring에서 제공하는 도구 클래스입니다. Log4J 모니터링 스레드를 열고 60 초마다 로그 구성 변경 (Log4JrefreshInterval 변수 정의)을 감지하므로 새 구성을 적용 할 때마다 웹 서비스를 다시 시작할 필요가 없습니다. Tomcat에서는 웹 응용 프로그램에 따라 시스템 속성이 분리되지 않습니다. 따라서 각 웹 응용 프로그램에 대해 고유 한 "WebApprootKey"를 정의해야하며 webApp.Root라는 이름을 지정해야합니다. 환경을 시작한 후 log4jconfiglistener는 webapp.Root 변수에 값을 주입합니다.
4. 코드에서 log4j를 사용하십시오
4.1. 레코더를 얻으십시오
Log4J를 사용하여 첫 번째 단계는 로그 정보를 제어하는 로그 레코더를 얻는 것입니다.
공개 정적 로거 getLogger (문자열 이름)
지정된 이름으로 로거를 가져 와서 필요한 경우 이름에 대한 새 로거를 만듭니다. 이름은 일반적 으로이 클래스에서 다음과 같이 명명됩니다.
static logger logger = logger.getLogger (ServerWithLog4j.class.getName ())
4.2. 구성 파일을 읽으십시오
로거를 얻은 후, 두 번째 단계는 구문과 함께 log4J 환경을 구성합니다.
프로젝트의 루트 디렉토리에 log4j.properties를 배치하면이 문장을 작성할 수 없으며 프로그램이 자동으로 구성 파일을 찾습니다.
BASICCONFIGURATOR.CONFIGURE () : 기본 LOG4J 환경을 자동으로 빠르게 사용합니다. PropertyConfigUrator.configure (String ConfigFileName) : Java의 기능 파일을 사용하여 작성된 구성 파일을 읽습니다.
domconfigurator.configure (String filename) : XML 양식으로 구성 파일을 읽으십시오.
Log4J는 위의 3 개의 구성자를 사용하여 초기화되며 PropertyConfigUrator의 사용은 모든 시스템에 적합합니다. 다음 진술.
PropertyConfigUrator.configure ( "log4j.properties");
일반 Java 프로젝트의 경우 위의 명령문을 사용하지 않고 LOG4J를 초기화 할 수 있습니다. Log4J는 클래스 경로에서 구성 파일을 자동으로 찾아 초기화합니다. log4j가 구성 파일을 자동으로 초기화 할 수없는 경우 위의 메소드를 초기화해야합니다.
참고 : 구성 파일을 초기화 할 때는 시스템이 시작될 때만 한 번만 실행하는 것이 가장 좋습니다. 여러 번 실행하면 하나는 자원 낭비이고 다른 하나는 이전 버전의 Log4J의 경우 DailyrollingFileAppender를 사용할 때 문제가 발생할 수 있다는 것입니다.
4.3. 레코드 정보 삽입 (형식 로그 정보)
이전의 두 단계가 완료되면 로그를 기록 할 때 어디서나 다른 우선 순위 레벨의 로깅 문을 쉽게 삽입 할 수 있습니다. 구문은 다음과 같습니다.
logger.debug (객체 메시지);