간단한 Spring MVC설정(ControllerClassNameHandlerMapping)

   

==========================================================================================

http://everlikemorning.tistory.com/entry/간단한-Spring-MVC설정ControllerClassNameHandlerMapping

간단하게 SpringMVC프로젝트를 만드는 과정입니다.

내용에 문제가 있다거나 보충해야될 사항이 있으면, 댓글달아주세요.

그리고 들어가기에 앞서 여기서 SpringMVC 모두 설명할순없습니다.

자세히 알고싶으신 분은 http://www.springsource.org/documentation 여기를 참고하세요^^

==========================================================================================

   

1. 이클립스에서 file > new >dynamic web poject 하나 생성합니다.

2. web.xml
설정 (/WebContent/WEB_INF/web.xml)

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns="
http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Spring_MVC_Ex</display-name>
 
 <!-- 인코딩을 설정하는 부분입니다.  "/*" 들어오는 모든 것들에 대해 UTF-8인코딩을 적용합니다.-->
 <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>
   org.springframework.web.filter.CharacterEncodingFilter
  </filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>
 
 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 
 <!-- DispatcherServlet 호출합니다. 호출되는 파일명은 servlet-name속성에서 정의된
 
이름 + "-servlet.xml" 됩니다. , 여기서는 dispatcher-servlet.xml이란 파일을 호출하겠죠
  DispatcherServlet
여러개를 정의 할수 있는데 load-on-startup 값이 작은 숫자로  
  DispatcherServlet
부터 실행 되게 됩니다. 그리고 그곳에서 처리를 못하게 되면 다음

  load-on-setup속성을 가지고있는 Dispatcher 넘어가게됩니다.

  Dispatcher 여기서는 하나밖에 없으니 신경쓸 필요 없을거같습니다 -->
 <servlet>
  <servlet-name>
dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 
 
<!--요청되는 URL중에 ".do" 끝나는 모든 요청은 dispacher에서 처리하겠다는 의미입니다.-->
 <servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>
*.do</url-pattern>
 </servlet-mapping>
 
 
<!-- log4j 설정파일 호출하는 부분입니다. log4j 대한 자세한 내용은 이미 java tip게시판에 다른 분께서
 
