간단한 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
,


* mysql 설치 후 맨 처음 실행 시 메시지


[root@localhost ~]# service mysqld start

Initializing MySQL database:  Installing MySQL system tables...

OK

Filling help tables...

OK


To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system


PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:


/usr/bin/mysqladmin -u root password 'new-password'

/usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'


Alternatively you can run:

/usr/bin/mysql_secure_installation


which will also give you the option of removing the test

databases and anonymous user created by default.  This is

strongly recommended for production servers.


See the manual for more instructions.


You can start the MySQL daemon with:

cd /usr ; /usr/bin/mysqld_safe &


You can test the MySQL daemon with mysql-test-run.pl

cd /usr/mysql-test ; perl mysql-test-run.pl


Please report any problems with the /usr/bin/mysqlbug script!

                                                                         [  OK  ]

Starting mysqld:                                           [  OK  ]








Change or Set the MySQL Root password

For every database, you should set the root or sa passwords to something other than the default, unless you want to get hacked. For mysql, the system administrator user is called root. You will use the mysqladmin utility from a command line to set the new password. Notice that there are two commands to be run.

Syntax:

mysqladmin -u root password 'newpassword'

mysqladmin -u root -h host_name password 'newpassword'

Example:

mysqladmin -u root password 'ws8dr8as3'

mysqladmin -u root -h localhost password 'ws8dr8as3'

You will also want to restart the database server after running this command

sudo /etc/init.d/mysql restart



출처 - http://www.howtogeek.com/howto/mysql/set-the-mysql-root-password/








[mysql] mysqladmin 유틸리티

새로운 데이터베이스 생성
[root@byungun ~]# mysqladmin -u root -p create scbyun-db

특정 데이터베이스 삭제
[root@byungun ~]# mysqladmin -u root -p drop scbyun-db

MySQL의 권한테이블 갱신
[root@byungun ~]# mysqladmin -u root -p reload
(= mysql> flush privileges; 동일)

MySQL 접속한 사용자 확인
[root@byungun ~]# mysqladmin -u root -p processlist

접속되어 있는 MySQL사용자(threads)의 접속 끊기
[root@byungun ~]# mysqladmin -u root -p kill 8

MySQL의 간단한 실행정보 확인
[root@byungun ~]# mysqladmin -u root -p status

MySQL의 현재 상황 자세히 확인
[root@byungun ~]# mysqladmin -u root -p extended-status
(= mysql> show status; 동일)

MySQL의 환경변수 확인
[root@byungun ~]# mysqladmin -u root -p variables
(= mysql> show variables; 동일)

MySQL 정확한 버전과 여러가지 실행정보 확인
[root@byungun ~]# mysqladmin -u root -p version

MySQL이 죽었는지 살았는지 확인
[root@byungun ~]# mysqladmin -u root -p ping

리눅스 서버관리 실무 바이블 16장 참고하여 실습한 내용


출처 - http://sangchul.kr/4866812


'DB > MySQL' 카테고리의 다른 글

mysql 트리거 사용하기  (2) 2012.04.02
MySQL DATE 포맷 및 함수  (0) 2012.04.02
Mysql auto_increment  (0) 2012.03.30
mysql index 설정  (0) 2012.03.30
Mysql Command Line Client charset 설정  (0) 2012.03.27
Posted by linuxism
,

출처 - http://h10010.www1.hp.com/wwpc/ca/en/sm/WF06b/15351-15351-3328412-3328421-3328421-3884343-3919183.html?dnr=1

HP ProLiant DL160 G6 Server series (491532-B21) - specifications and warranty


