我遵循了许多有关如何配置log4net的指南,它已启动并正在运行,但是我在任何地方都找不到日志文件...
这是我的配置:
Web.Config
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\\temp\\Log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
Global.asax:
XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config")));
//XmlConfigurator.Configure();
StartUp.cs
//[assembly: XmlConfigurator(ConfigFile = "Web.config", Watch = true)]
[assembly: XmlConfigurator(Watch = true)]
声明
readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
记录
BasicConfigurator.Configure();
logger.Info("Info logging ...");
logger.Error("Homepage loading test logging ...");
我的文件值为:<file value="C:\\temp\\Log.txt" />
我尝试了几种方法,并注释了上面的内容,但没有成功。
我在做什么错了?
更新: 正如John H所建议的那样,我尝试了在Application_Start方法中配置和调用记录器,并尝试了几种替代配置,但都没有成功。这是一些调试信息的2个屏幕截图:
主要属性:
下面是Logger属性:
我在做什么错了?
答案 0 :(得分:2)
好,因此我可以按照本教程进行操作:log4net-guide-dotnet-logging
[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
这样称呼它:
ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
logger.Info("Application started.");
感谢您对我的帮助! 问候
答案 1 :(得分:1)
从您的屏幕截图中,我们可以看到您的记录器未使用您的配置进行初始化,因为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
属性,您至少可以知道配置是否已被读取。
编辑:另一件事,请确保应用程序将具有写入文件的权限。来自documentation:
RollingFileAppender扩展FileAppender并在打开日志文件时具有相同的行为。调用ActivateOptions()时,附加程序将首先尝试打开要写入的文件。这通常是在配置期间。如果无法打开文件进行写入,则每次将消息记录到附加程序时,附加程序都会尝试再次打开文件。如果在记录消息时无法打开文件进行写入,则此附加程序将丢弃该消息。