Exemplo n.º 1
0
        private RollingFileAppender CreateAppender(string appenderName, string fileName, ComonLog.LogLevel logLevel)
        {
            PatternLayout layout = new PatternLayout();

            layout.ConversionPattern = "%d %-5p  %m%n";
            layout.ActivateOptions();

            RollingFileAppender appender = new RollingFileAppender();

            appender.Layout = layout;

            appender.Name = appenderName;
            appender.File = fileName;

            appender.RollingStyle = RollingFileAppender.RollingMode.Composite;
            //appender.Encoding = Encoding.Unicode;
            appender.AppendToFile                 = true;
            appender.MaximumFileSize              = "4MB";
            appender.MaxSizeRollBackups           = 100;
            appender.DatePattern                  = "yyyy-MM-dd";
            appender.PreserveLogFileNameExtension = true;
            appender.StaticLogFileName            = false;
            appender.Threshold = FileAppenderHelper.ConvertLogLevel(logLevel);

            log4net.Filter.LevelRangeFilter levfilter = new log4net.Filter.LevelRangeFilter();
            levfilter.LevelMax = appender.Threshold;
            levfilter.LevelMin = appender.Threshold;
            levfilter.ActivateOptions();

            appender.AddFilter(levfilter);

            appender.ActivateOptions();

            return(appender);
        }
Exemplo n.º 2
0
        private static ILog ConfigureLog()
        {
            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(Assembly.GetEntryAssembly());

            hierarchy.Root.RemoveAllAppenders();

            PatternLayout patternLayout = new PatternLayout();

            patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
            patternLayout.ActivateOptions();

            ConsoleAppender consoleErrAppender = new ConsoleAppender();

            consoleErrAppender.Layout = patternLayout;
            consoleErrAppender.ActivateOptions();
            consoleErrAppender.Target = "Console.Error";
            log4net.Filter.LevelRangeFilter errfilter = new log4net.Filter.LevelRangeFilter();
            errfilter.LevelMin = Level.Verbose;
            errfilter.LevelMax = Level.Emergency;
            consoleErrAppender.AddFilter(errfilter);
            hierarchy.Root.AddAppender(consoleErrAppender);

            hierarchy.Root.Level = Level.Info;
            if (verbosity >= 1)
            {
                hierarchy.Root.Level = Level.Debug;
            }
            hierarchy.Configured = true;

            BasicConfigurator.Configure(hierarchy, new ConsoleAppender[] { consoleErrAppender });

            return(LogManager.GetLogger(typeof(MainClass)));
        }
