我有以下方法在log4net中获取日志文件的名称:
private string GetLogFile()
{
var repo = LogManager.GetRepository();
var fileAppender = repo.GetAppenders()
.OfType<FileAppender>().Single(fa => fa.Name == "LogFileAppender");
var logFile = fileAppender != null ? fileAppender.File : string.Empty;
return logFile;
}
当我在Windows服务中运行此代码时,此代码正常工作。但我被赋予了将日志记录移动到主Web应用程序的任务。所以我在Web应用程序中引用了log4net,移动了配置设置等等。但是现在当我运行相同的代码时,对GetAppenders()的调用会返回一个空列表。
这是我的配置:
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="\\MYSERVER\Temp\MYFiles\Log\Log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
我需要在网络应用版本中添加额外的一步吗?
答案 0 :(得分:1)
事实证明,Application_Start方法中的Global.asax.cs文件中缺少某些内容。我需要添加以下行:
log4net.Config.XmlConfigurator.Configure();
答案 1 :(得分:0)
您还需要在文件顶部调出其他配置部分,如下所示:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
</sectionGroup>
</configSections>
除了在log4net元素上面添加以下内容:
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net">
<arg key="configType" value="INLINE" />
</factoryAdapter>
</logging>
</common>
这假设您正在使用Common.Logging并且您没有使用独立配置文件(意味着配置在web.config中)。