자세하게 설명해 놓았습니다. (여기를 참조하셔도 되겠습니다
ttp://everlikemorning.tistory.com/entry/Log4J-간단-사용법)-->
 <listener> 
   <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
 </listener>
 <context-param>
  <param-name>log4jConfigLocation</param-name>
   <param-value>/WEB-INF/log4j.properties</param-value>
 </context-param>
  
 <!-- 프로젝트 실행시 초기 실행되는 파일입니다. -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
</web-app>


3. dispatcher-servlet.xml (/WebContent/WEB_INF/dispatcher-servlet.xml)

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="
http://www.springframework.org/schema/beans"
 xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="
http://www.springframework.org/schema/context"
 xmlns:p="
http://www.springframework.org/schema/p"
 xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd">

 <!-- handler mapping -->
 <bean id="urlMappingWithControllers" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" 
  p:alwaysUseFullPath="true" p:order="0"/>
  
  <!-- view resolver -->
  <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
   p:viewClass="org.springframework.web.servlet.view.JstlView"
   p:prefix="/" p:suffix=".jsp"/>

 <!-- controller -->
 <bean id="hello" class="com.lcy.controller.HelloController"/>
</beans>


handler mapping 요청 URL 매핑되는 컨트롤러를 찾아 해당 컨트롤러에 처리를 요청해 주는 역할을 합니다. SimpleURLHandlerMApping, BeanNameURLHandlerMapping, ControllerClassNameHandlerMapping 여러가지가 있습니다. 여기서는 중에서 ControllerClassNameHandlerMapping 사용해 보겠습니다.

 <!-- handler mapping -->
 <bean id="urlMappingWithControllers" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" 
  p:alwaysUseFullPath="true" p:order="0"/>


ControllerClassNameHandlerMapping 컨트롤러가 MultiActionController이면,
/HelloController/
메서드명.*
아니면, HelloController* 형식이 됩니다.
여기서는 MultiActionController 사용했고, web.xml에서 url-pattern "*.do" 설정했으므로
/HelloControlle/
메서드명.do 되겠습니다 ^^

View resolver
컨트룰러의 처리 결과를 보여줄 뷰를 결정합니다.

  <!-- view resolver -->
  <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
   p:viewClass="org.springframework.web.servlet.view.JstlView"
   p:prefix="
/" p:suffix=".jsp"/>


컨트롤러에서 세팅해주는 뷰이름의 앞에 "/" 뒤에 ".jsp" 자동으로 붙여서 세팅해줍니다.

다음으로 컨트롤러입니다. 요청을 처리한뒤 결과를 Dispatcher에알려 줍니다. 그러면 Dispatcher  View resolver 뷰를 찾아 넘기게 되는거죠.

  <!-- controller -->
 <bean id="hello" class="com.lcy.controller.HelloController"/>
</beans>


HelloController입니다.

 package com.lcy.controller;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class HelloController extends MultiActionController{
 private Logger log = Logger.getLogger(this.getClass());
 
 public ModelAndView hello(HttpServletRequest request, HttpServletResponse response) throws Exception {
  log.debug("================ Method Name : hello");
  ModelAndView mav = new ModelAndView("
hello/hello");
  mav.addObject("hello", "hello world");
  return mav;
 }
 
 public ModelAndView now(HttpServletRequest request, HttpServletResponse response) throws Exception {
  log.debug("================== Method Name : now");
  ModelAndView mav = new ModelAndView("
hello/now");
  Date curDate = new Date();
  mav.addObject("curDate", curDate);
  return mav;
 }

}


보시면 메서드가 hello now 있습니다. 따라서 
http://localhost:8090/Spring_MVC_Ex/hello/hello.do 또는,http://localhost:8090/Spring_MVC_Ex/hello/now.do 형식의 요청이 들어왔을때 각각 처리해서
hello/hello.jsp
hello/now.jsp 뷰를 넘겨줍니다. (앞에 "/" 뒤의 ".jsp" view resolver에서 세팅되어있었죠?) 

4. view
파일 작성
이제 WebContent/hello/ hello.jsp now.jsp 작성해보겠습니다.

hello.jsp

 <%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>hello page2</title>
</head>
<body>
 ${hello}
</body>
</html>


now.jsp

 <%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>hello page2</title>
</head>
<body>
 ${curDate}
</body>
</html>


, 이제 뷰까지 완성하고 프로젝트 클릭 > 우클릭 > run as > run on server 해서 실행하면....
404
에러가 뜰겁니다.( 예상한거라... 다른 에러가 뜨나... _;;;)
암튼 원인은 web.xml welcome파일을 index.jsp 설정했기때문에 파일이 없어서 그런거죠.
/WebContent/WEB-INF/
index.jsp 하나 만들어줍니다.


index.jsp


요청이 전달될수 있도록 포워딩을 시켜줍니다.
<jsp:forward page="/hello/hello.do"/>

이제 실행하면 될겁니다
http://localhost:8090/Spring_MVC_Ex/ (로컬이라 눌러봐야안됩니다. _^ 예전에 어떤 분이 낚이셨다고 하셨는데 ㅋㅋㅋ X님이었나요? ㅋㅋㅋ)
지금까지 작업한 프로젝트 구조입니다.

 

출처 - http://cafe.naver.com/javachobostudy.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=30415&social=1

 

===========================================================

Log4J 간단 사용법

2009/11/18 11:40 in OpenSource/Log4J

* log4j를 사용하면 다음과 같은 장점이 있습니다.(일반적인 견해 + 개인적인 생각 ㅡ_ㅡ)
1. sysout남발로 인한 소스및 로그가 지저문해지는것을 방지.
2. sysout남용으로 인한 성능저하 방지.
3. 로그 모니터링및 문제 발생시 추적이 편해집니다.
4. 개발자들간에 로깅 방식이 통일되어 일관성있는 로깅이 가능해집니다.

* 그럼 지금부터 간단하게 log4j 설정해보겠습니다.

1. jar 다운로드 : http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.15/apache-log4j-1.2.15.zip
(스프링프레임웤을 다운받은적이 있는분은 (다운받은 스프링폴더)\lib\log4j에 보면 log4j-1.2.15.jar라는 파일이 있습니다.)

2.  log4j-1.2.15.jar(Log4J버전에 따라 뒤에 숫자는 차이가 있습니다.)를 [프로젝트 소스폴더]\WebContent\WEB-INF\lib로 복사해서 추가합니다.


이클립스에서 프로젝트를 클릭하고 F5를 누른후 위와 같이 추가된것이 확인되면 문제 없이 추가 된겁니다.

3. 다음으로 web.xml설정을 입니다. web.xml에 다음 코드를 주가합니다.

 <listener>
   <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
 </listener>
 <context-param>
  <param-name>log4jConfigLocation</param-name>
   <param-value>/WEB-INF/log4j.properties</param-value>
 </context-param>

위에 빨간색으로 된 부분은 앞으로 만들게 될 프로퍼티 파일 경로입니다.


4. 다음으로 프로퍼티 설정입니다.

4-1 Log4J 로깅레벨

① FATAL : 치명적인 에러가 났을때 사용.
② ERROR : 일반 에러.
③ WARN : 경고(프로그램은 동작하지만 주의가 요구될때).
④ INFO : 일반 정보.
⑤ DEBUG : 상세정보.

로그출력은 설정파일(property 또는 xml)에서 설정된 레벨 이상급들만 출력됩니다.

예를들면, 레벨을 INFO로 설정하면 그 이상의 레벨들이 출력됩니다.
즉, 프로그램 소스에서 DEBUG로된 로그는 출력되지 않고 INFO, WARN, ERROR, FATAL로
된 로그들이 출력됩니다.


4-2 /WEB-INF/log4j.properties 작성.

# 최상위 카테고리에 DEBUG로 레벨 설정 및 appender로 stdout, dailyfile을 정의
log4j.rootLogger = DEBUG, stdout, dailyfile

# console
log4j.appender.stdout = org.apache.log4j.ConsoleAppender # 콘솔에 뿌려줌.
log4j.appender.stdout.Threshold = DEBUG  # DEBUG이상 레벨만 출력.
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout # 패턴설정
log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n # 패턴설정

# file
log4j.appender.dailyfile.Threshold = DEBUG
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender # 일별 파일로 관리
log4j.appender.dailyfile.DatePattern='.'yyyy-MM-dd # 파일명 포맷 : logfile.log.2009-11-17 과같은 형식
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
log4j.appender.dailyfile.File = E:/Study/source/Spring_MVC_Ex/WebContent/WEB-INF/log/logfile.log

# iBatis
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG


4-3 로그파일명 포맷 (DatePattern) : 위에서 "log4j.appender.dailyfile.DatePattern='.'yyyy-MM-dd" 부분입니다.

형식

설명

'.'yyyy-MM

매달 첫번째날에 로그파일을 변경합니다

'.'yyyy-ww

매주의 시작시 로그파일을 변경합니다.

'.'yyyy-MM-dd

매일 자정에 로그파일을 변경합니다.

'.'yyyy-MM-dd-a

자정과 정오에 로그파일을 변경합니다.

'.'yyyy-MM-dd-HH

매 시간의 시작마다 로그파일을 변경합니다.

'.'yyyy-MM-dd-HH-mm

매분마다 로그파일을 변경합니다.

4-4 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)를 출력합니다.

 

예시) (같은 색끼리 보시면 됩니다)

[%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] [] []


5. 프로그램 적용

package com.lcy.controller;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class HelloController extends MultiActionController{
 private Logger log = Logger.getLogger(this.getClass());       # Logger객체를 얻고
 
 public ModelAndView hello(HttpServletRequest request, HttpServletResponse response) throws Exception {
  log.debug("================ Method Name : hello");        # 실제로 로그를 찍는 부분입니다.
  ModelAndView mav = new ModelAndView("hello/hello");
  mav.addObject("hello", "hello world");
  return mav;
 }
 
 public ModelAndView now(HttpServletRequest request, HttpServletResponse response) throws Exception {
  log.debug("================== Method Name : now");
  ModelAndView mav = new ModelAndView("hello/now");
  Date curDate = new Date();
  mav.addObject("curDate", curDate);
  return mav;
 }

}


6. 출력
대략 아래와 같은 로그가 찍히는것을 확인할수있습니다. ㅡ_ㅡ;;

 2009-11-18 11:30:56,236 DEBUG [http-8090-2] controller.HelloController (HelloController.java:16)     - ================ Method Name : hello


7. daily file
다음날이 되면 아래처럼 날짜별로 파일이 저장됩니다.



* 참고자료 http://www.jakartaproject.com

출처 - http://everlikemorning.tistory.com/entry/Log4J-%EA%B0%84%EB%8B%A8-%EC%82%AC%EC%9A%A9%EB%B2%95


===================================================================================


출처 log4j 설정방법 - * 개인정리-------------------------------|작성자 어라

 

 

대충 다른곳에서 사용하는 설정을 가져다가 설정해서 사용하다가.. 이번기회에 정리를 한번 해봤다.
내게 있어서 제일 필요한것 appender와 log Level에 따라서 로그를 출력하는 것..

 

- 일단 로그를 출력할곳을 선택하기 위해서 설정해야 할것..
  log4j.rootLogger=DEBUG, console, save

 

※앞의 DEBUG는 전체 Level설정값이다... 
  뒤에 log4j.appender.console.Threshold를 이용해서 Level을 지정해주지 않으면 여기서 설정된 설정치를 이용하여 log가 생성된다.
  참고로 로그 레벨은( level : DEBUG < INFO < WARN < ERROR < FATAL) 제일 왼쪽이 제일아랫레벨이다.

  여기서 WARN을 설정하면WARN, INFO까지만 로그가 출력이 된다.

※뒤의  consloe, save는 appender의 이름으로 2개의 appender를 사용하겠다는 설정이다.

 

- ConversionPattern 은 로그를 어떤 형태로 기록할지에 대한 설정이다. 각 옵션은 아래와 같다.

- %m : 당신이 지정한 메세지를 출력 
- %p : 로깅 이벤트의 priority 를 출력 
- %r : 어플리케이션이 시작되어 로깅이벤트가 일어날때까지의 경과시간을 밀리세컨드 값으로 출력 
- %c : 로깅이벤트의 category를 출력한다. 예를 들어 category 이름이 "a.b.c" 일때 %c{2} 는 "b.c"를 출력하며 {2}는 
        도트(.)로 구분된 category 이름의 마지막 두개의 컴포넌트를 의미한다. 
        {n} 이 없으면 기본적으로 카테고리의 이름을 모두 출력한다. 
- %t : 로깅 이벤트를 생성한 스레드 이름을 출력 
- %x : 로깅이벤트를 발생시킨 스레드에 관련된 내포검사항목(Nested Diagnostic Context : NDC)을 출력한다. 
        Java Servlet 과 같이 다수의 클라이언트가 분산된 스레드에 의해 다루어 질 때 유용하다. 
- %n : 플랫폼 독립적인 개행문자를 출력한다. "\n" 또는 "\n\r" 등이 지정될 수 있다. 
- %% : 하나의 % 기호를 출력한다. 

- 경고 : 아래의 형식은 프로그램의 실행속도를 느리게 한다. 실행속도가 중요하지 않은 것이 아니라면 사용을 피하도록 한다. 

- %d : 로깅이벤트가 일어난 날자(date)을 출력한다. 
        date 변환 지정자는 날짜형식 지정자 뒤에 이어 나오는 brace({..}) 사이에 둘러쌓여 나온다. 
        예: %d{HH:mm:ss,SSS} 또는 %d{dd MMM yyyy HH:mm:ss,SSS} 
        만약 날자 형식 지정자가 주어져있지 않다면 ISO8601 형식으로 나타난다. 날짜형식 지정자는 자바의 속도가 느린 
        SimpleDateFormat 클래스의 시간형식 문자열과 같은 문법을 수용했다. 
        더 빠른 성능을 위해 %d{ISO8601}, %d{ABSOLUTE}, %{RELATIVE}(프로그램 시작 후 경과시간의 밀리세컨드값을 나타내며 
        가장 빠르다) 또는 %d{DATE} 를 사용하며 각각은 
        log4j의 ISO8601DateFormat, AbsoluteTimeDateFormat, RelativeTimeDateFormat, DateTimeDateFormat 날자형식을 사용한다. 

- %l : 소스코드의 위치정보를 출력한다. %C. %M(%F:%L) 의 축약형이다. 
- %C : 로깅요청을 일으킨 호출자의 완전한 클래스이름을 출력한다. 
        예를들어 "org.apache.xyz.SomeClass"라는 클래스 이름이 있을때, %C{1} 은 "SomeClass"를 출력한다. 
        {1} 는 "완전한 클래스이름의 마지막 하나의 구성요소를 출력하라" 는 뜻이다. 만약 {n} 이 없다면 
        기본적으로 완전한 클래스 이름을 출력한다. 
- %M : 로깅요청을 일으킨 메소드를 출력한다. 
- %F : 로깅요청을 일으킨 파일 이름을 출력한다. 
- %L : 로깅요청을 일으킨 곳의 행번호를 출력한다.

 

- 각 클래스나 패키지별로 로그를 따로 설정할수도 있다. 설정방법은 아래와 같다.

  Class 혹은 Package 별로 다른 출력 방식을 적용할 수 있다.


 

  log4j.properties 설정-----------------------------------------------------------------

 

  # Root Logger
  log4j.rootLogger=INFO

  # 바로 위처럼 Root Logger에 어떤 Appender도 설정하지 않으면 Root Logger는 Log Message를 출력하지 않는다.
  # Console에서조차 다른 Package의 Log Message에는 관심이 없다면 위와 같이 하자 ^^/
  

  # Adel Logger
  log4j.logger.adel.test=INFO, console

 

  # adel.test Package 하위의 Class에서만 Log Message를 출력한다.
  log4j.logger.adel.test.sample_1=INFO, file-1
  log4j.logger.adel.test.sample_2=INFO, file-2

  

  # 각 Package 마다 다른 Appender를 적용시켜서 Package 별로 다른 파일에 Log Message를 출력한다.

 

  # Console Appender 
  log4j.appender.console=org.apache.log4j.ConsoleAppender
  log4j.appender.console.layout=org.apache.log4j.PatternLayout
  log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n

 

  # File Appender
  log4j.appender.file-1=org.apache.log4j.RollingFileAppender
  log4j.appender.file-1.File=test-1.log
  log4j.appender.file-1.MaxFileSize=10MB
  log4j.appender.file-1.MaxBackupIndex=10
  log4j.appender.file-1.layout=org.apache.log4j.PatternLayout
  log4j.appender.file-1.layout.ConversionPattern=%d %p [%c] - %m%n

 

  # File Appender
  log4j.appender.file-2=org.apache.log4j.RollingFileAppender
  log4j.appender.file-2.File=test-2.log
  log4j.appender.file-2.MaxFileSize=10MB
  log4j.appender.file-2.MaxBackupIndex=10
  log4j.appender.file-2.layout=org.apache.log4j.PatternLayout
  log4j.appender.file-2.layout.ConversionPattern=%d %p [%c] - %m%n


## Log4J Config Property File
#log4j.rootLogger=INFO, console
log4j.rootLogger=DEBUG, console, save

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%C][%M][%-5p][%d{yyyy/MM/dd HH:mm:ss}] %m%n

