Log4net不写日志文件

时间:2010-09-01 13:13:38

标签: c# .net asp.net logging log4net

我使用Log4net创建了一个简单的场景,但似乎我的appender不起作用,因为消息没有添加到日志文件中。

我在web.config文件中添加了以下内容:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>        
</configSections>

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <file value="D:\MyData\Desktop\LogFile.txt" />
            <appendToFile value="true" />
            <encoding value="utf-8" />
            <layout type="log4net.Layout.SimpleLayout" />
    </appender>


    <root>
        <level value="INFO" />
        <appender-ref ref="LogFileAppender" />
    </root>
</log4net>

在全局ASAX文件中,我添加了:

ILog logger = LogManager.GetLogger(typeof(MvcApplication));

并在Application_Start方法中:

logger.Info("Starting the application...");

我做错了什么?

12 个答案:

答案 0 :(得分:292)

你打电话

log4net.Config.XmlConfigurator.Configure();

某处让log4net读取您的配置?例如。在Global.asax:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup

    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}

答案 1 :(得分:45)

使用此常见问题解答页面:Apache log4net Frequently Asked Questions

大约3/4的方式告诉您如何使用应用程序跟踪启用log4net调试。这将告诉您问题所在。

基础知识是:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

您可以在标准输出中看到跟踪

答案 2 :(得分:32)

正如@AndreasPaulsson建议的那样,我们需要配置它。我在AssemblyInfo文件中进行配置。我在这里指定了configuration file name

// Log4Net Configuration.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

答案 3 :(得分:25)

此外,请确保为[log4net] .config选择 “始终复制” 选项,如下图所示:

enter image description here

答案 4 :(得分:22)

确保运行该站点的进程(帐户)具有写入输出目录的权限。

在IIS 7及更高版本中,它在应用程序池上配置,通常是AppPool Identity,通常无权写入所有目录。

检查您的事件日志(应用程序和安全性)以查看是否抛出了任何异常。

答案 5 :(得分:18)

插入:

 [assembly: log4net.Config.XmlConfigurator(Watch = true)]

AssemblyInfo.cs 文件

的末尾

答案 6 :(得分:1)

就我而言,由于项目名称中有空格,log4net未正确记录。让我疯了为什么相同的代码在不同的项目中工作得很好,但没有在新的项目中。空间。一个简单的空间。

因此,请注意项目名称中的空格。我已经吸取了教训。

答案 7 :(得分:1)

对我来说,我移动了日志文件的位置,只有当我将文件的名称更改为其他内容时才重新开始。

似乎已经存在具有相同名称的日志文件,没有任何反应。

之后我重命名旧文件并将配置中的日志文件名再次更改为原来的文件。

答案 8 :(得分:1)

就我而言,我必须授予日志文件IIS_IUSRS的读写权限。

答案 9 :(得分:1)

确保AssemblyInfo.cs文件中应包含以下行代码。

[程序集:log4net.Config.XmlConfigurator(ConfigFile =“ Web.config”,Watch = true)]

,并在Application_start()方法中检查这一行。

log4net.Config.XmlConfigurator.Configure();

答案 10 :(得分:0)

您的配置文件似乎正确。然后,您必须将Log4net配置文件注册到应用程序。因此,您可以使用以下代码:

var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config"));

注册后,您可以调用以下定义来调用记录器:

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

log.Error("Sample log");

答案 11 :(得分:0)

有几种使用log4net的方法。 我在寻找解决方案时很有用。该解决方案的说明如下:https://www.hemelix.com/log4net/