我正在尝试使用重写的XmlLayoutBase和log4net来打印自定义日志。它昨天工作,但我做了一些重组,现在它正在爆炸。这是我到目前为止所做的。
AssemblyInfo.cs
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
CustomXmlLayout.cs
namespace MyCompany.MyProduct.MyService.Utilities
public class CustomXmlLayout : XmlLayoutBase
{
protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent)
{
//Write stuff
}
}
log4net.config
<?xml version="1.0"?>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logfile" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd'.xml'" />
<staticLogFileName value="false" />
<maxSizeRollbackups value="15" />
<layout type="MyCompany.MyProduct.MyService.Utilities.CustomXmlLayout" />
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
Log.cs
public static class Log
{
private static ILog log =
log4net.LogManager.GetLogger(typeof(Log));
static Log()
{
XmlConfigurator.Configure();
}
private static bool IsEnabled()
{
//Verify stuff
}
public static void Write(LogEntry entry)
{
if (IsEnabled())
log.Debug(entry);
}
}
无论出于何种原因,对log.Debug
的调用永远不会到达我的自定义类中的FormatXml
。有人有什么想法吗?
编辑当我把log4net配置放回web.config时,它运行正常,所以我猜它可能与assemblyinfo有关......但是我看不出是什么
答案 0 :(得分:0)
在我看到这个工作的示例中,log4net配置存储在名为log4net.config
的文件中(如您所有),没有 xml声明,例如<?xml version="1.0"?>
- 尝试一下
答案 1 :(得分:0)
您应该将配置添加到log4net.config文件中。
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!-- LOG4NET configuration-->
</log4net>
</configuration>
答案 2 :(得分:0)
您正在配置log4net两次。删除Log类的静态构造函数。
答案 3 :(得分:0)
您没有为您的类型指定程序集:
<layout type="MyCompany.MyProduct.MyService.Utilities.CustomXmlLayout" />
应该是:
<layout type="MyCompany.MyProduct.MyService.Utilities.CustomXmlLayout, assemblyname" />
程序集名称是您的输出dll。
答案 4 :(得分:0)
我最终将配置部分保留在web.config
中