log4j.appender.save=org.apache.log4j.DailyRollingFileAppender
log4j.appender.save.Threshold=INFO
log4j.appender.save.ImmediateFlush=true


#log4j.appender.save.File=/sec/batch/gsparse/log/log
log4j.appender.save.File=c:/logs/log.txt
log4j.appender.save.Append=true
log4j.appender.save.DatePattern='.'yyyyMMdd
log4j.appender.save.layout=org.apache.log4j.PatternLayout
log4j.appender.save.layout.ConversionPattern=[%C][%M][%-5p][%d{yyyy/MM/dd HH:mm:ss}] %m%n


===================================================================================


Log4j를 사용할때 서비스별, 또는 기능별로 로그를 구분하여 관리되어야할 경우가 있다. 
아래와 같은 방법으로 log4j.properties를 설정하게되면,
각Package별로 별도의 로그파일을 생성하여 관리할수 있다. 

log4j.debug=false
log4j.rootLogger=INFO, CONSOLE, PACK1PACK2PACK3
log4j.logger.com.package.package1=INFO, PACK1
log4j.logger.com.package.package2=INFO, PACK2
log4j.logger.com.package.package3=INFO, PACK3

# Console Appender
log4j.appender.Corg.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.C%5p(%F)[%d]-%m%n

