Log
컴퓨터가 언제, 무슨 일을, 어떻게 했는지 남겨 놓은 기록
요소 | 설명 |
---|---|
Logger | 출력할 메시지를 Appender에 전달 |
Appender | 전달된 로그를 어디에 출력할지 결정(콘솔 출력, 파일 기록, DB 저장 등) |
Layout | 로그를 어떤 형식으로 출력할지 결정 |
요소 | 설명 |
---|---|
ConsoleAppender | org.apache.log4j.ConsoleAppender 콘솔에 로그 메시지를 출력 |
FilerAppender | org.apache.log4j.FilerAppender 로그 메시지를 지정된 파일에 기록 |
RollingFileAppender | org.apache.log4j.RollingFileAppender 파일 크기가 일정 수준 이상이 되면 기존 파일을 백업파일로 두고 처음부터 다시 기록 (DatePattern 사용 불가) |
DailyRollingFilerAppender | org.apache.log4j.Daily.Rolling.File.Appender 일정 기간 단위로 로그 파일을 생성하고 기록 (Max 사용 불가) |
// https://mvnrepository.com/artifact/log4j/log4j
implementation group: 'log4j', name: 'log4j', version: '1.2.17'
# 1: Logger
# 로거 레벨, 객체명, 객체명을 입력
log4j.rootLogger=DEBUG, consoleAppender, fileAppender, sql
# 2: rootLogger에서 정의한 객체에 타입과 기능을 정의 (Appender)
# consoleAppender = 콘솔에 출력해주는 객체라고 정의
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.Threshold=All
# 3: Layout
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=[%d] [%-5p] %c %x - %m%n
# 4
# log4j.appender.fileAppender는 파일로 저장을 의미
# org.apache.log4j.RollingFileAppender는 하루에 한 번씩 파일을 생성한다는 의미
log4j.appender.fileAppender=org.apache.log4j.DailyRollingFileAppender
# 파일의 위치와 파일의 네이밍을 설정
log4j.appender.fileAppender.File=C:/Users/dbkim/Desktop/TASK/log/log.log
# 5
log4j.appender.fileAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.fileAppender.Threshold=All
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
# 하루가 지난 파일은 log4j.log에서 log4j.2022-09-06의 형태로 바꾸겠다는 의미
log4j.appender.fileAppender.layout.ConversionPattern=[%d] [%-5p] [%13F\:%L] - %m%n
// https://mvnrepository.com/artifact/log4j/log4j
implementation group: 'log4j', name: 'log4j', version: '1.2.17'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 콘솔 로그 -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%c{5}] %m [%X{userId}]%n" />
</layout>
</appender>
<!-- 날짜별 로그 파일 생성(AUTH) -->
<appender name="authLog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/Users/dbkim/Desktop/TASK/LOG/auth.log"/>
<param name="Append" value="true"/>
<!-- param name="MaxFileSize" value="100MB"/ -->
<!-- param name="MaxBackupIndex" value="2"></param -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%C{10}] %m [%X{userId}]%n" />
</layout>
</appender>
<!-- 날짜별 로그 파일 생성(INFO) -->
<appender name="infoLog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/Users/dbkim/Desktop/TASK/LOG/info.log"/>
<param name="Append" value="true"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%C{10}] %m [%X{userId}]%n" />
</layout>
</appender>
<!-- 날짜별 로그 파일 생성(에러만) -->
<appender name="errFile" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 해당 파일이 출력하는 로그 레벨을 설정할 수 있음 -->
<param name="Threshold" value="ERROR"/>
<param name="File" value="/LOG/INFO/error.log"/>
<param name="Append" value="true"/>
<!-- param name="MaxFileSize" value="100MB"/ -->
<!-- param name="MaxBackupIndex" value="2"></param -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %5p [%C{1}] %m [%X{userId}]%n" />
</layout>
</appender>
<!-- 특정 패키지 출력 설정 -->
<logger name="com.fnsvalue.task10_logsave.controller.info">
<level value="DEBUG"/>
<appender-ref ref="infoLog" />
</logger>
<logger name="com.fnsvalue.task10_logsave.controller.auth">
<appender-ref ref="authLog" />
</logger>
<!-- 기본 출력 설정 -->
<root>
<level value="INFO" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
<!-- infoLog라는 이름으로 설정해놓은 후 나중에 사용할 때 infoLog로 가져와 사용 -->
<appender name="infoLog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Append" value="true"/>
<param name="Threshold" value="ERROR"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%C{10}] %m [%X{userId}]%n" />
</layout>
(DailyRollingAppender 에선 사용 불가)
<param name="MaxFileSize" value="100MB"/>
<param name="MaxBackupIndex" value="2"/>
logger.getEffectiveLevel() // ERROR
// log4j.logger.패키지경로 = 로그레벨
log4j.logger.com.logsave.controller.info=DEBUG
<logger name="com.logsave.controller.info">
<level value="DEBUG"/>
<appender-ref ref="infoLog"/>
</logger>
private Logger logger = Logger.getLogger(Test.class);
...
logger.setLevel(Level.DEBUG)
참고사이트
[JAVA] Log4j의 정의와 설정-무사뎀벨레의 블로그
[log4j] 로그레벨 package 별로 설정하기-side impact
날짜별/특정 패키지별 logger 파일 생성 log4j.xml 추가 appender-개꼬 [: 개발하는 꼬바리]
[log4j] log4j 튜토리얼 번역-DEV용식