Log4j로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

Log4j로 검색한 결과
등록일:2008-03-14 09:28:23
작성자:
제목:Log 콤포넌트의 제작(Logging의 필요성, Log4j)


[23]  Log  콤포넌트의  제작(Logging의  필요성,  Log4j)

▩  Logging의  필요성
      -  비정상적인  시스템  오작동으로  인한  정보를  특정  매체에  기록하는  것을  말합니다.

      -  로그는  시스템적인  것  뿐만  아니라  특정  사용자의  무리한  로그인  시도,  해킹의도를
          파악하는데  유용한  기록을  제공합니다.

      -  개발과정에서는  발견되지  않았던  논리적인  에러나  문제점을  발견할  수  있습니다.

      -  테스트  과정에서  발견되지  않았던  예외를  기록하는  것을  말합니다.

      -  코드상의  에러는  개발과정에서  전부  수정되어야  합니다.

      -  불필요한  로그  기록이나  많은  로깅은  시스템에  많은  부하를  줄  수  있습니다.

      -  특정  사용자와  관련  있는  로그는  반드시  회원  정보가  기록이  되도록  해주어야  합니다.

      -  모든  Exception은  Logging  해주세요.

      -  JDK  1.4에도  Logging  API가  추가되었으나  Apache에서  진행하는  프로젝트인
          Log4j가  많이  사용되고  있습니다.

  

  


▩  Log4j
      -  Apache  Group에서  진행하는  Log  Framework  Project  입니다.
      -  http://logging.apache.org/Log4j/docs/index.html
      -  Download:  http://logging.apache.org/site/binindex.cgi
      -  logging-Log4j-1.2.14/dist/lib안에  있는  Log4j-1.2.14.jar  파일을
          Eclipse의  c:/eclipse/lib  폴더에  복사합니다.
      -  Tomcat에  배포는  WEB-INF/lib  폴더로  복사합니다.


1.  Log  Level
      -  Level.FATAL:  치명적인  시각한  에러  발생시  사용
      -  Level.ERROR:  어플리케이션이  수행  가능한  정도의  에러  발생시  사용
      -  Level.WARN:  시스템에  문제를  일으킬수  있는  정도의  에러  발생시  사용
      -  Level.INFO:  어플리케이션의  정보를  기록할때  사용
      -  Level.DEBUG:  어플리케이션의  상태에  대한  상세  정보를  나타낼  때  사용

  


2.  로그  기록  Method
      -  FATAL  로그  메시지  기록
          .  fatal(Object  message)
          .  fatal(Object  message,  Throwable  t)
      -  ERROR  로그  메시지  기록
          .  error(Object  message)
          .  error(Object  message,  Throwable  t)
      -  WARN  로그  메시지  기록
          .  warn(Object  message)
          .  warn(Object  message,  Throwable  t)
      -  INFO  로그  메시지  기록
          .  info(Object  message)
          .  info(Object  message,  Throwable  t)
      -  DEBUG  로그  메시지  기록
          .  debug(Object  message)
          .  debug(Object  message,  Throwable  t)

  


3.  Console  Log의  실습
      -  eclipse  setting
          .  project  name:  logTest
          .  package  name:  www.log

      -  BasicConfigurator.configure()은  기본적으로  콘솔  로그를  포함함

>>>>>  Log4jTest1.java

package  test.log;

import  org.apache.Log4j.Logger;
import  org.apache.Log4j.Level;
import  org.apache.Log4j.BasicConfigurator;

public  class  Log4jTest1  {

        public  static  void  main(String[]  args)  throws  java.io.IOException  {
                //Log4j  초기화
                //기본적으로  Console에  출력
                BasicConfigurator.configure();
              
                //Logger  생성
                Logger  www  =  Logger.getLogger("www");
                //Logger  Level  지정,  INFO를  포함한  상위  Level만  저장
                www.setLevel(Level.INFO);
              
                //계층상  하위  Logger  생성
                Logger  logtest  =  Logger.getLogger("www.logtest");
              
                //www  Logger  기록
                www.info("로그  테스트  시작.");
                www.debug("DEBUG  레벨  로그.");
              
                //www.logtest  Logger에  기록
                logtest.info("Log4jTest1  로그  기록");
                logtest.debug("Log4jTest1  DEBUG  레벨  로그");
        }
}

  


4.  PatternLayout의  변환  캐릭터,  출력  형식
      -  %C:  로그  메시지를  기록하려는  클래스의  완전한  이름  출력
      -  %c:  로그이름
      -  %t:  스레드명
      -  %d:  로그  메시지를  기록한  시간을  기록한다.
      -  %p:  로깅  레벨
      -  %M:  로그메시지를  기록하려는  메소드의  이름
      -  %m:  로그메시지  자체
      -  %F:  파일명
      -  %L:  라인  번호
      -  %n:  개행  문자
      -  %r:  실행  경과  시간(millisecond)
      -  %%:  '%'를  출력한다.

  


