我一直试图提取调试日志,无论出于何种原因,我似乎无法在我的网络应用中使用log4net:
我的Web.config看起来像:
<!--
For more information on how to configure your ASP.NET application, please visit
https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<configSections>
<section name ="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" requirePermission="false" />
</configSections>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value ="%message" />
</layout>
</appender>
<appender name="FileAppender" type="log4net.Appender.FileAppender" >
<file value ="C:\logs\testlog.txt" />
<lockingModel type ="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value ="%message" />
</layout>
</appender>
<root>
<level value ="DEBUG" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
</configuration>
在我的Service.asmx.cs中:
public class Service : System.Web.Services.WebService
{
public static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(Service));
protected void Page_Load(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
我的AssemblyInfo.cs
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Control.ascx.cs:
protected void Page_Load(object sender, EventArgs e)
{
//NOTE: This method will be invoked whenever ANY widget on the dashboard does a postback
log4net.Config.XmlConfigurator.Configure();
}
我已经授予每个人对日志文件夹的权限。
我想要注意的另一个项目是我可以使用这个确切的代码来使用标准控制台应用程序而不会出现任何问题。但是,当我尝试在我的网络应用程序上使用它时,我没有任何运气。我还想说这是一个Web应用程序小部件,它是更大应用程序的一部分。
答案 0 :(得分:1)
您的一个问题可能是您在页面加载中有以下内容:
protected void Page_Load(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
删除它,因为您已经有一个用于执行此操作的程序集属性。您使用的记录器是类上的静态变量。调用configure后应初始化它们。在这种情况下,您可以在configure之前调用它(在Page_Load中)。