Processor, Operating System and Memory
Number of processors
1 processor
Processor upgrade
Upgradeable to two processors
Processor core available
Quad
Processor front side bus
1333/1066/800 MHz Front Side Bus
Internal Cache
4 MB Level 3 cache (E5504); 8 MB Level 3 cache (standard)
Standard memory
4 GB or 6 GB or 12 GB
Maximum memory
144 GB (18 x 8 GB) for Registered Memory configurations; 24 GB (12 x 2 GB) for Unbuffered Memory configurations
Memory type
DDR3 Registered (RDIMM) and Unbuffered (UDIMM)
Internal drives
Internal hard disk drive
No hard disk drive in standard configuration
Hard disk drive speed
Not applicable
Hard disk controller
Non-Hot Plug SATA Models: HP Embedded SATA RAID Controller (integrated into the south-bridge) supporting SW RAID 0,1,10. NOTE: Transfer rate: up to 3 Gb/s SATA; Hot Plug SATA/SAS Models: HP Smart Array P410 RAID Controller (RAID 0/1/1+0/5/5+0). NOTE: Transfer rate: up to 3 Gb/s SATA, up to 3 Gb/s SAS
Flexible disk drive
Via USB only
Optical drives
DVD-ROM: SATA 9.5mm DVD-ROM drive, slim (optional); DVD RW: SATA 9.5mm DVD RW drive (optional)
Internal mass storage
Non-Hot Plug SATA: 3.0 TB (4 x 750 GB); Hot Plug SATA: 4.0 TB (4 x 1 TB); Hot Plug SAS: 4.0 TB (4 x 1 TB)
System features
Chassis Type
1U Rack
Chipset
Intel® 5520 Chipset
Network interface
HP NC362i Integrated Dual Port Gigabit Server Adapter
External I/O ports
Parallel - None; Network RJ-45 (Ethernet) - 2 10/100/1000 NIC ports (plus 1 dedicated for the HP ProLiant Lights Out 100i Remote Management); Serial - 1; Pointing Device (Mouse) - 0 (via USB only); Graphics - 1; Keyboard - 0 (via USB only); USB - 5 (two front, one internal, two rear)
Expansion slots
Non-Hot Plug Models: Up to two available PCI Express 2.0 slots: Slot 1: full-length/full-height PCI-Express 2.0 x16 or Slot 1: half-length/full-height PCI-Express 2.0 x16; Slot 2: low-profile internal only PCI-Express 2.0 x8; Hot Plug Models: One available PCI-Express slot: Slot 1: half-length/full-height PCI-Express 2.0 x16; Slot 2: low-profile internal only PCI-Express 2.0 x8 - slot populated by the SAS/SATA storage controller
power supply type
500 Watts, auto-switching, high efficiency, PFC (Power Factor Correcting). NOTE: Factory upgradeable to high-efficiency (HE) pluggable power supply
Power requirements
90 to 264 VAC, 47 to 63 Hz
Compatible Operating Systems
Microsoft® Windows® Server; Microsoft® Windows® Server 2008 Hyper V; Red Hat Enterprise Linux (RHEL); SUSE Linux Enterprise Server (SLES); Solaris 10 for x86/x64 based Systems; Citrix Essentials for XenServer (Retail)
Dimensions (w x d x h)
44.80 x 68.20 x 4.32 cm
Weight
13.69 kg
Compliance Industry Standards
ACPI V2.0 Compliant; PCI 2.2 Compliant; PXE Support; WOL Support; Microsoft® Logo certifications; IPMI 2.0, SMASH CLP compliant
Security Management
Power-on password; Setup password; Diskette boot control; Secure Sockets Layer (SSL); Secure Shell (SSH)
Service & support features
This product is covered by a global limited warranty and supported by HP Services and a worldwide network of HP Authorized Channel Partners. Hardware diagnostic support and repair is available for one year from date of purchase. Support for software and initial setup is available for 90 days from date of purchase.

'System > Common' 카테고리의 다른 글

/bin/false VS /sbin/nologin  (0) 2012.04.04
리눅스 파티션 나누기  (0) 2012.04.03
표준에러 미출력(/dev/null 2>&1)  (0) 2012.03.02
APUE2(Advanced Programming in the UNIX Environment) 정리  (0) 2012.02.12
PID 생성 관련  (0) 2012.02.11
Posted by linuxism
,