Software Architect/C#

출처 : http://blog.naver.com/PostView.nhn?blogId=mrlongpark&logNo=150055610472


log4net 내려받기

http://logging.apache.org/log4net/download.html

incubating-log4net-1.2.10.zip  다운로드받는다.

다운로드받은 파일의 압축을 푼다.

..\log4net-1.2.10\bin\mono\2.0\release 폴더의 log4net.dll log4net.xml 파일을 사용한다.

 

■환경설정

VS 솔루션의 참조추가를 선택해서, log4net.dll을 추가한다.

AssemblyInfo.cs 에 아래내용을 추가한다.

[assembly: log4net.Config.DOMConfigurator(Watch = true)]

 

■사용방법(프로그램부)

Application의 기본적인 구성은 아래와 같다.

1.(프로그램)logger로 불려지는 log출력용 인스턴스를 취득한다.

2.(프로그램)logger의 메서드를 사용해서 로그를 설정한다.

3.(XML파일)출력에 사용하는 Appender를 설정한다.

4. (XML파일)출력하고싶은 logger단계와 Appender를 매핑한다.

 

출력하는 메시지는 프로그램에 기술하고,출력에 관한설정은 구성파일 App.config에 기술한다.

 

로그출력용 인스턴스(logger)의 취득

출력하고 싶은 Class에 아래와 같이 선언한다.

private static readonly log4net.ILog logger       = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

 

■로그에 출력하는 메서드

logger.Fatal("log4net에의한출력예~Fatal(치명적장해)");

logger.Error("log4net에의한출력예~Error(장해)");

logger.Warn("log4net에의한출력예~Warn(경고");

logger.Info("log4net에의한출력예~Info(정보)");

logger.Debug("log4net에의한출력예~Degug(디버그트레이스용)");

 

레벌

표준적인 사용분류

Fatal

시스템 정지에 해당하는 치명적 장해

Error

시스템이 정지하지는 않지만문제가 되는 장해

Warn

장해가 아닌 주의경고

Info

동작로그등의 정보

Debug

개발용 디버그 메시지

■로그출력할 곳 [어펜더(Appender)]의 설정

<appender name="FileAppender" type="log4net.Appender.FileAppender">

    <param name="File" value="d:\myDev\log\log.log" />

    <param name="AppendToFile" value="true" />

  </appender>

 

■대표적인 [어펜더(Appender)]

 

ADONetAppender

데이터베이스의 보존하기위해복수의 AP서버가 있는 경우에는 일관관리가 가능한 메리트가 있다.

그러나,DB접속이 안될때는 SMTPAppender와 함께써서 장해통보를 할 필요가 있다.

 

ConsoleAppender

콘솔에 출력을 하는 표준 Appender이다.

 

EventLogAppender

이벤트뷰어라고 하는 Windows에 속해있는 이벤트로그 감시화면에 application로그를 출력한다.

 

FileAppender

파일에 로그를 출력한다간단하지만 파일크기가 너무 크게 될 가능성이 있기 때문에RollingFileAppender를 사용하는 것을 추천한다.

 

NetSendAppender

Messenger서비스에 동작하는 NetSend명령을 사용해서장해를 직접적으로 사용자에게 통지하는 것이 가능하다.

 

RollingFileAppender

파일의 로그를 출력한다파일크기와 시각에 의해 자동적으로 로그파일을 분활하는 것이 가능해이용이 많은 Appender이다.

 

SMTPAppender

메일송신을 한다. TO에 복수지정이 되지만,CC BCC의 지정이 되지않는다.

 

UdpAppender

UDP(user Datagram Protocol)에 로그를 출력한다. UDP 수신처는 log4j의 로그뷰어인Chainsaw 등을 지정할 수 있다.

 

ASPNetTraceAppender

ASP에서 사용 가능한 Appender이다.

 

Layout 설정

Log4net에서는 프로그램에서 기술한 메시지뿐만 아니라일시,레벨 등의 부가적인 정보도 합쳐서 출력할 수 있다.

<appender name="FileAppender" type="log4net.Appender.FileAppender">

    <param name="File" value="d:\myDev\log\log.log" />

    <param name="AppendToFile" value="true" />

    <layout type="log4net.Layout.PatternLayout">

      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />

    </layout>

  </appender>

 

PatternLayout으로 지정가능한 패턴

패턴

설명

%c

로그출력이  logger명을 출력

%C

Class를 출력

%d

일시를 출력%d{yyyy/mm/dd HH:mm:ss}」와 같은 상세설정도 가능

%F

파일명을 출력

%l

소스명이나행과 같은 호출한 위치를 출력

%L

행번호를 출력

%m

메시지를 출력

%M

메서드명을 출력

%n

개행문자를 출력

%p

로그의 레벨(Fatal/Error등)을 출력

%t

로그를 생성한 쓰레드를 출력

%x

쓰레드의 NDC(네스트화 진단 컨텍스트)를 출력.쓰레드고유의 정보(session ID)을 밀어넣는것이 가능

, %C%F%l%L%M 의 경우는 처리부하가 높아지기 때문에 필요할 때 이외는 사용하지 않도록 주의가 필요.

 

또한, Layout에는 SimpleLayout,XmlLayout등의 몇 개의 종류가 있기는 하지만대부분의 경우,로그 정리가 간단한 PatternLayout을 사용한다.

 

출력대상 logger를 설정

Log4net에서는 logger의 계층으로 로그출력을 제어하는 것이 가능하다.

 

Log4netSample
    ├ MyTeam
    │ └ MyProgram
    └ OtherTeam

 

 

<!—담당팀의 로그는 WARN이상을 출력. 파일에도 출력 -->
<logger name="Log4netSample.MyTeam">
    <level value="WARN" />
    <appender-ref ref="FileAppender" /> 
</logger>
 
<!—다른팀의 로그는 FATAL이상을 출력 -->
<logger name="Log4netSample.OtherTeam">
    <level value="FATAL" />
</logger>
        
<!—담당프로그램의 로그는 DEBUG이상을 출력 -->
<logger name="Log4netSample.MyTeam.MyProgram">
    <level value="DEBUG" />
</logger>

 

<logger>태그를 이용해서 logger의 계층별로 레벨과 Appender를 설정하는 것이 가능하다.

레벨설정은 <level>태그를 설정해서,appender설정은 <appender-ref>태그를 사용할 수 있다.

appender는 복수설정할 수 있어서하나의 로그메세지를 복수의 출력처에 송신하는 것도 가능하다.

 

Root의 설정

전체의 default가 되는 설정을 한다.

<root>
    <level value="ERROR" />
    <appender-ref ref="ConsoleAppender" />
</root>

 

로그출력의 default설정은 Root(logger계층의 최상위를 의미)라고 하고, <root>태그로 지정한다.

 

정리

1.      개발에서 운영까지 일관되게 사용가능

2.      로그의 출력처가 풍부(파일,메일,DB)

3.      동작중의 Application의 로그취득내용을 설정파일의 변경으로 동적으로 변경가능

4.      Open소스(Apache Logging Service)

신고
1 0