본문 바로가기

log4j

[log4j] 톰캣 5.5에서 log4j 사용

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!!");

%>


이렇게 바로 프로그램 안에서 바로 설정해 버릴 수도 있다.