- 2011/06/28 18:25
- www.venomi.pe.kr/3191513
- 덧글수 : 2
웹 Page 개발 또는 다른 응용프로그램 개발 시 Log을 남기는 형태가 대부분입니다.
(Exception이라던지 Error에 대한 기록 등등... 아니면 PG Transaction에 대한 기록 등등...)
이전에 단순히 Log파일을 기록하고 남기기만 했었는데...
시간이 지나면 상당한 용량으로 Log파일에 대한 고민을 하게 됩니다.
이전 회사에 Daemon Server에 대한 Log 기록하는 기능이 있었는데... 일정 시간이 지나면 새로운 로그 파일이 생성된는게 기억이 나더군요.
그래서 .Net 기반에서 그런 기능이 있을까 하고~ 찾던 와전에 log4net을 알게 되었습니다.
더구나 무척 다양한 기능에 제가 생각했던 Library 라는 점~!!!!
그리고 많은 Java개발자들이 사용한다는 점에 이미 검증되었다는 걸 알게 되었습니다.
그래서 이래저래 테스트를 해보았습니다. ^^
간단하게 Console App을 만들어 보겠습니다. ; )
1. 아래 그림과 같이 VisualStudio.Net에서 Console Application을 선택 후 이름과 위치를 지정합니다.
(저는 Log4Net_Sample 이름으로 지정하였습니다.)
2. VisualStudio.Net Tool에서 프로젝트를 생성하였다면, 참조에 다운받은 log4net.dll를 추가 합니다.
그리고 응용프로그램 구성 파일도 추가 합니다.
(log4net 다운로드는 이곳에서.... "http://logging.apache.org/")
3. App.Config 파일에 다음과 같이 코딩을 합니다.
(자세한 내용은 아래에서 설명을 하겠지만...^^)
4. Properties안에 AssemblyInfo.cs 파일을 열어 다음과 같이 코딩을 합니다.
5. Program.cs 부에 아래와 같이 코딩을 합니다.
해당 프로젝트를 Compile 후 실행하게 되면 해당 실행 파일 내에 다음과 같은 log 파일이 쌓이게 됩니다.
자~ 너무나 간단하게 Sample Console App를 만들게 되었습니다.
결과도 잘 나오는 편이고요~
여기서 우리가 잘 이해해야만 하는 부분이 있습니다.
바로 App.Config 파일인데요. log4net dll은 log4net.xml 을 동반하게 됩니다.
개발자가 log4net.xml 파일을 개발자 입맛에 수정할 수 있지만, Web이던 App던 .Config 파일에서 핸들링 하길 원할 것입니다.
오히려 유지보수 하기에도 간단하겠죠? 대부분이 Web.Config나 App.Config 파일에 DB Connection String까지 사용하니 말이죠.
원래는 코딩쪽에서 log4net.xml을 읽어 들여 log4net 설정을 하는편이지만 전 App.Config에 정하였습니다.
이를 위해 Properties=>AssemblyInfo.cs에 Step4에 설명한 것과 같이 추가를 한 것이랍니다.
( 이해가 되나요? 이해가 안된다면 ㅡㅡ;;;; )
그럼 다시 App.Config를 바라 봅시다~!!!
<log4net> 테크 안에 <root>테그가 보일 것입니다.
여기에 Level이 지정되어 있는데요.
Web이나 App에서 Debug또는 Exception등을 Capture하여 Log파일에 기록을 할 수 있습니다.
Option이 상당히 많이 있다는 것을 알수 있습니다.
(Options are "ALL", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" and "OFF".)
전 ALL로 지정을 하였고, 자신이 개발한 App또는 Web 기능이 완벽하다면 주로 INFO또는 ERROR 만 사용하게 됩니다.
log4net핵심이 바로 Appender 입니다.
이 기능이 생각보다 많이 있습니다.
(자세한 내용은 이쪽에서 참고 하세요~!!! "http://logging.apache.org/log4net/release/config-examples.html")
로그 정보를 파일 또는 메일로 발송할 수 있고, EventLog에도 기록을 할 수 있고, 또 DB에도 기록할 수 있습니다.
왠지 메일 발송하는 기능이 꽤~! 매력적이라 할 수 있겠습니다. (으흠~ 에러 메일이 쭈욱쭈욱 날라오겠지요?)
제가 원하는 것은 1분마다 로그파일을 기록하고 새롭운 파일에 이어서 저장하는 걸 원했습니다.
(Daemon때문에 ㅡㅡ;;;; )
그래서 다음과 같이 설정을 하였습니다.
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logfile" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<datePattern value="_yyyyMMddHHmm".log""/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level %logger %date{ISO8601} - %message%newline"/>
</layout>
</appender>
최초 logfile 이란 파일이 생성이 되면서 실시간으로 기록을 하게 됩니다.
RollingStyle을 Date로 지정함으로 인해 1분이 지나면 "logfile_yyyyMMddHHmm.log" 파일로 남게되고 이어서 다시 logfile에 기록을 하게 됩니다.
Transaction이 그리 많이 일어나지 않는다면 "DatePattern" 부를 _yyyyMMdd".log" 로 지정하여 일별로 저장 할 수 있게 됩니다.
(전 1분 단위로 지정했는데... 이게 초까지는 안되더군요. ㅡ.ㅡ)
그외 다양한 옵션이 있는데 제가 원하는 옵션인지라 이렇게 사용이 되었고, 웹에서 Exception을 처리한다면 Log 파일보단 SMTP를 이용하여 메일로 발송하는 기능이 적절하지 않을 까 하는 생각을 하게 되네요. ^^
(예전에 왜 Exception날때 메일 보내는 로직을 따로 만들었을까? ㅡ.ㅡ)
역시 구글에서 이래저래 자료를 찾아보면 좋은 내용들이 많이 있단 생각을 해보게 됩니다. ; )
'[ Program ] > C#' 카테고리의 다른 글
데이터베이스 연결 (0) | 2012.09.17 |
---|---|
C# Random Class 사용하기 (0) | 2012.09.14 |
WCF Configuration ( Appconfig 스키마 구성표) (0) | 2012.09.14 |
C#에서 log4net 사용하기 (0) | 2012.09.11 |
NET & C# 에서 log4net 사용하기 (0) | 2012.09.11 |
댓글