【问题标题】:ServiceStack 4.5 configure log4net programmaticallyServiceStack 4.5 以编程方式配置 log4net
【发布时间】:2016-09-28 16:40:42
【问题描述】:

我正在使用 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);
    }

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

是否可以将其与 ServiceStack 挂钩,还是直接使用 Log4Net 更好?

【问题讨论】:

    标签: servicestack log4net


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      相关资源
      最近更新 更多