Log4Net在我的.Net网站在调试时总是将IsErrorEnabled值显示为FALSE



我一直在尝试将错误记录在我的中。Net网站使用Log4Net AdoNetAppender连接到SQL数据库,但错误消息没有记录到数据库中。看起来AdoNetAppender没有被启用或读取。在调试时,我观察到的是Logger。日志将其所有属性值显示为false。即IsErrorEnabled/IsDebugEnabled/IsFatalEnabled/IsInfoEnabled/IsWarnEnabled均为false。

我使用的log4net.dll版本为2.0.8.0

单击此处查看对象属性的图像

logging.cs代码如下:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Utility.Library
{
public class Logging
{
public static class Logger
{
public static ILog Log = LogManager.GetLogger(typeof(SharedMethods));
}
public static class LogException
{
private static StringBuilder sessionJobLogBuilder = new StringBuilder();
public static void LogError(string sMsg, Exception ex)
{
Logger.Log.Error(sMsg, ex);
sessionJobLogBuilder.AppendLine(sMsg + Environment.NewLine);
sessionJobLogBuilder.AppendLine(ex.ToString() + Environment.NewLine);
}
public static void LogInfo(string sMsg)
{
Logger.Log.Info(sMsg);
sessionJobLogBuilder.AppendLine(sMsg + Environment.NewLine);
}
}
}
}

下面是app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<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="data source=xxxxxx;
initial catalog=xxx;integrated security=false;
persist security info=True;User ID=xxx;Password=xxx" />
<commandText value="EXECUTE [dbo].[WriteLogEntry] @App, @Module, @Ver, @Computer, @UserID, @Level, @Message, @Exception" />
<parameter>
<parameterName value="@App" />
<dbType value="String" />
<size value="30" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%App" />
</layout>
</parameter>
<parameter>
<parameterName value="@Module" />
<dbType value="String" />
<size value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%Module" />
</layout>
</parameter>
<parameter>
<parameterName value="@Ver" />
<dbType value="String" />
<size value="20" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%Ver" />
</layout>
</parameter>
<parameter>
<parameterName value="@Computer" />
<dbType value="String" />
<size value="15" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%Computer" />
</layout>
</parameter>
<parameter>
<parameterName value="@UserID" />
<dbType value="String" />
<size value="30" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%UserID" />
</layout>
</parameter>
<parameter>
<parameterName value="@Level" />
<dbType value="Int32" />
<layout type="log4net.Layout.PatternLayout" />
</parameter>
<parameter>
<parameterName value="@Message" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%Message" />
</layout>
</parameter>
<parameter>
<parameterName value="@Exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="AdoNetAppender"/>
</root>
</log4net>
</configuration>

但是记录器。所有级别的日志属性都显示为false

从您的评论中,我读到您有一个单独的app.config文件和一个单独程序集中定义的Logger类。

ASP.NET网站只考虑web.config文件
未加载app.config文件,因此不会应用Log4net配置。

解决此问题的一种方法是将app.config文件转换为单独的Log4net配置文件,并显式加载该文件。

  1. <log4net> ... </log4net>内容从app.config文件移动到网站项目根目录中的一个单独文件(按惯例命名为Log4net.config(
    <log4net>元素必须是该文件中的根xml元素。

  2. Logger项目中删除[assembly: log4net.Config.XmlConfigurator(Watch = true)]

  3. 在网站项目的Global.asax中的Application_Start中添加以下代码,以确保在网站启动阶段加载log4net配置。

    void Application_Start(object sender, EventArgs e)    
    {
    ILoggerRepository repository = log4net.LogManager.GetRepository(Assembly.GetExecutingAssembly());
    XmlConfigurator.Configure(repository, new FileInfo(Server.MapPath("log4net.config")));
    // Remaining startup code.
    }
    

我的网站项目根目录中有以下log4net.config(靠近web.config(,只有一个RollingFileAppender,但概念是一样的。

<log4net>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<param name="ImmediateFlush" value="true" />
<file value="Log.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="ERROR" />
<appender-ref ref="file" />
</root>
</log4net>


在我的Log4net.config中设置AdoNetAppender时,会显示IsDebugEnabledIsErrorEnabled等的预期值。


摘要
Log4net的内部调试日志显示配置文件没有从假定位置加载
纠正此位置(在XmlConfigurator.Configure方法调用中(和提供如上所示的配置相结合解决了问题。

相关内容

最新更新