我一直试图在我的asp.net Web应用程序中记录log4net,但没有成功或任何明显的错误。我试图使用ADONetAppender appender和以下配置:
<log4net>
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="server=" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[Context]) VALUES
(@log_date, @thread, @log_level, @logger, @message, @exception, @context)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="32" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%t" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="512" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</layout>
</parameter>
<parameter>
<parameterName value="@context" />
<dbType value="String" />
<size value="512" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%x" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="512" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%c" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ADONetAppender" />
</root>
在我的global.asax Application_Start中,我调用
log4net.Config.XmlConfigurator.Configure();
然后尝试记录:
protected static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected void Page_Load(object sender, EventArgs e)
{
log.Info("did I log yet?");
}
就我所知,所有这些都无济于事。
答案 0 :(得分:28)
您还可以设置以下appsettings以启用内部log4net调试信息
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
内部调试消息将写入控制台(如果有)或跟踪(例如visual studio中的调试窗口或sysintenals中的dbgview)。这将帮助您解决log4net问题。
答案 1 :(得分:9)
Internal debugging
是@Pratik建议的方法。要将详细信息写入文件,请执行以下操作:
即使您使用不同的log4net配置文件,也要在web.config
中添加以下内容。
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\toolbox\SmartClient\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
<强>参考强>
答案 2 :(得分:8)
您是否已添加以下部分,在Configuration-&gt; Configsections
下添加<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
虽然可以将log4net配置设置添加到项目的app.config或web.config文件中,但最好将它们放在单独的配置文件中。除了可维护性的明显好处之外,它还有一个额外的好处,即log4net可以在配置文件上放置FileSystemWatcher
对象,以监控它何时更改并动态更新其设置。
要使用单独的配置文件,请将名为Log4Net.config
的文件添加到项目中,并将以下属性添加到AssemblyInfo.cs
文件中:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
注意:对于Web应用程序,这假定Log4Net.config位于Web根目录中。确保log4net.config文件标记为“复制到输出” - &gt;在“属性”中“始终复制”。
来自here。