Exemplo n.º 3
0
        public static ILog CreateFileLogger(String name, String path)
        {
            ///LevelRangeFilter
            log4net.Filter.LevelRangeFilter levfilter = new log4net.Filter.LevelRangeFilter();
            levfilter.LevelMax = log4net.Core.Level.Fatal;
            levfilter.LevelMin = log4net.Core.Level.Error;
            levfilter.ActivateOptions();
            //Appender1
            log4net.Appender.FileAppender appender1 = new log4net.Appender.FileAppender();
            appender1.AppendToFile   = true;
            appender1.File           = path + name + ".log";
            appender1.ImmediateFlush = true;
            appender1.LockingModel   = new log4net.Appender.FileAppender.MinimalLock();
            appender1.Name           = name + "FileAppender";
            appender1.AddFilter(levfilter);

            //Appender2
            //log4net.Appender.ConsoleAppender appender2 = new log4net.Appender.ConsoleAppender();
            //appender2.Name = name + "ConsoleAppender";
            //appender2.AddFilter(levfilter);

            log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout("%date [%thread] %-5level - %message%newline");
            layout.ActivateOptions();

            appender1.Layout = layout;
            appender1.ActivateOptions();
            //appender2.Layout = layout;
            //appender2.ActivateOptions();

            //log4net.Repository.ILoggerRepository repository = null;
            //log4net.Repository.ILoggerRepository[] repositories = log4net.LogManager.GetAllRepositories();
            //if (repositories != null)
            //   repository = repositories.FirstOrDefault(x => x.Name == "DynamicRepository");
            //if (repository == null)
            //    repository = log4net.LogManager.CreateRepository("DynamicRepository");

            log4net.Config.BasicConfigurator.Configure(appender1);
            //log4net.Config.BasicConfigurator.Configure(repository, appender1);
            //log4net.Config.BasicConfigurator.Configure(repository, appender2);

            //((log4net.Repository.Hierarchy.Hierarchy)repository).Root.Level = log4net.Core.Level.Info;
            ((log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository()).Root.AddAppender(appender1);


            ILog logger = log4net.LogManager.GetLogger(name);

            return(logger);
        }
Exemplo n.º 4
0
        private static ILog getDefaultLogger(String name)
        {
            ILog r = LogManager.GetCurrentLoggers().SingleOrDefault(x => x.Logger.Name == name);

            if (r != null)
            {
                return(r);
            }

            Hierarchy hierarchy = (Hierarchy)r;

            log4net.Appender.ColoredConsoleAppender appender = new
                                                               log4net.Appender.ColoredConsoleAppender();
            appender.Name = name;

            log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout();
            layout.ConversionPattern = "%-4timestamp [%thread] %-5level %logger %ndc - %message%newline";
            layout.ActivateOptions();

            appender.Layout = layout;

            log4net.Filter.LevelRangeFilter filter = new log4net.Filter.LevelRangeFilter();
            filter.LevelMax = log4net.Core.Level.Fatal;
            filter.LevelMin = log4net.Core.Level.Debug;

            appender.AddFilter(filter);
            appender.ActivateOptions();

            hierarchy.Root.AddAppender(appender);

            hierarchy.Root.Level = log4net.Core.Level.All;
            hierarchy.Configured = true;

            DummyLogger dummyILogger = new DummyLogger(name);

            dummyILogger.Hierarchy = hierarchy;
            dummyILogger.Level     = log4net.Core.Level.All;

            dummyILogger.AddAppender(appender);

            return(new log4net.Core.LogImpl(dummyILogger));;
        }
Exemplo n.º 5
0
        private static log4net.Filter.LevelRangeFilter GetLevelRangeFilter(AppenderSkeleton appender)
        {
            log4net.Filter.LevelRangeFilter rangeFilter = null;

            lock (appender)
            {
                log4net.Filter.IFilter filterHead = appender.FilterHead;

                //process through the filters until a level range filter is found
                while (filterHead != null)
                {
                    if (typeof(log4net.Filter.LevelRangeFilter).Equals(filterHead.GetType()))
                    {
                        rangeFilter = filterHead as log4net.Filter.LevelRangeFilter;
                        break;
                    }

                    filterHead = filterHead.Next;
                }
            }
            return(rangeFilter);
        }
Exemplo n.º 6
0
        public void FilterLogLevel()
        {
            FakeAWSAppender awsAppender;
            ILog            logger;
            Hierarchy       hierarchy     = (Hierarchy)LogManager.GetRepository();
            PatternLayout   patternLayout = new PatternLayout();

            patternLayout.ConversionPattern = "%-4timestamp [%thread] %-5level %logger %ndc - %message%newline";
            patternLayout.ActivateOptions();

            awsAppender        = new FakeAWSAppender();
            awsAppender.Layout = patternLayout;

            var filter = new log4net.Filter.LevelRangeFilter();

            filter.LevelMax = Level.Fatal;
            filter.LevelMin = Level.Warn;
            awsAppender.AddFilter(filter);

            awsAppender.ActivateOptions();

            hierarchy.Root.AddAppender(awsAppender);

            hierarchy.Root.Level = Level.All;
            hierarchy.Configured = true;
            logger = LogManager.GetLogger("FilterLogLevel");

            logger.Debug("debug");
            logger.Info("information");
            logger.Warn("warning");
            logger.Error("error");
            logger.Fatal("fatal");

            Assert.Equal(3, awsAppender._core.ReceivedMessages.Count);
            Assert.True(awsAppender._core.ReceivedMessages.ElementAt(0).Contains("warning"));
            Assert.True(awsAppender._core.ReceivedMessages.ElementAt(1).Contains("error"));
            Assert.True(awsAppender._core.ReceivedMessages.ElementAt(2).Contains("fatal"));
        }
Exemplo n.º 7
0
        /// <summary>
        /// 创建高级Appender
        /// ERROR、FATAL两个级别的输出
        /// </summary>
        /// <returns></returns>
        private static IAppender CreateFileAppender()
        {
            log4net.Filter.LevelRangeFilter levfilter = new log4net.Filter.LevelRangeFilter();
            levfilter.LevelMax = log4net.Core.Level.Fatal;
            levfilter.LevelMin = log4net.Core.Level.Error;
            levfilter.ActivateOptions();
            RollingFileAppender appender = new RollingFileAppender();

            appender.AddFilter(levfilter);
            appender.Name              = "errorAppender";
            appender.File              = "SDK_Logs//Error//";
            appender.AppendToFile      = true;
            appender.RollingStyle      = RollingFileAppender.RollingMode.Date;
            appender.DatePattern       = "yyyy-MM-dd\".txt\"";
            appender.StaticLogFileName = false;
            appender.LockingModel      = new FileAppender.MinimalLock();
            log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout();
            layout.ConversionPattern = "【日志级别】%-5level %n【记录时间】%date{HH:mm:ss,fff}  %n【描    述】%message %n %n";
            layout.ActivateOptions();
            appender.Layout = layout;
            appender.ActivateOptions();
            return(appender);
        }
Exemplo n.º 8
0
        static log4net.Appender.RollingFileAppender GetFileAppender(string name, log4net.Core.Level max, log4net.Core.Level min)
        {
            //设置过滤器
            log4net.Filter.LevelRangeFilter _levfilter = new log4net.Filter.LevelRangeFilter();
            _levfilter.LevelMax = max;
            _levfilter.LevelMin = min;
            _levfilter.ActivateOptions();

            //设计记录格式
            log4net.Layout.PatternLayout _layout = new log4net.Layout.PatternLayout("%date [%thread] %-5level - %message%newline");

            //Appender1
            log4net.Appender.RollingFileAppender _appender = new log4net.Appender.RollingFileAppender();
            //设置本Appander的名称
            _appender.Name = m_initTime.ToString("HHmmss") + "." + name + ".Appender";
            _appender.File = GetLogSavePath() + name + ".log";
            //否追加到文件
            _appender.AppendToFile       = true;
            _appender.MaxSizeRollBackups = 10;
            //日志文件名是否为静态
            _appender.StaticLogFileName = true;
            //_appender.DatePattern = "";
            //表示是否立即输出到文件,布尔型的。
            //_appender.ImmediateFlush
            //SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
            //LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock

            _appender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Date;
            //_appender.LockingModel = new log4net.Appender.FileAppender.MinimalLock();

            _appender.Layout = _layout;
            _appender.AddFilter(_levfilter);
            _appender.ActivateOptions();

            return(_appender);
        }
Exemplo n.º 9
0
        private Instance()
        {
            string AppDataPath = T1.Log.Settings._Main.logFolder;

            try
            {
                Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

                PatternLayout patternLayout = new PatternLayout();
                patternLayout.ConversionPattern = T1.Log.Settings._Main.pattern;
                patternLayout.ActivateOptions();

                RollingFileAppender roller = new RollingFileAppender();
                roller.AppendToFile       = false;
                roller.File               = AppDataPath + T1.Log.Settings._Main.masterLogName;
                roller.Layout             = patternLayout;
                roller.MaxSizeRollBackups = Settings._Main.numberOfLogs;
                roller.MaximumFileSize    = T1.Log.Settings._Main.masterSize;
                roller.RollingStyle       = RollingFileAppender.RollingMode.Size;
                roller.AppendToFile       = true;
                log4net.Filter.LevelRangeFilter filter = new log4net.Filter.LevelRangeFilter();
                filter.LevelMin = log4net.Core.Level.Error;
                filter.ActivateOptions();
                roller.AddFilter(filter);
                roller.ActivateOptions();
                hierarchy.Root.AddAppender(roller);
                hierarchy.Configured = true;
            }
            catch (Exception er)
            {
                using (StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\FatalLogError.log", true))
                {
                    sw.WriteLine(er.Message);
                }
            }
        }
        ILog ConfigureLog()
        {
            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
            hierarchy.Root.RemoveAllAppenders();

            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
            patternLayout.ActivateOptions();

            ConsoleAppender consoleErrAppender = new ConsoleAppender();
            consoleErrAppender.Layout = patternLayout;
            consoleErrAppender.ActivateOptions();
            consoleErrAppender.Target = "Console.Error";
            log4net.Filter.LevelRangeFilter errfilter = new log4net.Filter.LevelRangeFilter();
            errfilter.LevelMin = Level.Verbose;
            errfilter.LevelMax = Level.Emergency;
            consoleErrAppender.AddFilter(errfilter);
            hierarchy.Root.AddAppender(consoleErrAppender);

            hierarchy.Root.Level = Level.Info;
            if (verbose == true)
            {
                hierarchy.Root.Level = Level.Debug;
            }
            hierarchy.Configured = true;

            BasicConfigurator.Configure(new ConsoleAppender[] { consoleErrAppender });

            return LogManager.GetLogger(typeof(OpenSearchClient));
        }
Exemplo n.º 11
0
        public static log4net.Appender.IAppender CreateFileAppender(string name, string fileName, string levelName)
        {
            log4net.Appender.RollingFileAppender appender = new
                                                            log4net.Appender.RollingFileAppender();
            appender.Name               = name + Settings._Main.appenderSufix;
            appender.File               = Settings._Main.logFolder + fileName + ".log";
            appender.AppendToFile       = true;
            appender.RollingStyle       = log4net.Appender.RollingFileAppender.RollingMode.Size;
            appender.MaxSizeRollBackups = 5;
            appender.MaximumFileSize    = Settings._Main.masterSize;
            appender.CountDirection     = 1;

            log4net.Layout.PatternLayout layout = new
                                                  log4net.Layout.PatternLayout();
            layout.ConversionPattern = Settings._Main.pattern;
            layout.ActivateOptions();

            log4net.Filter.LevelRangeFilter filter = new log4net.Filter.LevelRangeFilter();
            switch (levelName)
            {
            case "All":
                filter.LevelMin = log4net.Core.Level.All;
                break;

            case "Alert":
                filter.LevelMin = log4net.Core.Level.Alert;
                break;

            case "Debug":
                filter.LevelMin = log4net.Core.Level.Debug;
                break;

            case "Critical":
                filter.LevelMin = log4net.Core.Level.Critical;
                break;

            case "Error":
                filter.LevelMin = log4net.Core.Level.Error;
                break;

            case "Fatal":
                filter.LevelMin = log4net.Core.Level.Fatal;
                break;

            case "Info":
                filter.LevelMin = log4net.Core.Level.Info;
                break;

            case "Warn":
                filter.LevelMin = log4net.Core.Level.Warn;
                break;

            default:
                filter.LevelMin = log4net.Core.Level.All;
                break;
            }



            filter.ActivateOptions();

            appender.Layout = layout;
            appender.AddFilter(filter);

            appender.ActivateOptions();

            return(appender);
        }
Exemplo n.º 12
0
        /// <summary>
        /// This method is used to set up the log4net configuration files that will log the application.
        /// </summary>
        /// <param name="fileName">The name of the informatoin file.</param>
        private static void Setup(string fileName)
        {
            string logFilePath = "../../../Logs/";

            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

            PatternLayout patternLayoutTC = new PatternLayout();

            patternLayoutTC.ConversionPattern = "%date [%level] - %message%newline";
            patternLayoutTC.ActivateOptions();

            RollingFileAppender testCaseRoller = new RollingFileAppender();

            testCaseRoller.AppendToFile       = false;
            testCaseRoller.File               = string.Format("{0}logfile-{1}-{2}.log", logFilePath, fileName, DateTime.Now.ToString("HHmm-MMdd-yyyy"));
            testCaseRoller.Layout             = patternLayoutTC;
            testCaseRoller.DatePattern        = "HH-MMdd-yyyy";
            testCaseRoller.MaxSizeRollBackups = -1;
            testCaseRoller.MaximumFileSize    = "1MB";
            testCaseRoller.RollingStyle       = RollingFileAppender.RollingMode.Composite;

            var filterTC = new log4net.Filter.LevelRangeFilter
            {
                LevelMin = Level.Debug,
                LevelMax = Level.Warn
            };

            testCaseRoller.AddFilter(filterTC);
            testCaseRoller.ActivateOptions();
            hierarchy.Root.AddAppender(testCaseRoller);


            PatternLayout ErrorPatternLayout = new PatternLayout();

            ErrorPatternLayout.ConversionPattern = "%date [%level] %logger - message: %message%newline%newline";
            ErrorPatternLayout.ActivateOptions();

            FileAppender ErrorFiles = new FileAppender();

            ErrorFiles.File         = string.Format("{0}ErrorLogFile.log", logFilePath);
            ErrorFiles.AppendToFile = true;
            ErrorFiles.LockingModel = new FileAppender.MinimalLock();
            ErrorFiles.Layout       = ErrorPatternLayout;

            var filter = new log4net.Filter.LevelRangeFilter
            {
                LevelMin = Level.Error,
                LevelMax = Level.Fatal
            };

            ErrorFiles.AddFilter(filter);
            ErrorFiles.ActivateOptions();
            hierarchy.Root.AddAppender(ErrorFiles);

            MemoryAppender memory = new MemoryAppender();

            memory.ActivateOptions();
            hierarchy.Root.AddAppender(memory);

            hierarchy.Root.Level = Level.All;
            hierarchy.Configured = true;
        }
Exemplo n.º 13
0
        public static log4net.Appender.IAppender CreateFileAppender(string name, string fileName, string levelName)
        {
            string AppDataPath = T1.Log.Settings._Main.logFolder;


            log4net.Appender.RollingFileAppender appender = new
                                                            log4net.Appender.RollingFileAppender();
            try {
                appender.Name               = name + T1.Log.Settings._Main.appenderSufix;
                appender.File               = AppDataPath + fileName + ".log";
                appender.AppendToFile       = true;
                appender.RollingStyle       = log4net.Appender.RollingFileAppender.RollingMode.Size;
                appender.MaxSizeRollBackups = Settings._Main.numberOfLogs;
                appender.MaximumFileSize    = T1.Log.Settings._Main.masterSize;
                appender.CountDirection     = 1;

                log4net.Layout.PatternLayout layout = new
                                                      log4net.Layout.PatternLayout();
                layout.ConversionPattern = T1.Log.Settings._Main.pattern;
                layout.ActivateOptions();

                log4net.Filter.LevelRangeFilter filter = new log4net.Filter.LevelRangeFilter();
                switch (levelName)
                {
                case "All":
                    filter.LevelMin = log4net.Core.Level.All;
                    break;

                case "Alert":
                    filter.LevelMin = log4net.Core.Level.Alert;
                    break;

                case "Debug":
                    filter.LevelMin = log4net.Core.Level.Debug;
                    break;

                case "Critical":
                    filter.LevelMin = log4net.Core.Level.Critical;
                    break;

                case "Error":
                    filter.LevelMin = log4net.Core.Level.Error;
                    break;

                case "Fatal":
                    filter.LevelMin = log4net.Core.Level.Fatal;
                    break;

                case "Info":
                    filter.LevelMin = log4net.Core.Level.Info;
                    break;

                case "Warn":
                    filter.LevelMin = log4net.Core.Level.Warn;
                    break;

                default:
                    filter.LevelMin = log4net.Core.Level.All;
                    break;
                }



                filter.ActivateOptions();

                appender.Layout = layout;
                appender.AddFilter(filter);

                appender.ActivateOptions();
            }
            catch (Exception er)
            {
                using (StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\FatalLogError.log", true))
                {
                    sw.WriteLine(er.Message);
                }
            }

            return(appender);
        }
Exemplo n.º 14
0
            /// <summary>
            /// Setup Log4net in code. <para>*Time to get rid of Config.xml hah?</para>
            /// </summary>
            public override void Configure(Assembly sourceAssembly, ILoggerRepository targetRepository)
            {
                Hierarchy hierarchy = (Hierarchy)targetRepository;

                //Universal layout pattern.
                PatternLayout patternLayout = new PatternLayout();

                //patternLayout.Header = "[task time=%date{HH:mm:ss,fff}]%newline";
                //patternLayout.Footer = "[/task]%newline";
                patternLayout.ConversionPattern = @"%-5level %date{yyyy/MM/dd_HH:mm:ss,fff} [%thread]] - %message%newline";
                patternLayout.ActivateOptions();

                log4net.Filter.LevelRangeFilter rangeFilter = new log4net.Filter.LevelRangeFilter
                {
                    LevelMax = Level.Fatal,
                    LevelMin = Level.Info
                };
                rangeFilter.ActivateOptions();

                //MainLogger.(in log4net root)
                RollingFileAppender mainRoller = new RollingFileAppender
                {
                    AppendToFile       = true,                                 //Save all log to the same file.
                    RollingStyle       = RollingFileAppender.RollingMode.Date, //Make a new log file every day.
                    File               = @"logs\mainlog.log",
                    Layout             = patternLayout,
                    LockingModel       = new FileAppender.MinimalLock(),
                    MaxSizeRollBackups = 10,
                    MaximumFileSize    = "1000KB",
                    StaticLogFileName  = true
                };

                mainRoller.AddFilter(rangeFilter); //don't know what this does. I think I should put it here anyway.
                mainRoller.ActivateOptions();
                hierarchy.Root.AddAppender(mainRoller);

                hierarchy.Root.Level = Level.All;
                hierarchy.Name       = "MainLogs";
                hierarchy.Configured = true;


                //Uploader Logger.
                RollingFileAppender UploadRoller = new RollingFileAppender
                {
                    AppendToFile       = true,
                    RollingStyle       = RollingFileAppender.RollingMode.Date,
                    File               = @"logs\Uploader.log",
                    Layout             = patternLayout,
                    MaxSizeRollBackups = 10,
                    MaximumFileSize    = "1GB",
                    StaticLogFileName  = true
                };

                UploadRoller.AddFilter(rangeFilter);
                UploadRoller.ActivateOptions();
                //Add make a new logger that use this config.
                ILog _uploadLogger = LogManager.GetLogger("UploaderLogs");
                var  uploadLogger  = (Logger)_uploadLogger.Logger;

                uploadLogger.Level = Level.All;
                uploadLogger.AddAppender(UploadRoller);
                uploadLogger.Repository.Configured = true;

                //Ohter logs will all go here.
                RollingFileAppender OtherLogs = new RollingFileAppender
                {
                    AppendToFile       = true,
                    RollingStyle       = RollingFileAppender.RollingMode.Date,
                    File               = @"logs\Others.log",
                    Layout             = patternLayout,
                    LockingModel       = new FileAppender.MinimalLock(), //this should allow mutiple instances writing to same file.
                    MaxSizeRollBackups = 10,
                    MaximumFileSize    = "1GB",
                    StaticLogFileName  = true
                };

                OtherLogs.AddFilter(rangeFilter);
                OtherLogs.ActivateOptions();

                ILog _otherLogger = LogManager.GetLogger("OtherLogs");
                var  otherLogger  = (Logger)_otherLogger.Logger;

                otherLogger.Level = Level.All;
                otherLogger.AddAppender(OtherLogs);
                otherLogger.Repository.Configured = true;
            }
Exemplo n.º 15
0
        private RollingFileAppender CreateAppender(string appenderName, string fileName, ComonLog.LogLevel logLevel)
        {
            PatternLayout layout = new PatternLayout();
            layout.ConversionPattern = "%d %-5p  %m%n";
            layout.ActivateOptions();

            RollingFileAppender appender = new RollingFileAppender();
            appender.Layout = layout;

            appender.Name = appenderName;
            appender.File = fileName;

            appender.RollingStyle = RollingFileAppender.RollingMode.Composite;
            //appender.Encoding = Encoding.Unicode;
            appender.AppendToFile = true;
            appender.MaximumFileSize = "4MB";
            appender.MaxSizeRollBackups = 100;
            appender.DatePattern = "yyyy-MM-dd";
            appender.PreserveLogFileNameExtension = true;
            appender.StaticLogFileName = false;
            appender.Threshold = FileAppenderHelper.ConvertLogLevel(logLevel);

            log4net.Filter.LevelRangeFilter levfilter = new log4net.Filter.LevelRangeFilter();
            levfilter.LevelMax = appender.Threshold;
            levfilter.LevelMin = appender.Threshold;
            levfilter.ActivateOptions();

            appender.AddFilter(levfilter);

            appender.ActivateOptions();

            return appender;
        }