import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
// SLF4J + Logback
Logger logger = LoggerFactory.getLogger(Main.class.getName()); // this.getClass()
logger.info("my logging");
1) slf4j-api-${version}.jar
2) logback-classic-${version}.jar
3) logback-core-${version}.jar
1) slf4j-api-${version}.jar
2) slf4j-log4j12-${version}.jar
3) log4j-${version}.jar
1) slf4j-api-${version}.jar
2) slf4j-jdk14-${version}.jar
3) rt.jar(Java Core)
파라메터 패턴 : %<변환지정자>{옵션} | |||
변환지정자 | 설정예 | 실행결과 | 설명 |
c, lo, logger | %c | sample.logback.Main | 로거명칭을 출력 |
d, date | %d | 2015-10-24 00:36:55,947 | 날짜시간을 출력 |
%d{HH:mm} | 0:57 | 옵션으로 날짜포멧을 설정한다. | |
m, msg, message | %m | Hello Logback!! | 로거에 넘길 메세지를 출력한다. |
n | a%n b | a<개행> b | 실행환경에 맞는 개행코드를 출력한다. |
a%n{}b | a<개행>b | ||
p, le, level | %p | INFO | 로그 레벨을 출력한다. |
t, thread | %t | main | 로그출력시 쓰레드명을 출력 |
** line (%line) 로그출력 라인번호
서식수식자 | %[서식수식자]<변환지정자> | ||
서식수식자 : [최소폭][.최대폭] :: 정수 | |||
설정예 | 출력문자열 | 실행결과 | 설명 |
[%5m] | "123" | [ 123] | 최소폭지정, 오른쪽정렬로 설정치보다 작으면 빈칸으로 채움 |
"123456" | [123456] | 설정치보다 크면 있는데로 출력 | |
[%.5m] | "123" | [123] | 최대폭지정 |
"123456" | [23456] | 설정치보다 입력한 값이 많으면 왼쪽이 잘려나간다. | |
[%-5] | "123" | [123 ] | 최소폭을 마이너스로 하면 왼쪽정렬을 한다. |
[%.-5] | "123456" | [12345] | 최대폭을 마이너스로 하면 오른쪽이 잘려나간다. |
[%3.5m] | "12" | [ 12] | 최소폭과 최대폭을 동시에 지정한다. |
"1234" | [1234] | ||
"123456" | [23456] | ||
[%-3.-5m] | "12" | [12 ] | 최소/최대폭지정시 마이너스를 붙일수도 있다. |
"1234" | [1234] | ||
"123456" | [12345] |
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
log4j-1.2.17.jar
※ 클래스패스 아래에 저장한다.
# 루트 옵션으로 debug모드에 appender은 console로 설정
# ※ appender명은 임의로 지정하면된다. (복수 가능)
# 별도의 로깅을 지정하지 않았을경우 root 카테고리에 속한다.
log4j.rootCategory=debug,console
# package 기준의 로깅을 지정한다.
log4j.logger.com.emunhi.first=info,console
log4j.additivity.com.emunhi.first=false
# 패키지별로 여러개 지정할 수 있다. 각각 로그레벨을 나누거나 로거를 나눈다.
log4j.logger.com.emunhi.second=error,console
log4j.additivity.com.emunhi.second=false
## console 로거에 대한 로거출력 설정을 한다.
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.immediateFlush=true
log4j.appender.console.encoding=UTF-8
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
위와 같이 했을경우, 아래와 같은 출력이 된다.
2021-07-14 14:00:05 WARN MainLog4j:15 - warn...
2021-07-14 14:00:05 INFO MainLog4j:17 - info...
2021-07-14 14:00:05 ERROR MainLog4j:18 - error...
2021-07-14 14:00:05 ERROR SubLog4j:13 - error...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 콘솔 로그 -->
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<!-- 로그를 날짜별 파일로 남김 -->
<appender name="dailyFile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="D://logs/dailyFile.log"/>
<param name="Append" value="true"/>
<param name="encoding" value="UTF-8" />
<param name="DatePattern" value="'.'yyMMdd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<!-- xml파일로 로그를 남김 -->
<appender name="xmlFile" class="org.apache.log4j.FileAppender">
<param name="file" value="D://logs/xmlFile.xml"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.xml.XMLLayout"/>
</appender>
<!-- 사이즈별로 남김 ※ 주의 :: 아래 예제는 백업을 2로 했기 때문에 초과하면 로그메세지 상실됨-->
<appender name="rollBySize" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="target/log4j/roll-by-size/app.log" />
<param name="MaxFileSize" value="10KB" />
<param name="MaxBackupIndex" value="2" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<!-- 패키지별로 로그를 지정함 -->
<logger name="com.emunhi.first" additivity="false">
<level value="WARN" />
<appender-ref ref="dailyFile" />
<appender-ref ref="stdout" />
</logger>
<!-- root 로거 (전체) -->
<root>
<level value="DEBUG"/>
<appender-ref ref="dailyFile"/>
<appender-ref ref="xmlFile"/>
</root>
</log4j:configuration>
옵션 | 내용 |
---|---|
%p | debug,info,warn,error,fatal 등의 priority 출력 (%-5p 의 경우 5칸 확보) |
%m | 로그내용 출력 message |
%d | 로그발생 날짜시간 출력 포멧 : %d{yyyy/MM/dd HH:mm:ss} 와 같이 SimpleDateFormat 형식 |
%t | 로그발생 Thread 이름을 출력 |
%F | 로깅이 발생한 프로그램의 파일명을 출력 |
%l | 로깅발생 caller 정보 |
%L | 로깅발생 caller 라인수 출력 |
%M | 로깅발생 method 이름 출력 |
% | % 표시 출력 |
%n | 각 플랫폼(OS)등에 맞는 개행문자 출력 |
%c | 카테고리출력 카테고리(패키지)가 com.emunhi.aa.bb일경우 %c{3}이면 emunhi.aa.bb 가 출력 |
%C | 클래스명 출력 클래스가 com.emunhi.aa.MyClass일경우 %C{3}이면 emunhi.aa.MyClass 가 출력 |
%r | 어플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간 milliseconds 로 출력 |
%x | 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)출력 |
%X | 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)출력 |
클래스 | 설명 |
---|---|
ConsoleAppender | org.apache.log4j.ConsoleAppender 콘솔에 로그메세지 출력 |
FileAppender | org.apache.log4j.FileAppender 파일에 로그메세지 출력 |
RollingFileAppender | org.apache.log4j.rolling.RollingFileAppender 파일크기라 지정값 이상되면 백업하고 다시기록한다. |
DailyRollingFileAppender | org.apache.log4j.DailyRollingFileAppender 지정된 기간(날짜) 단위로 파일을 생성한다. |
JDBCAppender | org.apache.log4j.JDBCAppender DB에 로그를 저장, JDBC정보는 parameter로 정의 |
SMTPAppender | 이메일로 메세지 전송 |