동적으로 변화하는 값을 기반으로 로그 폴더를 만들고 로그 파일을 생성하고자 할때 log4net 설정 파일 기본값을 상속받아서 처리하는 것도 가능하지만 개별 폴더별로 독립적으로 처리하고자 하는 것에 대한 예제가 쉽게 찾아지지 않는다.
동적으로 새롭게 롤러를 만들어 새로운 로거에 연결해 로거를 Dictionary로 관리할 수 있는 함수를 작성했다.
Dictionary<string, ILog> loggerDic = new Dictionary<string, ILog>();
/// <summary>
/// 사용자 정의 로그 파일 만들기
/// rname : 롤러 이름(로그파일prefix)
/// path : 로그 파일이 저장될 폴더 경로
/// level : 로그 레벨
/// </summary>
public void NewRollerSetup(string rname, string path, string level)
{
if (loggerDic.ContainsKey(rname))
return;
// New Repository
Hierarchy hierarchy = (Hierarchy)log4net.LogManager.CreateRepository(rname);
// Create logger
var tlogger = hierarchy.LoggerFactory.CreateLogger((ILoggerRepository)hierarchy, rname);
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date{HH:mm:ss,fff} [%-5level] %message%newline";
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.DatePattern = "'_'yyyy-MM-dd'.log'";
roller.File = path + rname ;
roller.Layout = patternLayout;
// file 용량에 따라 생성되는 파일 갯수
roller.MaxSizeRollBackups = 5;
roller.MaximumFileSize = "1MB";
roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
// 날짜 별로 변경 시 false
roller.StaticLogFileName = false;
roller.ActivateOptions();
switch(level.ToLower())
{
case "info":
tlogger.Level = Level.Info;
break;
case "debug":
tlogger.Level = Level.Debug;
break;
case "warn":
tlogger.Level = Level.Warn;
break;
case "fatal":
tlogger.Level = Level.Fatal;
break;
}
tlogger.Hierarchy = hierarchy;
tlogger.AddAppender(roller);
tlogger.Repository.Configured = true;
// Add Dictionary
loggerDic.Add(rname, new LogImpl(tlogger));
}
'C#' 카테고리의 다른 글
OPC DA Client (with TitaniumAS) - 01. Basic Tamplete (0) | 2022.10.28 |
---|---|
[WPF] 사용자 정의 컨트롤(UserControl)을 코드에서 사용하기 (0) | 2021.02.02 |
C# RTSP 관련 오픈소스 (0) | 2020.04.20 |
C# OPC DA - opcdaauto.dll 사용기 (0) | 2019.07.04 |
Tray Icon(트레이 아이콘) 등록 간단 정리 (0) | 2016.07.18 |