log4j 쓰는 방법..
어제 하루종일 헤맸다..;;
일단 log4j를 쓰기 위해서는
설정 파일이 필요하다.
log4j.properties 나 log4j.xml을 사용하는데
우리는 xml을 쓰지만..그래도 설정 파일 예를 올려보면
##########log4j.properties################
log4j.rootLogger=INFO, stdout1, stdout2
log4j.logger.jsp1=INFO, stdout1
log4j.additivity.jsp1=false
log4j.logger.jsp2=INFO, stdout2
log4j.additivity.jsp2=false
log4j.appender.stdout1=org.apache.log4j.ConsoleAppender
log4j.appender.stdout1.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout1.layout.ConversionPattern=jsp1 appender log %d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
log4j.appender.stdout2=org.apache.log4j.ConsoleAppender
log4j.appender.stdout2.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout2.layout.ConversionPattern=jsp2 appender log %d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
######## log4j.xml ##########
<?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_APPENDER" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout"/>
</appender>
<appender name="FILE_APPENDER" class="org.apache.log4j.FileAppender">
<param name="File" value="file-Log.txt"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
</appender>
<appender name="ROLL_APPENDER" class="org.apache.log4j.RollingFileAppender">
<param name="Threshold" value="ALL"/>
<param name="File" value="/app/logs/testinsu2/application_log.xml"/>
<param name="Append" value="true"/>
<param name="ImmediateFlush" value="true"/>
<param name="BufferedIO" value="false"/>
<param name="BufferSize" value="8192"/>
<param name="MaxBackupIndex" value="9"/>
<param name="MaxFileSize" value="5MB"/>
<layout class="org.apache.log4j.xml.XMLLayout">
<param name="locationInfo" value="false"/>
</layout>
</appender>
<appender name="DAILY_APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="yyyy-MM-dd"/>
<param name="file" value="/app/logs/testinsu2/daily/daily.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%n %d{yyyy/MM/dd HH:mm:ss} %-5p %x %M(%F:%L) - %m %n"/>
</layout>
</appender>
<appender name="SQL_APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="yyyy-MM-dd"/>
<param name="file" value="/app/logs/testinsu2/sql/sql.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%n %d{yyyy/MM/dd HH:mm:ss} %-5p %x %M(%F:%L) - %m %n"/>
</layout>
</appender>
<category name="sql.log">
<priority value="debug"/>
<appender-ref ref="SQL_APPENDER"/>
</category>
<category name="time.log">
<priority value="debug"/>
<appender-ref ref="DAILY_APPENDER2"/>
</category>
<category name="delos.log">
<priority value="debug"/>
<!--<priority value="debug"/>-->
<appender-ref ref="CONSOLE_APPENDER"/>
</category>
<!--
<root>
<priority value="fatal"/>
<appender-ref ref="DAILY_APPENDER"/>
</root>
-->
</log4j:configuration>
xml에서는 category 태그는 로거 객체를 얻어올때 String을 넘겨서 매핑시켜서 로그를
남길 수 있지만 이는 좀 비효율적으로 보이므로
<logger name="kr.co.mywork.mon">
<level value = "DEBUG" />
</logger name>
이렇게 설정하여 패키지 단위로 로그 레벨을 설정하도록 하자.
사용 하는 방법은
위 xml 이나 프로퍼티 파일을 톰캣의 클래스패스에 넣으면 되는데
ant등을 사용하여 디플로이를 할 경우에는 src에 넣어두고 타겟을 classes로 설정하여
디플로이 할 때마다 자동으로 배포되도록 하자.
원래는 classes밑에 들어가면 맞다.
그리고
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="org.apache.log4j.*" %>
<%!
static Logger logger = Logger.getLogger("delos.log");
%>
<%
logger.info("info");
logger.debug("debug");
logger.warn("warn");
logger.error("error");
logger.fatal("fatal error");
out.println("a");
%>
이렇게 String을 넘겨줘서 매핑하던가..
public class Test
{
public static String LOG4J_CONFIG_FILE_PATH = "D:\\JAVA\\workspace\\estore\\dev\\prddataAdminWeb\\WebContent\\WEB-INF\\classes\\log4j.xml";
private static Logger logger = Logger.getLogger("delos.log");
public static void main(String[] args) throws Exception
{
PropertyConfigurator.configure(Test.LOG4J_CONFIG_FILE_PATH);
//기본설정으로 구성할 때
//BasicConfigurator.configure();
logger.info("info");
logger.debug("debug");
logger.warn("warn");
logger.error("error");
logger.fatal("fatal error");
Exception e = new Exception("Test Exception");
logger.error(e.getMessage(), e);
}
}
이렇게 객체를 줘서 패키지 단위로 설정하던가..
<%!
static Logger logger = Logger.getLogger("index.jsp");
%>
<%
String layout = "%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n";
String logfilename = "DailyLog.log";
String datePattern = ".yyyy-MM-dd ";
PatternLayout patternlayout = new PatternLayout(layout);
DailyRollingFileAppender appender = new DailyRollingFileAppender(patternlayout, logfilename, datePattern);
logger.addAppender(appender);
logger.setLevel(Level.INFO);
logger.fatal("fatal!!");
%>
이렇게 바로 프로그램 안에서 바로 설정해 버릴 수도 있다.