Can you configure log4net in code instead of using a config file?

后端 未结 6 1232
日久生厌
日久生厌 2020-11-28 01:20

I understand why log4net uses app.config files for setting up logging - so you can easily change how information is logged without needing to recompile your cod

6条回答
  •  佛祖请我去吃肉
    2020-11-28 01:47

    Alternatively you could create a custom attribute that inherits from log4net.Config.ConfiguratorAttribute and hard-code you configuration there:

    using log4net.Appender;
    using log4net.Config;
    using log4net.Core;
    using log4net.Layout;
    using log4net.Repository;
    using log4net.Repository.Hierarchy;
    using System;
    using System.Reflection;
    
    namespace ConsoleApplication1
    {
        [AttributeUsage(AttributeTargets.Assembly)]
        public class MyConfiguratorAttribute : ConfiguratorAttribute
        {
            public MyConfiguratorAttribute()
                : base(0)
            {
            }
    
            public override void Configure(Assembly sourceAssembly, ILoggerRepository targetRepository)
            {
                var hierarchy = (Hierarchy)targetRepository;
                var patternLayout = new PatternLayout();
                patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
                patternLayout.ActivateOptions();
    
                var roller = new RollingFileAppender();
                roller.AppendToFile = false;
                roller.File = @"Logs\EventLog.txt";
                roller.Layout = patternLayout;
                roller.MaxSizeRollBackups = 5;
                roller.MaximumFileSize = "1GB";
                roller.RollingStyle = RollingFileAppender.RollingMode.Size;
                roller.StaticLogFileName = true;
                roller.ActivateOptions();
                hierarchy.Root.AddAppender(roller);
    
                hierarchy.Root.Level = Level.Info;
                hierarchy.Configured = true;
            }
        }
    }
    

    Then add the following to a .cs file:

    [assembly: ConsoleApplication1.MyConfigurator]
    

提交回复
热议问题