Log4net 不将日志写入日志文件
Posted
技术标签:
【中文标题】Log4net 不将日志写入日志文件【英文标题】:Log4net does not write the log in the log file 【发布时间】:2011-04-06 19:29:06 【问题描述】:我使用 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...");
为什么没有将测试日志“正在启动应用程序...”添加到日志文件中?
【问题讨论】:
【参考方案1】:确保运行站点的进程(帐户)具有写入输出目录的权限。
在 IIS 7 及更高版本中,这是在应用程序池中配置的,通常是 AppPool Identity,通常没有写入所有目录的权限。
检查您的事件日志(应用程序和安全性)以查看是否引发了任何异常。
【讨论】:
感谢您的帮助,我也考虑过权限问题,但如果我在文件夹上设置读取、写入、修改和执行权限给每个人,它都不起作用。 @john84 - 你有例外吗?你看过事件日志吗? 我刚刚发现,Windows 服务在特定帐户下运行也很重要。 非常感谢对我有很大帮助。【参考方案2】:使用此常见问题页面: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>
你会在标准输出中看到跟踪
【讨论】:
谢谢,我查看了常见问题解答,但这些无法解决我的问题。 感谢这个答案,我能够确定我的root
部分指的是错误的记录器!!
很好的提示。我发现asp.net用户的访问被拒绝了
如果它对某人不起作用,那么请尝试我的使用方法:你打电话吗
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();
【讨论】:
非常感谢,就是这样,我有以下行:log4net.Config.BasicConfigurator.Configure();如果我使用 c# 配置而不是 web.config 来配置 log4net,我会调用它吗?是否需要以任何方式调用此“配置”方法,因为在许多教程中我没有找到这行代码。 有很多方法可以告诉 log4net 在哪里寻找配置,请参阅logging.apache.org/log4net/release/manual/configuration.html。调用 XmlConfigurator.Configure() 将使 log4net 在 .config 或 web.config 中查找配置。 BasicConfigurator.Configure 将(根据 SDK 文档):“使用将写入 Console.Out 的 ConsoleAppender 初始化 log4net 日志系统。” 仅供参考 - 如果您不希望它基于文件,您也可以使用 log4net.Config.BasicConfigurator。输出被发送到控制台。 我正在AssemblyInfo
文件中进行配置。在下面作为答案发布。
哎呀,发现了很多这样的问题,而且到处都没有提到在哪里可以找到实际的日志文件……是不是很明显,每个人都已经知道了?【参考方案4】:
正如@AndreasPaulsson 建议的那样,我们需要对其进行配置。我正在AssemblyInfo
文件中进行配置。我在这里指定configuration file name
。
// Log4Net Configuration.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
【讨论】:
如果我同时拥有这个和 log4net.Config.XmlConfigurator.Configure() 会发生什么;加载中? @n00b,然后我们可以评论这一行,实际上只有这样才能对我有用“log4net.Config.XmlConfigurator.Configure();”,还有一件事:我在我的web.config 设置太 【参考方案5】:另外,确保为 [log4net].config 选择了 “始终复制” 选项
【讨论】:
这是对我的修复。我总是忘记这个设置。【参考方案6】:插入:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
在 AssemblyInfo.cs 文件的末尾
【讨论】:
这是我的救命稻草。做一个桌面表单项目并将 log4net.Config.XmlConfigurator.Configure();主要没有帮助。谢谢 这对我有帮助。我在 web.config 中进行了配置,但 log4net 似乎没有接受所做的更改。我在该属性中添加了“Watch=true”,然后开始工作【参考方案7】:在我的例子中,log4net 没有正确记录,因为我的项目名称中有空格。让我发疯,为什么相同的代码在不同的项目中工作得很好,但在新项目中却没有。空间。一个简单的空间。
因此,请注意项目名称中的空格。我已经吸取了教训。
【讨论】:
您在哪里遇到了这个问题? Log4Net 在一个项目中运行良好,但在另一个项目中却不行……不知道为什么。 Tks【参考方案8】:对我来说,我移动了日志文件的位置,只有当我将文件名更改为其他名称时,它才会重新开始。
似乎如果已经存在同名的日志文件,则什么都不会发生。
之后,我重命名了旧文件并将配置中的日志文件名改回原来的样子。
【讨论】:
【参考方案9】:在我的情况下,我必须授予 IIS_IUSRS
对日志文件的读\写权限。
【讨论】:
【参考方案10】:确保 AssemblyInfo.cs 文件中应包含以下行代码。
[程序集:log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]
并在 Application_start() 方法中检查这一行。
log4net.Config.XmlConfigurator.Configure();
【讨论】:
【参考方案11】:您的配置文件似乎正确。然后,您必须将 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");
【讨论】:
【参考方案12】:对我来说,我不得不将 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/。
【讨论】:
尽量避免链接作为答案。它们可能并不总是有效。也许编辑您的答案以在链接中包含信息摘要。【参考方案13】:有几种使用 log4net 的方法。 我在寻找解决方案时发现它很有用。解决方案在这里描述:https://www.hemelix.com/log4net/
【讨论】:
以上是关于Log4net 不将日志写入日志文件的主要内容,如果未能解决你的问题,请参考以下文章