[ log4net ]c# log4net 사용법 : 콘솔과 파일 로그 출력
log4net 은 c# 에서 사용하는 로그 라이브러리로,
따로 코드정리 하지 않고 log4net 을 사용해서 쉽게 로그를 남길 수 있다
log4net은 콘솔, 디비, 파일, 이메일 등 여러 곳에 로그를 출력 시킬 수 있는데 콘솔과 파일만 다뤄봄
먼저, Nuget 패키지관리에서 log4net 설치!
Appender
로그 출력을 위해서 Appender로 어떤 형식(콘솔, 파일 , .. )으로 로그를 출력할지 정함
// 콘솔 출력
<appender name="Console" type="log4net.Appender.ConsoleAppender">
</appender>
// 파일 출력 -> rolling file
<appender name="RollingfileAppender" type="log4net.Appender.RollingfileAppender">
...
</appender>
// 파일 출력 -> file
<appender name="FileAppender" type="log4net.Appender.FileAppender">
...
</appender>
파일과 롤링 파일의 차이점은
롤링 파일은 파일 크기가 max 사이즈 초과 시, 자동으로 파일을 분할하지만
파일 은 제한없이 파일 크기가 커질수도 있다
각 Appender 안에는 여러 옵션들을 지정 할 수 있다
파일의 경우
<appender name = " " type = " "/> | 이름과 타입 설정 |
<File value = " "/> | 파일 경로 및 파일명 |
<rollingStyle value = " "/> | size : 파일이 특정 크기 위반시 롤링 |
date : 현재 날짜 기준으로 로그 파일 롤링 | |
composite : 크기 제한 및 현재 날짜 따라 롤링 | |
once log4net 초기화 될때마다(어플 시작시) 롤링 | |
<appendToFile value = "true" /> | 로그 파일 추가할지 or 덮어 쓰기 할지 |
<maxSizeRollBackups value ="100"/> | 최대 생성되는 파일 개수 설정 여기서는 최대 파일 개수 100개 |
<maximumFileSize value = "100MB"/> | 파일이 100MB 를 초과하면 새 롤링 파일 만듦 |
<layout type = ""> <conversionPattern value="%d %-5p - %m%n" /> </layout> |
로그에 남길 패턴을 설정한다. |
로그 레벨
로그 레벨을 지정하게 되면 레벨 이상의 로그만 쓰여짐.
(fatal > error > warn > info > debug)
Appender 안에 filter 를 이용해서 사용하면 각 레벨에 해당하는 로그 파일만 남길 수 있다.
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
결과적으로,
ERROR 와 WARNNING 메세지만 파일형태로 로그를 남기것이고 파일이 100개 이상이 넘지 않도록 하겠다 하면 아래와 같이 작성하면 된다.
<appender name="RollingfileAppender" type="log4net.Appender.RollingfileAppender">
<File type="log4net.Util.PatternString" value="log/logging"/>
<param name="AppendToFile" value="true"/>
<datePattern value="yyyyMMdd'.log'" />
<rollingStyle value="Date"/>
<staticLogFileName value="false"/>
<maxSizeRollBackups value ="100"/>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="WARN" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
</appender>
<logger additivity="false" name="class name">
<level value="ALL"/>
<appender-ref ref="RollingfileAppender" />
</logger>
콘솔 로그를 남기고 싶으면,
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date : %message %newline"/>
</layout>
</appender>
<logger additivity="false" name="class name">
<level value="ALL"/>
<appender-ref ref="ConsoleAppender" />
</logger>
한번에 콘솔과 파일 로그를 같이 남기고 싶으면, 두개다 써주면 된다
<logger additivity="false" name="class name">
<level value="ALL"/>
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingfileAppender" />
</logger>
그리고 나서, 사용할 클래스로 가서
LogManager.GetLogger(typeof(class명)) or
system.Reflection.MethodBase.GetCurrentMethod().DeclaringType 로 호출하고 사용하면 됨.
class Test
{
//private static readonly ILog log = LogManager.GetLogger (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType) ;
private static ILog log = LogManager.GetLogger(typeof(Test));
public Test()
{
...
log.Error("Error log");
}
}
또한 프로젝트에서 환경 설정 파일 읽어올 수 있도록 ,
AssemblyInfo.cs 파일에 [assembly: log4net.Config.XmlConfigurator(Watch = true)] 추가
(App.Config 파일에 써도 되지만 log4net.Config 새로 하나 만들어서 사용)
출력 디렉터리에 항상 복사 옵션 설정 해 줌.
끗