166

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

我在 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...");

为什么没有将测试日志“正在启动应用程序...”添加到日志文件中?

4

13 回答 13

329

你打电话吗

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();
}
于 2010-09-01T21:15:05.730 回答
55

使用这个常见问题页面: Apache log4net 常见问题

大约 3/4 的部分告诉您如何使用应用程序跟踪来启用 log4net 调试。这将告诉您问题出在哪里。

基本情况是:

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

您会在标准输出中看到跟踪

于 2010-09-01T13:38:14.847 回答
39

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

// Log4Net Configuration.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
于 2013-02-04T08:25:29.490 回答
36

此外,确保为 [log4net].config 选择了“始终复制”选项

在此处输入图像描述

于 2015-08-19T12:51:39.263 回答
26

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

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

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

于 2010-09-01T13:16:27.180 回答
21

插入:

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

AssemblyInfo.cs文件的末尾

于 2015-09-08T11:30:53.977 回答
3

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

似乎如果已经存在同名的日志文件,则没有任何反应。

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

于 2017-04-10T08:49:34.257 回答
3

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

于 2019-08-26T10:27:32.960 回答
2

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

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

于 2016-08-19T14:17:15.250 回答
1

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

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

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

log4net.Config.XmlConfigurator.Configure();
于 2019-09-25T09:59:39.857 回答
1

对我来说,我不得不将 Logger 移动到 Nuget 包。下面的代码需要添加到 NuGet 包项目中。

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

有关更多详细信息,请参阅https://gurunadhduvvuru.wordpress.com/2020/04/30/log4net-issues-when-moved-it-to-a-nuget-package/

于 2020-05-07T19:59:39.020 回答
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");
于 2020-05-02T23:25:35.103 回答
0

有几种使用 log4net 的方法。我在寻找解决方案时发现它很有用。解决方案在这里描述:https ://www.hemelix.com/log4net/

于 2020-07-07T19:30:55.633 回答