ServiceStack 4.5以编程方式配置log4net

时间:2016-09-28 16:40:42

标签: servicestack log4net

我正在使用ServiceStack 4.5开始一个新项目。有没有办法以编程方式配置log4net?在我找到的文档中

LogManager.LogFactory = new Log4NetFactory(configureLog4Net: true); 

我将它添加到AppHost类的构造函数中。但是,这似乎假设您将配置放到App.config文件中(我正在Windows服务上进行自托管)。

在其他一些项目中,我编写了一个单例,然后使用Log4Net API进行配置:

   private static void CreateFileAppender(ref Logger bedInventoryLogger, string logFilePath, Level logLevel, int maxFileSizeInMb, bool filterNh)
    {
        var filePatternLayout = new PatternLayout
        {
            ConversionPattern = "%date; [%thread]; %-5level; %logger; [%type{1}.%method]; - %message%newline"
        };
        filePatternLayout.ActivateOptions();
        var bediLogFileAppender = new RollingFileAppender
        {
            File = logFilePath,
            AppendToFile = true,
            MaximumFileSize = $"{maxFileSizeInMb}MB",
            MaxSizeRollBackups = 5,
            RollingStyle = RollingFileAppender.RollingMode.Size,
            LockingModel = new FileAppender.MinimalLock(),
            Layout = filePatternLayout,
            StaticLogFileName = true,
            Threshold = logLevel
        };
        if (filterNh)
        {
            bediLogFileAppender.AddFilter(new LoggerMatchFilter
            {
                LoggerToMatch = "NHibernate",
                AcceptOnMatch = false
            });
            bediLogFileAppender.AddFilter(new LoggerMatchFilter
            {
                LoggerToMatch = "NHibernate.SQL",
                AcceptOnMatch = false
            });
            bediLogFileAppender.AddFilter(new LoggerMatchFilter
            {
                LoggerToMatch = "FluentNHibernate",
                AcceptOnMatch = false
            });
        }
        bediLogFileAppender.ActivateOptions();
        bedInventoryLogger.AddAppender(bediLogFileAppender);
    }

由于我使用了几个日志,appender etd并且想要关闭NHibernate日志记录(我使用NHibernate 4作为ORM)等等。我发现在C#中进行配置比在XML中进行配置更方便。

是否可以将其与ServiceStack挂钩或者我是否可以直接使用Log4Net?

1 个答案:

答案 0 :(得分:3)

默认的ServiceStack Log4Net适配器不允许您注入已配置的Log4Net实例,但是适配器类很容易复制和修改,这些只是在这2个文件中,基本上只是将调用转发到Log4Net: