ServiceStack 4.5 以编程方式配置 log4net
ServiceStack 4.5 configure log4net programmatically
我正在使用 ServiceStack 4.5 开始一个新项目。有没有办法以编程方式配置 log4net?在我找到的文档中
LogManager.LogFactory = new Log4NetFactory(configureLog4Net: true);
我将其添加到 AppHost 的构造函数中 class。然而,这似乎假设您将配置放入 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 适配器不允许您注入已配置的 Log4Net 实例,但是适配器 类 很容易复制和修改,这两个文件基本上只是将调用转发给 Log4Net :
我正在使用 ServiceStack 4.5 开始一个新项目。有没有办法以编程方式配置 log4net?在我找到的文档中
LogManager.LogFactory = new Log4NetFactory(configureLog4Net: true);
我将其添加到 AppHost 的构造函数中 class。然而,这似乎假设您将配置放入 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 适配器不允许您注入已配置的 Log4Net 实例,但是适配器 类 很容易复制和修改,这两个文件基本上只是将调用转发给 Log4Net :