동적으로 변화하는 값을 기반으로 로그 폴더를 만들고 로그 파일을 생성하고자 할때 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));
        }

 

Posted by 휘프노스
,