프로그램을 하다가 오류나 디버깅을 하기 위해 System.out.println으로 출력을 많이한다.
하지만 log4j라는 것을 이용하여 일반 디버깅 보다는 적절하게
console, file, smtp, db 등 여러곳으로 로그를 남길수 있는게 log4j이다.
프로퍼티 파일을 이용하여 사용할 수도 있고 .
이렇게 어플리 케이션에서 사용할 수 도 있다.
fatal(), error(), warn(), info(), debug(), trace()
fatal : 아주 심각한 에러가 발생한 상태를 나타낸다. 시스템적으로 심각한 문제가 발생해서 어플리케이션 작동이 불가능할 경우가 해당하는데, 일반적으로는 어플리케이션에서는 사용할 일이 없다.
error : 요청을 처리하는중 문제가 발생한 상태를 나타낸다.
warn : 요청을 처리하는중 문제가 발생했지만, 불완전하게나마 처리가 가능한 상태를 나타낸다.
info : 어플리케이션이 작동할때 필요한 기본적인 정보를 나타낸다.
debug : 디버깅 즉, 문제 해결을 하기 위한 상태 정보를 나타낸다.
trace : log4j1.2.12에서 신규 추가된 레벨으로서. 디버그 레벨이 너무 광범위한것을 해결하기위해서 좀더 상세한 상태를 나타낸다.
######################################################################
#%p debug, info, warn, error, fatal 등의 priority 가 출력된다.
#%m 로그내용이 출력됩니다
#%d 로깅 이벤트가 발생한 시간을 기록합니다.
# 포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다
#%t 로그이벤트가 발생된 쓰레드의 이름을 출력합니다.
#%% % 표시를 출력하기 위해 사용한다.
#%n 플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다.
#%c 카테고리를 표시합니다
# 예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다.
#%C 클래스명을 표시합니다.
# 예)클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다
#%F 로깅이 발생한 프로그램 파일명을 나타냅니다.
#%l 로깅이 발생한 caller의 정보를 나타냅니다
#%L 로깅이 발생한 caller의 라인수를 나타냅니다
#%M 로깅이 발생한 method 이름을 나타냅니다.
#%r 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)
#%x 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다.
#%X 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.
#######################################################################
import java.io.*;
import org.apache.log4j.*;
import org.apache.log4j.net.SMTPAppender;
import org.apache.log4j.jdbc.JDBCAppender;
public class Test2 {
public static Logger logger = Logger.getRootLogger();
String logPattern = "[%d][%-5p](%F:%L) - %m%n";
DailyRollingFileAppender fileAppd = null;
ConsoleAppender conAppd = null;
JDBCAppender dbAppd = null;
public void fileAppend(){
try{
fileAppd = new DailyRollingFileAppender(new PatternLayout(logPattern), "./log/logfile.log", "yyyy-MM-dd");
}catch (IOException e){
System.out.println("file 로그설정에 문제");
System.exit(-1);
}
//fileAppd.setThreshold(Level.FATAL); // 이것보다 레벨이 낮으면 안됨
logger.addAppender(fileAppd);
}
public void consoleAppend(){
try{
conAppd = new ConsoleAppender(new PatternLayout(logPattern));
}catch (Exception e){
System.out.println("consol 로그설정에 문제");
System.exit(-1);
}
//conAppd.setThreshold(Level.TRACE); // 이것보다 레벨이 낮으면 안됨
logger.addAppender(conAppd);
}
public void smtpAppend(){
SMTPAppender appender = null;
try{
appender = new SMTPAppender();
appender.setBufferSize(1);
appender.setTo("받는사람");
appender.setFrom("보내는사람");
appender.setSMTPHost("메일호스트");
appender.setSubject("제목");
appender.setLayout(new PatternLayout(logPattern));
appender.activateOptions();
}catch (Exception e){
System.out.println("smtp 로그설정에 문제");
System.exit(-1);
}
logger.addAppender(appender);
}
public void dbAppend(){
try{
dbAppd = new JDBCAppender();
dbAppd.setDriver("com.microsoft.jdbc.sqlserver.SQLServerDriver");
dbAppd.setURL("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=디비이름");
dbAppd.setUser("사용자이름");
dbAppd.setPassword("비번");
dbAppd.setLayout(new PatternLayout(logPattern));
dbAppd.setBufferSize(1);
dbAppd.setSql("insert into APP_LOG(LOGDATE, LOGLEVEL, CLASSNAME, LINE, MESSAGE) values('%d', '%p', '%F', '%L', '%m')");
}
catch(Exception e){
System.out.println("db 로그설정에 문제");
System.exit(-1);
}
logger.addAppender(dbAppd);
}
public void setLogFatal(String message){
logger.fatal(message);
}
public void setLogDebug(String message){
logger.debug(message);
}
public void setLogWarn(String message){
logger.warn(message);
}
public void setLogInfo(String message){
logger.info(message);
}
public void setLogTrace(String message){
logger.trace(message);
}
public void setLogError(String message){
logger.error(message);
}
}
|