eggrok
[java] log4j 본문
로깅(Logging)
로그(Log)란 프로그램 개발이나 운영 시 발생하는 문제점을 추적하거나 운영 상태를 모니터링 하기 위한 텍스트를 말한다.
로그를 남기기 위해서 가장 쉬운 방법은 System.out.println()을 이용하는 것이다.
좀 더 향상된 방법은 프로그래머가 직접 로깅을 위한 클래스를 만들어 사용하는 것이다.
다음은 로그를 파일에 남기는 자바 클래스이다.
Log.java
01.
package
net.java_school.util;
02.
03.
import
java.io.*;
04.
import
java.util.Date;
05.
06.
public
class
Log {
07.
public
String logFile =
"C:/debug.log"
;
08.
FileWriter fw =
null
;
09.
10.
public
Log() {
11.
try
{
12.
fw =
new
FileWriter( logFile,
true
);
13.
}
catch
( IOException e ){}
14.
}
15.
16.
public
void
close() {
17.
try
{
18.
fw.close();
19.
}
catch
( IOException e ){}
20.
}
21.
22.
public
void
debug( String msg ) {
23.
try
{
24.
fw.write(
new
Date()+
" : "
);
25.
fw.write( msg +
" \r\n"
);
26.
fw.flush();
27.
}
catch
( IOException e ) {
28.
System.err.println(
"IOException!"
);
29.
}
30.
}
31.
32.
}
아래와 같은 파일을 만들어 테스트한다.
LogTest1.java
01.
package
net.java_school.logtest;
02.
03.
import
net.java_school.util.Log;
04.
05.
public
class
LogTest1 {
06.
07.
public
void
xxx() {
08.
Log log =
new
Log();
// 출력스트림을 얻는다.
09.
log.debug(
"로그 테스트!"
);
// 로그 메시지 남기기
10.
log.close();
// 출력스트림을 닫는다.
11.
}
12.
13.
public
static
void
main(String[] args) {
14.
LogTest1 test =
new
LogTest1();
15.
test.xxx();
16.
}
17.
18.
}
log4j
사용자 정의 로깅 클래스를 이용하는 것보다는 로깅 프레임워크를 이용하는 것이 좋다.
대표적인 로깅 프레임워크는 log4j가 있다.
자바 API에서도 로깅을 제공하고 있지만 현실은 log4j라는 아파치 그룹의 오픈 소스가 더 많은 호응을 받고 있기 때문에 여기서는 log4j를 소개하고 있는 것이다.
log4j를 사용하기 위해서는 아래 경로에서 log4j 바이너리 파일을 다운로드 한다.
http://logging.apache.org/log4j/1.2/download.html
압축을 푼 후 jar파일(log4j-1.2.15.jar)을 클래스패스로 설정되어 있는 경로에 복사하고 아래와 같은 프로퍼티 파일을 클래스패스로 설정되어 있는 경로에 생성해야 한다.
log4j.properties
log4j.rootLogger = INFO,console log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.layout = org.apache.log4j.SimpleLayout log4j.appender.file = org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File = C:/debug.log log4j.appender.file.DatePattern = '.'yyyy-MM-dd log4j.appender.file.layout = org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern = [%d]%5p [%t] (%F:%L) - %m%n log4j.logger.net.java_school = DEBUG,file
다음으로 아래와 같이 테스트를 위한 파일을 만들어 테스트해 본다.
LogTest2.java
01.
package
net.java_school.logtest.log4j;
02.
03.
import
org.apache.log4j.Logger;
04.
05.
public
class
LogTest2 {
06.
// 로거 얻기
07.
private
Logger log = Logger.getLogger(LogTest2.
class
);
08.
//또는 private Logger log = Logger.getLogger(this.getClass());
09.
10.
public
void
xxx() {
11.
if
(log.isInfoEnabled()) {
12.
log.info(
"info message"
);
13.
}
14.
}
15.
16.
public
static
void
main(String[] args) {
17.
LogTest2 test =
new
LogTest2();
18.
test.xxx();
19.
}
20.
21.
}
테스트 후 콘솔과 C:/debug.log 파일에 로그 메시지를 확인한다.
LogTest1.java 와 같이 파일에 로그를 남기지만 로그를 남긴 후 출력스트림을 닫는 코드는 없다.
log4j.properties 파일의 내용 설명
log4j는 3개의 컴포넌트로 이루어져 있다.
logger, appender, layout 이 그것인데 이들 컴포넌트가 협력하여 로그의 레벨에 따라 기록되도록 한다.
또한 런타임에 이들 메시지가 어떻게 포맷되고 어디에 리포트되어야 하는지를 컨트롤하는 것도 가능하게 한다.
- Logger : 로그의 주체(로그 파일을 작성하는 클래스)로 로깅 메세지를 Appender에 전달
- Appender : 전달된 로깅 메세지의 출력 대상을 지정
- Layout : 어떤 형식으로 출력할 것이지를 결정
log4j.rootLogger = INFO,console
rootLogger는 최상위 로거다. 언제나 존재하고 모든 로거들 중 계층적으로 가장 위에 위치한다.
루트 로거의 로그 레벨과 어펜더를 지정하고 있다.
참고로, 여기서는 하나의 어펜더를 지정했지만 어펜더는 여러개 지정할 수 있다.
console은 사용자가 지은 어펜더 이름이다.
로그 레벨은 TRACE > DEBUG > INFO > WARN > ERROR > FATAL 인데 INFO 로 설정되었으므로 INFO 이상의 로그는 기록된다.
log4j.appender.console = org.apache.log4j.ConsoleAppender
console이란 이름의 어펜더가 실제 어떤 클래스인지를 나타내고 있다.
org.apaceh.log4j.ConsoleAppdender는 로깅 메세지를 콘솔에 출력하고자 할 때 사용하는 클래스이다.
log4j에서 로그메시지가 출력되는 목적지가 어펜더이다. 현재 콘솔, 파일, GUI 컴포넌트, 리모트 소켓 서버, JMS, NT Event 로거, 리모트 UNIX Syslog 데몬에 대한 어펜더가 존재한다.
log4j.appender.console.layout = org.apache.log4j.SimpleLayout
console어펜더는 SimpleLayout으로 출력한다.
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
file은 사용자가 지은 어펜더의 이름이다.
file어펜더가 org.apache.log4j.DailyRollingFileAppender클래스임을 나타내고 있다.
DailyRollingFileAppender클래스는 로그 출력을 파일에 쌓이도록 하고자 할 때 사용하는 클래스이다.
log4j.appender.file.File = C:/debug.log
file어펜더가 지정하는 출력대상 파일의 절대 경로를 지정하고 있다.
log4j.appender.file.DatePattern = '.'yyyy-MM-dd
날짜가 지난 로그는 파일명이 debug.log.2009-08-27 에 저장되도록 지정하고 있다.
log4j.appender.file.layout = org.apache.log4j.PatternLayout
file어펜더는 org.apache.log4j.PatternLayout을 사용한다는 설정이다.
PatternLayout을 사용하면 사용자가 정한 패턴에 따라 출력되도록 설정할 수 있다.
log4j.appender.file.layout.ConversionPattern=[%d]%5p [%t] (%F:%L) - %m%n
출력 패턴을 지정하고 있다.
log4j.logger.net.java_school = DEBUG,file
net.java-school이라는 이름의 새로운 로거를 설정하고 있다.
로거 이름을 net.java_school이란 팩키지 이름으로 설정하면 해당 팩키지에 속한 자바 클래스는 물론 net.java_school.logtest.log4j 팩키지의 모든 자바 클래스가 남기는 모든 로그는 이 로거에 의해 기록된다.
net.java_school 로거는 로그 레벨은 DEBUG, 어펜더는 file이다.
Log 처리 메시지 및 로그 레벨
- FATAL : 가장 심각한 오류, 콘솔에 출력
- ERROR : 일반적인 오류, 콘솔에 출력
- WARN : 주의를 요하는 경우, 콘솔에 출력
- INFO : 런타임 시 관심있는 이벤트, 콘솔에 출력
- DEBUG : 시스템 흐름과 관련된 상세정보, 로그 파일로만 출력
- TRACE : 가장 상세한 형태의 정보, 로그 파일로만 출력
log4j Appender 주요 클래스
- ConsoleAppender : 콘솔에 로그 메시지 출력
- FileAppender : 파일에 로그 메시지 기록
- RollingFileAppender : 파일에 로그 메시지 기록하고, 파일 크기가 일정 수준 이상이 되면 다른 이름의 새파일을 생성하고 기록
- DailyRollingFileAppender : 파일에 로그 메시지 기록하고, 하루 단위로 로그 파일을 변경해서 기록
- SMTPAppender : 로그 메시지를 이메일로 전송
- NTEventAppender : 윈도우즈 시스템 이벤트 로그로 메시지 전송
log4j Layout 클래스
- DateLayout : 로그 메시지를 날짜 중심으로 간단하게 기록
- HTMLLayout : 로그 메시지를 HTML 형식으로 기록
- PatternLayout : 로그 메시지를 사용자 정의 패턴에 따라 기록
- SimpleLayout : 레벨-메시지 형식의 가장 간단하게 로그 기록
- XMLLayout : 로그 메시지를 XML 형식으로 기록
log4j PatternLayout 형식
- %c : 카테고리를 출력
- %p : 로깅 레벨을 출력
- %m : 로그 내용
- %d : 로깅 이벤트가 발생한 시간, yyyy-MM-dd, HH:mm:ss 등 시간 형식을 사용
- %t : 로깅 이벤트를 발생한 스레드의 이름
- %n : 개행
- %C : 클래스 이름
- %F : 로깅이 발생한 파일 이름
- %I : 로깅이 발생한 호출자 정보
- %L : 로깅이 발생한 라인수
- %M : 로깅이 발생한 메소드 이름
- %r : 애플리케이션 시작 이후부터 로깅이 발생한 시점의 시간
- %x : 로깅이 발생한 스레드와 관련된 NDC(Nested Diagnostic Context)
- %X : 로깅이 발생한 스레드와 관련된 MDC(Mapped Diagnostic Context)
log4.xml
다음은 log4j.properties 파일 대신 log4j.xml 파일을 설정 파일로 이용하는 방법이다.
log4j.properties 파일을 지우고 같은 설정 내용인 log4j.xml 파일을 클래스 패스가 걸려있는 경로에 생성한다.
log4.xml
01.
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
02.
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
03.
<
log4j:configuration
xmlns:log4j
=
"http://jakarta.apache.org/log4j/"
>
04.
<
appender
name
=
"console"
class
=
"org.apache.log4j.ConsoleAppender"
>
05.
<
layout
class
=
"org.apache.log4j.SimpleLayout"
/>
06.
</
appender
>
07.
08.
<
appender
name
=
"file"
class
=
"org.apache.log4j.DailyRollingFileAppender"
>
09.
<
param
name
=
"File"
value
=
"C:/debug.log"
/>
10.
<
param
name
=
"datePattern"
value
=
"'.'yyyy-MM-dd"
/>
11.
<
layout
class
=
"org.apache.log4j.PatternLayout"
>
12.
<
param
name
=
"ConversionPattern"
13.
value
=
"[%d]%5p [%t] (%F:%L) - %m%n"
/>
14.
</
layout
>
15.
</
appender
>
16.
17.
<
logger
name
=
"net.java_school"
>
18.
<
level
value
=
"DEBUG"
/>
19.
<
appender-ref
ref
=
"file"
/>
20.
</
logger
>
21.
22.
<
root
>
23.
<
level
value
=
"INFO"
/>
24.
<
appender-ref
ref
=
"console"
/>
25.
</
root
>
26.
27.
</
log4j:configuration
>
Test2.java 를 다시 실행하여 테스트한다.
자카르타 Commons 로깅
아파치 그룹의 자카르타 commons-logging 팩키지는 개발자들에게 공통 로깅 API를 제공하기 위해 만들어진 프레임워크로 애플리케이션이 특정 로깅 API에 종속되는 것을 막아준다. 현재 많은 서드 파티 로깅 프레임워크들이 commons-logging 기반으로 구현되어 있다.
commons-logging 사용법
http://commons.apache.org/downloads/download_logging.cgi 에서 Binary 파일을 다운로드한다. (만약 위 링크가 깨진다면 http://www.apache.org 에서 commons 선택하고 http://commons.apache.org 에서 Logging 선택하면 다운로드 경로를 찾을 수 있다)
commons-logging은 자체적으로 로깅을 지원한다기보다는 여러 로깅 API를 표준화된 방법으로 사용할 수 있게 해주는 개념이기 때문에, 실제 로깅 처리를 위한 별도의 로깅 구현 솔루션이 필요하다.
사실 지금 다운로드한 commons-logging 팩키지에도 SimpleLog 클래스란 로깅 구현체가 포함되어 있지만 콘솔을 이용한 출력만 되므로 잘 쓰이지 않는다.
여기서는 로깅 구현체로 log4j를 사용하는 방법을 제시한다.
아래 프로퍼티 파일을 클래스 패스 경로에 만들어 놓는다.
commons-logging.properties
org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger
아래와 같은 테스트 파일을 만들어 테스트 해 본다.
실습을 위해선 먼저 commons-logging jar 파일(commons-logging-1.1.1.jar)을 클래스 패스에 추가해야 한다.
LogTest3.java
01.
package
net.java_school.logtest.log4j;
02.
03.
/* 이 부분이 log4j를 단독으로 사용할 때와 다르다 */
04.
import
org.apache.commons.logging.Log;
05.
import
org.apache.commons.logging.LogFactory;
06.
07.
public
class
LogTest3 {
08.
// 로거 얻기 역시 log4j를 단독으로 사용할 때와 다르다
09.
private
Log log = LogFactory.getLog(LogTest3.
class
);
10.
// 또는 private Log log = LogFactory.getLog(this.getClass());
11.
12.
public
void
xxx() {
13.
if
(log.isInfoEnabled()) {
14.
log.info(
"info message"
);
15.
}
16.
}
17.
18.
public
static
void
main(String[] args) {
19.
LogTest3 test =
new
LogTest3();
20.
test.xxx();
21.
}
22.
23.
}
from http://java-school.net/java/Logging.php
JDK설치된 폴더의 lib/ext 디렉토리에 카피후
프로젝트 properties 의 Java Build Path >
Library > Add External Jars ... 에서 추가시킴
LOG4J
I. 들어가면서.. 그리고 log4j
log4j는 자바 어플리케이션에서 빠르고 효과적으로 로깅 할 수 있도록 도와주는 오픈 소스 프로젝트입니다.
로깅(logging)은 코드의 가독성을 떨어뜨리는 단점이 있지만 애플리케이션에 문제가 있을 때 개발자가 자세한 상황을 파악할 수 있도록 해 주며 테스팅시 빠질 수 없는 요소입니다.
아마도 여러분들은 여러 어플리케이션이 추가되면서 각 개발자들만의 독특한 로깅방식이 서로 썩이고 얽혀서 화면에 나타나는것을 많이 봤을겁니다 -_-;
즉 로깅방법을 통일할 필요가 있는것이죠. 모든 개발자가 특정 포맷에 맞추어서 로깅 한다면 한결 로깅하기도 편하겠지요
오픈 소스 프로젝트인 Log4j는 개발자들이 매우 손쉽고 다양한 형태로 로깅을 할 수 있도록 도와줍니다. 성능또한 우수해 더이상 System.out.println을 사용할 필요가 없습니다.
II. 다운로드
다운로드 http://logging.apache.org/log4j/docs/download.html
매뉴얼 http://logging.apache.org/log4j/docs/documentation.html
API spec http://logging.apache.org/log4j/docs/api/index.html
III. LOG4J 구조
일단 log4j를 잘 모르지만 그 구조만 살짝 살펴보고 넘어갑시다
log4j는 크게 3가지 요소로 구성되며 그 구조는 다음과 같습니다
① Logger(Category) : 로깅 메세지를 Appender에 전달합니다.
② Appender : 전달된 로깅 메세지를 파일에다 기록할 것인지, 콘솔에 출력할 것인지
아니면 DB에 저장할 것인지 매개체 역활을 합니다.
③ Layout : Appender가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할 것이지
출력 layout을 결졍합니다.
쉽죠?
IV. LOG4J 로깅 레벨
log4j는 다양한 로깅레벨을 지원합니다.
① FATAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.
② ERROR : 일반 에러가 일어 났을 때 사용합니다.
③ WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.
④ INFO : 일반 정보를 나타낼 때 사용합니다.
⑤ DEBUG : 일반 정보를 상세히 나타낼 때 사용합니다.
만약 로깅 레벨을 WARN 으로 설정하였다면 그 이상 레벨만 로깅하게 됩니다.
즉 WARN, ERROR, FATAL 의 로깅이 됩니다.
V. 샘플코드 1
jsp에서 사용하는 예제가 없어 만들어 봤습니다.
test.jsp <%@ page contentType="text/html;charset=MS949" <%! <% logger.fatal("fatal2!!", new NullPointerException("널입니다요")); logger.error("error!", new NumberFormatException()); logger.error("error!2"); logger.warn("warn"); logger.info("info"); logger.debug("debug"); |
결과 콘솔화면
① static Logger logger = Logger.getLogger("test.jsp");
static 메소드 getLogger를 통해 logger 인스턴스를 가져옵니다.
getLogger에는 파라미터로 스트링 혹은 클래스를 사용하는데 jsp에서는 클래스를 파라미터로 주기에는 좀 애매합니다. 그냥 스트링으로 주도록 하지요
② logger.fatal("fatal!!");
logger.fatal("fatal2!!", new NullPointerException("널입니다요"));
logger에 fatal 레벨의 메세지를 전달합니다. 다음 두가지 메소드를 지원하는군요
fatal(Object message)
fatal(Object message, Throwable t)
각 레벨마다 위처럼 두가지 메소드를 지원합니다.
지원 메쏘드 | |
logger.fatal(Object message) | logger.fatal(Object message, Throwable t) |
logger.error(Object message) | logger.error(Object message, Throwable t) |
logger.warn(Object message) | logger.warn(Object message, Throwable t) |
logger.info(Object message) | logger.info(Object message, Throwable t) |
logger.debug(Object message) | logger.debug(Object message, Throwable t) |
VI. 샘플코드 2
서블릿의 경우 다음과 같이 코딩하면 되겠군요
TestServlet.java import javax.servlet.*; public class TestServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { ... } catch (Exception e) { |
VII. LOG4J 설정
log4j 설정은 프로그램 내에서 할 수 있지만 설정파일을 사용함으로서 좀더 유연하게 log4j환경을 만들 수 있습니다.
① 프로그램에서 설정
<%@ page contentType="text/html;charset=MS949" import="org.apache.log4j.*,java.io.* " %> <%! <% PatternLayout patternlayout = new PatternLayout(layout); |
② property 파일에 설정
log4j.properties를 만들어 /WEB-INF/classes 밑에 놓으세요
log4j.rootLogger=INFO, stdout, rolling log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender log4j.appender.rolling.File=output.log log4j.appender.rolling.Append=true log4j.appender.rolling.MaxFileSize=500KB log4j.appender.rolling.DatePattern='.'yyyy-MM-dd log4j.appender.rolling.layout=org.apache.log4j.PatternLayout log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n |
#최상위 카테고리에 INFO로 레벨 설정 및 appender로 stdout, rolling을 정의
log4j.rootLogger=INFO, stdout, rolling
#stdout 어펜더는 콘솔에 뿌리겠다는 정의
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#stdout 어펜더는 patternlayout을 사용하겠다는 정의
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#페턴은 다음과 같이 포맷팅 하겠다는 것을 정의
log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
#역시나 rolling 어펜더는 파일로 처리한다라고 정의
log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender
#로그 파일 이름은 output.log
log4j.appender.rolling.File=output.log
#true면 톰캣을 내렸다 올려도 파일이 리셋되지 않습니다.
log4j.appender.rolling.Append=true
#파일 최대 사이즈는 500KB로 설정
log4j.appender.rolling.MaxFileSize=500KB
#파일 포맷은 output.log.2005-03-10 으로 관리하겠다고 정의
log4j.appender.rolling.DatePattern='.'yyyy-MM-dd
#역시나 rolling 어펜더는 패턴 레이아웃을 사용하겠다고 정의
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
#rolling 어펜더는 패턴 레이아웃 포맷
log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
VIII. 설정 포맷
① 로그파일명 포맷 (DatePattern)
로그파일명 포맷입니다. 날짜, 시간 및 분단위로까지 로그 파일을 분리할 수 있습니다.
형식 | 설명 |
'.'yyyy-MM | 매달 첫번째날에 로그파일을 변경합니다 |
'.'yyyy-ww | 매주의 시작시 로그파일을 변경합니다. |
'.'yyyy-MM-dd | 매일 자정에 로그파일을 변경합니다. |
'.'yyyy-MM-dd-a | 자정과 정오에 로그파일을 변경합니다. |
'.'yyyy-MM-dd-HH | 매 시간의 시작마다 로그파일을 변경합니다. |
'.'yyyy-MM-dd-HH-mm | 매분마다 로그파일을 변경합니다. |
② PatternLayout 포맷
로그자체를 어떤 포맷으로 남길지 결정합니다.
layout에는 HTMLLayout, PatternLayout, SimpleLayout, XMLLayout등이 있으며 PatternLayout이 일반적으로 가장 많이 쓰입니다.
형식 | 설명 |
%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)를 출력합니다. |
예시) (같은 색끼리 보시면 됩니다)
위의 test.jsp를 다음 포맷으로 출력해본다면
[%c] [%C] [%d] [%F] [%l] [%L] [%m] [%M] [%n] [%p] [%r] [%t] [%x] [%X]는 다음과 같다
[test.jsp] [org.apache.jsp.test_jsp] [2005-03-10 12:37:23,561] [test_jsp.java] [org.apache.jsp.test_jsp._jspService(test_jsp.java:64)] [64] [fatal!!] [_jspService] [개행] [FATAL] [765567] [http-8080-Processor25] [] []
=============================================
본문서는 자유롭게 배포/복사 할수 있지만
이문서의 저자에 대한 언급을 삭제하시면 안됩니다
저자 : GoodBug (unicorn@jakartaproject.com)
최초 : http://www.jakartaproject.com
=============================================
'programming' 카테고리의 다른 글
[컴퓨터] 프레임 워크란?? (0) | 2012.04.24 |
---|---|
[java] 이클립스 , 프로젝트의 ! 경고 및..서버 클린방법 (0) | 2012.04.23 |
[java web] Tomcat , context.xml 생성. (0) | 2012.04.20 |
[java] jsp 내장객체 (0) | 2012.04.20 |
[java web]DataSource와 Connection Pooling의 차이점과 장단점 (0) | 2012.04.20 |