Asp.net mvc Log4Net可以';在任何地方都找不到日志文件
关于如何配置log4net,我遵循了许多不同的指南,它已经启动并运行,但我在任何地方都找不到日志文件 我的配置是这样的: Web.Config StartUp.cs 声明 伐木 其中我的文件值为:Asp.net mvc Log4Net可以';在任何地方都找不到日志文件,asp.net-mvc,logging,log4net,configure,Asp.net Mvc,Logging,Log4net,Configure,关于如何配置log4net,我遵循了许多不同的指南,它已经启动并运行,但我在任何地方都找不到日志文件 我的配置是这样的: Web.Config StartUp.cs 声明 伐木 其中我的文件值为: 我尝试了几种方法,并指出了上面的内容,但没有成功 我做错了什么 更新: 正如John H所建议的那样,我已经尝试在应用程序启动方法中配置和调用记录器,并尝试了几种替代配置,但没有成功。以下是一些调试信息的2个屏幕截图: 主要性能: 以下是记录器属性: 我做错了什么?从您的屏幕截图中,我们可以看到您
我尝试了几种方法,并指出了上面的内容,但没有成功
我做错了什么
更新:
正如John H所建议的那样,我已经尝试在应用程序启动方法中配置和调用记录器,并尝试了几种替代配置,但没有成功。以下是一些调试信息的2个屏幕截图:
主要性能:
以下是记录器属性:
我做错了什么?从您的屏幕截图中,我们可以看到您的记录器没有使用您的配置进行初始化,因为
IsDebug
是false
。我从您的屏幕截图中注意到的一点是,您试图将Web.config
的路径直接传递到Configure()
方法。我意识到这可能是为了解决问题,因此您可能已经尝试了我的下一个建议,但是以您当前的方式调用Configure()
将不起作用,因为Web.config
未发布到您的bin\debug
文件夹中。它将被称为Web.projectname.config
。召唤
XmlConfigurator.Configure()
如果没有参数,将自动解析输出目录中的正确配置文件。我猜你已经试过了,但是如果仍然不起作用,那么也试试这个:
using log4net;
protected void Application_Start(object sender, EventArgs e)
{
// Initialising configuration before requesting a logger.
XmlConfigurator.Configure();
// Requesting a logger only after the configuration has been initialised.
var logger = LogManager.GetLogger(typeof(Global));
logger.Info("Application started.");
}
我不确定这会有什么不同,但我觉得你的配置很好
但是,通过检查记录器上的IsDebug
属性,您至少能够判断配置是否已被读取
编辑:另一件事,确保应用程序具有写入文件的权限。从:
RollingFileAppender扩展了FileAppender,并且在打开日志文件时具有相同的行为。调用ActivateOptions()时,appender将首先尝试打开文件进行写入。这通常在配置期间进行。如果无法打开文件进行写入,则每次将消息记录到appender时,appender都会尝试再次打开该文件。如果在记录消息时无法打开文件进行写入,则此追加器将丢弃该消息
好的,我在本教程之后开始工作:
- 我创建了一个log4net.config文件,其内容如教程所示
- 已使用
[程序集:XmlConfigurator(ConfigFile=“log4net.config”,Watch=true)]
ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
logger.Info("Application started.");
- 创建文件并记录内容。 我将比较配置文件的内容,看看是否存在差异,然后逐步比较所有内容,直到找到导致它无法工作的原因
亲切问候您是否介意阅读一下这篇文章及其问题,看看这是否解决了您的问题?它们听起来很相似。我曾尝试在多个场景中提供建议(尝试在上面的注释中使用代码切换),但在我的电脑上找不到任何日志文件(也按名称和扩展名搜索)如果对logger对象/实例本身有帮助的话,我将用调试后的sceenshots更新原始帖子。谢谢你的建议,我只是用“XmlConfigurator.Configure();”来代替我的,但我似乎没有得到的一件事是全局的使用,我无法引用它,我已经尝试使用了“MethodBase.GetCurrentMethod().DeclaringType”和“mvcapapplication”甚至“HttpApplication”,但“IsDebug”一直是假的…@Dimitri如果查看
Global.asax.cs
,它应该是从HttpApplication
继承的类的名称(例如,public class WebApiApplication:System.Web.HttpApplication
)。在您的案例中是mvcapapplication
?另外,在第二个屏幕截图中,您是否可以查看appender
列表以查看其中的内容?没错,它确实是mvcapapplication。我已经将此类型设置为:LogManager.GetLogger(typeof(mvcapapplication));我可以看到附加器没有结果,它是空的。我一直在寻找并尝试建议,感谢您已经给予的帮助John!很高兴您能够修复它,Dimitri,并感谢您发布您的答案。:)谢谢您的支持John,非常感谢!
readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
BasicConfigurator.Configure();
logger.Info("Info logging ...");
logger.Error("Homepage loading test logging ...");
XmlConfigurator.Configure()
using log4net;
protected void Application_Start(object sender, EventArgs e)
{
// Initialising configuration before requesting a logger.
XmlConfigurator.Configure();
// Requesting a logger only after the configuration has been initialised.
var logger = LogManager.GetLogger(typeof(Global));
logger.Info("Application started.");
}
ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
logger.Info("Application started.");