Asp.net Log4net不在日志文件中写入日志

Asp.net Log4net不在日志文件中写入日志,asp.net,asp.net-mvc,logging,log4net,log4net-appender,Asp.net,Asp.net Mvc,Logging,Log4net,Log4net Appender,我使用Log4net创建了一个简单的场景,但是我的日志附加器似乎不起作用,因为消息没有添加到日志文件中 我在web.config文件中添加了以下内容: 在全局ASAX文件中,我添加了: ILog logger = LogManager.GetLogger(typeof(MvcApplication)); 在应用程序启动方法中: logger.Info("Starting the application..."); 为什么没有将测试日志“启动应用程序…”添加到日志文件中

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

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


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

ILog logger = LogManager.GetLogger(typeof(MvcApplication));
在应用程序启动方法中:

logger.Info("Starting the application...");
为什么没有将测试日志“启动应用程序…”添加到日志文件中?

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

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

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

使用此常见问题解答页面:

大约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
文件中进行配置。我在这里指定
配置文件名

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

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

插入:

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

在我的例子中,AssemblyInfo.cs文件

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


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

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

如果已经存在同名的日志文件,那么似乎什么都不会发生


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

在我的情况下,我必须为日志文件授予
IIS\u IUSRS
读写权限。

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

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

并在应用程序_start()方法中检查这一行


您的配置文件似乎正确。然后,您必须将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");

对我来说,我不得不把记录器移到一个Nuget包中。需要在NuGet包项目中添加以下代码

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

有关更多详细信息,请参阅。

使用log4net有几种方法。

我在寻找解决方案时发现它很有用。此处描述了解决方案:

谢谢我查看了常见问题解答,但这些问题无法解决。由于这个答案,我能够确定我的
根目录
部分引用了错误的记录器!!很好的提示。我发现asp.net用户的访问被拒绝如果某人无法访问,请尝试我的方法使用:这让我省去了x个小时的头痛。谢谢你的帮助,我还考虑了权限问题,但如果我设置了“读取、写入、修改”文件夹,并对不起作用的所有人执行权限。@john84-是否有异常?您看过事件日志了吗?正如我刚才发现的,同样重要的是,Windows服务在特定帐户下运行。非常感谢您对我的帮助。非常感谢,就是这样,我有以下行:log4net.Config.BasicConfigurator.Configure();如果我使用c#配置而不是web.config来配置log4net,我会调用它吗?由于在很多教程中我都没有找到这行代码,所以需要以任何方式调用“Configure”-方法。有很多方法可以告诉log4net在哪里查找配置,请参阅。调用XmlConfigurator.Configure()将使log4net在.config或web.config中查找配置。BasicConfigurator.Configure将(根据SDK文档):“使用将写入Console.Out的ConsolePender初始化log4net日志记录系统。”仅供参考-如果不希望log4net.Config.BasicConfigurator基于文件,也可以使用它。输出被发送到控制台。我正在
AssemblyInfo
文件中进行配置。贴在下面作为答案。啊,发现了这么多这样的问题,到处都没有提到在哪里可以找到实际的日志文件。。。大家都已经知道了吗?如果我同时拥有这个和log4net.Config.XmlConfigurator.Configure(),会发生什么;加载?@n00b,然后我们可以对这行进行注释,实际上只有这样它才能对我起作用“log4net.Config.XmlConfigurator.Configure();”,还有一件事:我也在我的web.Config设置中添加了这个,你在哪里遇到这个问题?Log4Net在一个项目中工作得很好,但在另一个项目中却没有。。。不知道为什么。这是我的救命稻草。执行桌面表单项目并放置log4net.Config.XmlConfigurator.Configure();总的来说,这没有帮助。谢谢这帮助了我。我在web.config中进行了配置,但log4net似乎没有接收到所做的更改。我在该属性中添加了“Watch=true”,然后一个东西开始工作,试图避免链接作为答案。它们可能并不总是有效的。也许编辑你的答案,在链接中包含信息摘要。这是我的解决方案。我总是忘记这个设置。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]