5.  Appender의  종류,  출력  처리를  할  매체  지정
      -  Log의  출력  방향을  지정합니다.
      -  org.apache.Log4j.ConsoleAppender:  콘솔에  로그메시지를  출력한다.
      -  org.apache.Log4j.FileAppender:  파일에  로그메시지를  기록한다.
      -  org.apache.Log4j.RollingFileAppender:  파일에  로그메시지를  기록하고,  파일이  일정  크기가  되면  다른이름으로  저장하고
          ,  새롭게  로그  메시지를  기록하기  시작한다.
      -  org.apache.Log4j.DailyRollingFileAppender:  파일에  로그  메시지를  기록하며,  하루  단위로  로그  파일을  변경한다.
      -  org.apache.Log4j.net.SMTPAppender:  로그메시지를  이메일로  전송한다.
      -  org.apache.Log4j.nt.NTEventLogAppender:  NT의  이벤트  로그  시스템에  로그메시지를  전송한다.

  

  


▩  속성  파일을  이용한  로그의  기록
      -  Log4j.rootLogger=INFO,  console,  R
          .  rootLogger는  로깅  레벨이  INFO,  Appender는  console과  R을  가지고  있습니다.
          .  R:  RollingFileAppender


1.  속성

>>>>>  Log4j.properties
#--------------------------------------------------
#File  Name:  Log4j.properties
#--------------------------------------------------
Log4j.rootLogger=DEBUG,  console,  R

Log4j.appender.console=org.apache.Log4j.ConsoleAppender
Log4j.appender.console.layout=org.apache.Log4j.SimpleLayout

Log4j.appender.R=org.apache.Log4j.RollingFileAppender
Log4j.appender.R.File=c:/ojt/eclipse/workspace/logTest/Log4j.log
Log4j.appender.R.MaxFileSize=64KB
Log4j.appender.R.MaxBackupIndex=3
Log4j.appender.R.layout=org.apache.Log4j.PatternLayout
Log4j.appender.R.layout.ConversionPattern=[%-5p]  %d{yyyy-MM-dd  HH:mm:ss}  %C{1}.%M  -  %m%n

  


[참고]

#  rootLogger는  로깅  레벨이  INFO,  Appender는  console과  R을  가지고  있습니다.
#  R:  RollingFileAppender
Log4j.rootLogger=DEBUG,  console,  R

#  화면에  출력하는  console  append의  정의
Log4j.appender.console=org.apache.Log4j.ConsoleAppender
Log4j.appender.console.layout=org.apache.Log4j.SimpleLayout

#  파일에  출력하는  RollingFileAppender  정의
Log4j.appender.R=org.apache.Log4j.RollingFileAppender
#  Log4j.appender.R.File=c:/ojt/tomcat-5.5.15/webapps/www/log/Log4j.log
#  파일  생성  경로
Log4j.appender.R.File=c:/ojt/eclipse/workspace/logTest/Log4j.log
#  파일  사이즈
Log4j.appender.R.MaxFileSize=64KB
#  최대  파일  갯수
Log4j.appender.R.MaxBackupIndex=3
#  레이아웃  종류
Log4j.appender.R.layout=org.apache.Log4j.PatternLayout
#  패턴  지정
Log4j.appender.R.layout.ConversionPattern=[%-5p]  %d{yyyy-MM-dd  HH:mm:ss}  %C{1}.%M  -  %m%n

  


2.  속성  파일을  이용한  경우
      -  속성파일의  사용은  PropertyConfigurator.configure("Log4j.properties")을  추가한다.

>>>>>  Log4jTest2.java

package  test.log;

import  org.apache.Log4j.Logger;
import  org.apache.Log4j.PropertyConfigurator;

public  class  Log4jTest2  {

        public  static  void  main(String[]  args)  {
                //속성  파일의  사용
                PropertyConfigurator.configure("Log4j.properties");
              
                Logger  rootLogger  =  Logger.getRootLogger();
                rootLogger.info("프로그램  시작");
              
                Logger  logger  =  Logger.getLogger("www.log");
              
                logger.info("테스트  시작.");
                logger.debug("DEBUG  레벨  로그.");
              
                logger.info("테스트  로그  기록");
                logger.debug("테스트  로그  DEBUG  레벨  로그");
              
                rootLogger.info("프로그램  끝");
        }
}

  

  


▩  사용  예  실습

1.  속성  파일

>>>>>  log.properties
#--------------------------------------------------
#File  Name:  log.properties
#--------------------------------------------------
Log4j.rootLogger=DEBUG,  console,  R

