Log4Net不记录或错误

Luk*_*rey 7 c# asp.net log4net

我一直试图在我的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>
Run Code Online (Sandbox Code Playgroud)

在我的global.asax Application_Start中我打电话

log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)

然后尝试记录:

protected static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected void Page_Load(object sender, EventArgs e)
{            
    log.Info("did I log yet?");
}
Run Code Online (Sandbox Code Playgroud)

就我所知,所有这一切都无济于事.

sof*_*eda 28

您还可以设置以下appsettings以启用内部lo​​g4net调试信息

<appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

内部调试消息将写入控制台(如果有)或跟踪(例如Visual Studio中的调试窗口或sysintenals中的dbgview).这将帮助您解决log4net问题.


LCJ*_*LCJ 9

Internal debugging对于log4Net来说,就像@Pratik所建议的那样.要将详细信息写入文件,请执行以下操作:

web.config即使您使用不同的log4net配置文件,也请添加以下内容.

<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>
Run Code Online (Sandbox Code Playgroud)

参考

  1. 如何启用log4net内部调试?
  2. log4net - Aplder在IIS7.5中不起作用


Mit*_*eat 8

您是否已添加在Configuration-> Configsections下添加以下部分

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
Run Code Online (Sandbox Code Playgroud)

虽然可以将log4net配置设置添加到项目的app.config或web.config文件中,但最好将它们放在单独的配置文件中.除了可维护性的明显好处之外,它还有一个额外的好处,即log4net可以FileSystemWatcher在配置文件上放置一个对象,以便在其更改和动态更新其设置时进行监视.

要使用单独的配置文件,请添加一个名为Log4Net.config项目的文件,并将以下属性添加到您的AssemblyInfo.cs文件中:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

注意:对于Web应用程序,这假定Log4Net.config驻留在Web根目录中.确保log4net.config文件在"属性"中标记为"复制到输出" - >"始终复制".

这里开始.