# PACK1
log4j.appender.PACK1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.PACK1.Threshold=INFO 
log4j.appender.PACK1.File=/app/logs/package1.log
log4j.appender.PACK1.layout=org.apache.log4j.PatternLayout
log4j.appender.PACK1.layout.C%5p(%F)[%d]-%m%n

# PACK2
log4j.appender.PACK2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.PACK2.Threshold=INFO 
log4j.appender.PACK2.File=/app/logs/package2.log
log4j.appender.PACK2.layout=org.apache.log4j.PatternLayout
log4j.appender.PACK2.layout.C%5p(%F)[%d]-%m%n

# PACK3
log4j.appender.PACK3=org.apache.log4j.DailyRollingFileAppender
log4j.appender.PACK3.Threshold=INFO 
log4j.appender.PACK3.File=/app/logs/package3.log
log4j.appender.PACK3.layout=org.apache.log4j.PatternLayout
log4j.appender.PACK3.layout.C%5p(%F)[%d]-%m%n

참고사이트 : http://ecspecialist.tistory.com/38?srch ··· m%252f38


출처 - http://www.jejuen.com/home/lang.php?mid=31&r=view&uid=84











'Development > Java' 카테고리의 다른 글

Javadoc 이클립스에서 한글 출력  (0) 2012.04.19
SHA1 해쉬 구하는 클래스  (0) 2012.04.12
java - slf4j  (0) 2012.03.24
서블릿 load-on-startup  (0) 2012.03.21
java 바이트코드 컨트롤 및 분석 - ASM  (0) 2012.03.19
Posted by linuxism
,