Log4j.appender.console=org.apache.Log4j.ConsoleAppender
Log4j.appender.console.layout=org.apache.Log4j.SimpleLayout

Log4j.appender.R=org.apache.Log4j.RollingFileAppender
Log4j.appender.R.File=c:/ojt/eclipse_cvs/workspace/logTest/Log4j.log
Log4j.appender.R.MaxFileSize=64KB
Log4j.appender.R.MaxBackupIndex=3
Log4j.appender.R.layout=org.apache.Log4j.PatternLayout
Log4j.appender.R.layout.ConversionPattern=[%-5p]  %d{yyyy-MM-dd  HH:mm:ss}  /  %m%n

  


2.  로그  기록  파일

>>>>>  LogWriter.java

package  bookshopcbd.utility;

import  org.apache.Log4j.Level;
import  org.apache.Log4j.Logger;
import  org.apache.Log4j.PropertyConfigurator;

public  class  LogWriter  {
        public  LogWriter(){
        
        }

        /**
          *  로그  기록을  전담하는  메소드입니다.
          *  @param  logName  로그이름
          *  @param  level  로그  기록  레벨
          *  @param  class_methodname  클래스,  메소드명
          *  @param  msg  기록할  메시지
          */
        public  static  void  LogWrite(String  logName,  String  level,  String  class_methodname,  String  msg,  Throwable  t){
                //속성  파일의  사용
                PropertyConfigurator.configure("log.properties");
                //Logger  rootLogger  =  Logger.getRootLogger();
              
                //로그이름  지정
                Logger  www  =  Logger.getLogger(logName);              

                //Logger  Level  지정,  INFO를  포함한  상위  Level만  저장
                www.setLevel(Level.DEBUG);

                //기록할  메시지  조합
                msg  =  logName  +  "/"  +  class_methodname  +  "/"  +  msg;

                if  (  level.toUpperCase().equals("FATAL")){
                        www.fatal(msg,  t);
                }
        
                if  (  level.toUpperCase().equals("ERROR")){
                        www.error(msg,  t);        
                }

                if  (  level.toUpperCase().equals("WARN")){
                        www.warn(msg,  t);        
                }

                if  (  level.toUpperCase().equals("INFO")){
                        www.info(msg,  t);
                }

                if  (  level.toUpperCase().equals("DEBUG")){
                        www.debug(msg,  t);        
                }
              
        }
}

  


3.  로그  테스트  파일

>>>>>  Log4jTest3.java

package  test.log;

import  java.sql.DriverManager;
import  java.sql.SQLException;
import  java.sql.Connection;

public  class  Log4jTest3  {
        Connection  con=null;
      
        public  Log4jTest3(){  }
      
        public  Connection  oracleConnect(){
                //데이터베이스  접속  연결  정보를  가지고  있는  객체입니다.
                //Oracle  접속  정보
                String  driver="oracle.jdbc.driver.OracleDriver";
                String  conStr="jdbc:oracle:thin:@172.16.1.1:1521:ora91";
                String  userid="ojt1830_12_10";
                String  password="oracle";
              
                try{
                        //JDBC드라이버를  로딩합니다.
                        Class.forName(driver);
                      
                        //데이터베이스에  연결을  합니다.                              Oracle  Server  IP:Port:SID          계정명                  패스워드                                          
                        con=DriverManager.getConnection(conStr,userid,password);
                      
                        System.out.println("Oracle  ora91에  접속  했습니다.");
                        LogWriter.LogWrite("test",  "info",  "Log4jTest3.oracleConnect()",  userid  +  "계정  데이터베이스  접속  성공",null);
                }catch(SQLException    e){
                        System.out.println("SQLException:"+e);
                        LogWriter.LogWrite("test",  "error",  "Log4jTest3.oracleConnect()",  userid  +  "Oracle  접속  에러  발생",  e);
                }catch(Exception  e){
                        System.out.println("Exception:"+e.toString());
                        LogWriter.LogWrite("test",  "fatal",  "Log4jTest3.oracleConnect()",  userid  +  "JDBC  Driver  로딩  실패,  기타  에러  발생",  e);                      
                }finally{
                }
              
                return  con;
              
        }
      
        public  static  void  main(String  args[]){
                Log4jTest3  dt  =  new  Log4jTest3();
                Connection  con1  =  null;
  
                try{
                        con1  =  dt.oracleConnect();
                }catch(Exception  e){
                        System.out.println(e.toString());
                }finally{
                        try{
                                if  (  con1  !=  null)  con1.close();
                        }catch(Exception  e){
                                System.out.println(e.toString());
                        }
                }
        }
}

출처  :  http://cafe.naver.com/rurouni20000.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=500