代码之家  ›  专栏  ›  技术社区  ›  Luke Lowrey

log4net不记录或出错

  •  7
  • Luke Lowrey  · 技术社区  · 16 年前

    我一直试图在我的ASP.NET Web应用程序中获取log4net日志,但没有成功或任何明显的错误。我正在尝试使用具有以下配置的ADOMappender附加程序:

    <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应用程序中,我调用

    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?");
    }
    

    据我所知,这一切都无济于事。

    3 回复  |  直到 11 年前
        1
  •  8
  •   Mitch Wheat    16 年前

    是否在“配置”下添加了以下部分->配置部分

    <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文件在属性中标记为“复制到输出”。

    here .

        2
  •  28
  •   softveda    16 年前

    还可以设置以下appsettings以启用内部log4net调试信息

    <appSettings>
            <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
    

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

        3
  •  9
  •   Community CDub    8 年前

    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>
    

    参考文献

    1. How do I enable log4net internal debugging?
    2. log4net - Appenders not working in IIS7.5