我的.Net网站上的Log4Net在调试时始终将IsErrorEnabled值显示为FALSE

时间:2018-12-06 20:07:26

标签: c# asp.net asp.net-mvc log4net log4net-appender

我一直试图使用Log4Net AdoNetAppender将.Net网站中的错误记录到SQL数据库中,但是错误消息没有记录在数据库中。似乎AdoNetAppender没有启用或读取。在调试时,我观察到的是Logger.Log将其所有属性值显示为false。即IsErrorEnabled / IsDebugEnabled / IsFatalEnabled / IsInfoEnabled / IsWarnEnabled全部都为false。

我正在使用的log4net.dll版本是2.0.8.0

click here to view image of object properties

logging.cs代码如下:

delegate.fcmToken

下面是app.config:

[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);
            }

        }

    }

}

但是所有级别的Logger.Log属性都显示为false。

1 个答案:

答案 0 :(得分:0)

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

ASP.NET网站仅考虑web.config文件。
您的app.config文件未加载,因此Log4net配置未得到应用。

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

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

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

  3. 将以下代码添加到网站项目Application_Start中的Global.asax中,以确保在网站启动阶段加载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.
    }
    

在我的网站项目(靠近web.config)的根目录中,我只有一个log4net.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>


AdoNetAppender中的Log4net.config设置为IsDebugEnabledIsErrorEnabled等的期望值。


摘要
Log4net的internal debug logging显示未从假定位置加载配置文件。
纠正此位置(在XmlConfigurator.Configure方法调用中)并提供如上所示的配置,可以解决此问题。