Log4Net找不到任何地方的日志文件

时间:2018-08-17 14:01:22

标签: asp.net-mvc logging log4net configure

我遵循了许多有关如何配置log4net的指南,它已启动并正在运行,但是我在任何地方都找不到日志文件...

这是我的配置:

  

Web.Config

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="C:\\temp\\Log.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="RollingLogFileAppender" />
    </root>
</log4net>
  

Global.asax:

XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config")));
//XmlConfigurator.Configure();
  

StartUp.cs

//[assembly: XmlConfigurator(ConfigFile = "Web.config", Watch = true)]
[assembly: XmlConfigurator(Watch = true)]
  

声明

readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  

记录

 BasicConfigurator.Configure();
 logger.Info("Info logging ...");
 logger.Error("Homepage loading test logging ...");

我的文件值为:<file value="C:\\temp\\Log.txt" />

我尝试了几种方法,并注释了上面的内容,但没有成功。

我在做什么错了?

更新: 正如John H所建议的那样,我尝试了在Application_Start方法中配置和调用记录器,并尝试了几种替代配置,但都没有成功。这是一些调试信息的2个屏幕截图:

主要属性:

enter image description here

下面是Logger属性:

enter image description here

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

好,因此我可以按照本教程进行操作:log4net-guide-dotnet-logging

  • 我已经创建了一个log4net.config文件,其内容如教程中所示。
  • 使用过的[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

这样称呼它:

ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        logger.Info("Application started.");
  • 文件已创建,内容也已记录。 我将比较配置文件的内容,看看是否存在差异,然后逐步比较所有内容,直到发现导致它无法正常工作的原因为止。

感谢您对我的帮助! 问候

答案 1 :(得分:1)

从您的屏幕截图中,我们可以看到您的记录器未使用您的配置进行初始化,因为IsDebugfalse。我从您的屏幕快照中注意到的一件事是,您正在尝试将Web.config的路径直接传递给Configure()方法。我意识到这可能是解决问题的一种尝试,因此您可能已经尝试过我的下一个建议,但是由于Configure()尚未发布到您的系统中,因此无法以您当前无法使用的方式调用Web.config bin\debug文件夹。它将称为Web.projectname.config。呼叫

XmlConfigurator.Configure()

没有参数,将自动在您的输出目录中解析正确的配置文件。我猜您已经尝试过了,但是如果仍然无法解决,请尝试以下操作:

using log4net;

protected void Application_Start(object sender, EventArgs e)
{
    // Initialising configuration before requesting a logger.
    XmlConfigurator.Configure();

    // Requesting a logger only after the configuration has been initialised.
    var logger = LogManager.GetLogger(typeof(Global));
    logger.Info("Application started.");
}

我不确定这会有什么不同,但是您的配置对我来说很好。

但是通过检查记录器上的IsDebug属性,您至少可以知道配置是否已被读取。

编辑:另一件事,请确保应用程序将具有写入文件的权限。来自documentation

  

RollingFileAppender扩展FileAppender并在打开日志文件时具有相同的行为。调用ActivateOptions()时,附加程序将首先尝试打开要写入的文件。这通常是在配置期间。如果无法打开文件进行写入,则每次将消息记录到附加程序时,附加程序都会尝试再次打开文件。如果在记录消息时无法打开文件进行写入,则此附加程序将丢弃该消息。