Log4net 不在日志文件中写入日志

我已经使用 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...");

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

170440 次浏览

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

在 IIS7及以上版本中,这是在应用程序池上配置的,通常是 应用程式池识别码,它通常不具有写入所有目录的权限。

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

使用此 FAQ 页面: Apachelog4net 常见问题

下面大约3/4的地方告诉您如何通过使用应用程序跟踪来启用 log4net 调试。这会告诉你问题出在哪里。

最基本的是:

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

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

你叫

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

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

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

另外,确保为[ log4net ] . config 选择了 < em > “ Copy always”选项

enter image description here

插入:

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

AssemblyInfo.cs文件的末尾

在我的例子中,log4net 没有正确地记录日志,因为在我的项目名中有一个空格。为什么相同的代码在不同的项目中能够很好地工作,而在新的项目中却不能。空格。一个简单的空间。

所以,小心项目名称中的空格,我已经吸取了教训。

对我来说,我移动了日志文件的位置,只有当我将文件名改为其他名称时,它才会再次启动。

似乎如果有一个日志文件已经存在了相同的名称,那么什么也不会发生。

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

在我的例子中,我必须给日志文件 IIS_IUSRS读写权限。

确保 AssemblyInfo.cs 文件中有以下行代码。

[ Assembly: log4net.Config. XmlConfigurator (ConfigFile = “ Web.Config”,Watch = true)]

并在 Application _ start ()方法中检查该行。

log4net.Config.XmlConfigurator.Configure();

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

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

注册过程结束后,您可以调用以下定义来调用 logger:

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


log.Error("Sample log");

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

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

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

有几种使用 log4net 的方法。 在我寻找解决方案的过程中,我发现它很有用。这里描述了解决方案: < a href = “ https://www.hemelix.com/log4net/”rel = “ nofollow norefrer”> https://www.hemelix.com/log4net/