【问题标题】:Log4Net doesn't log or errorLog4Net 不记录或出错
【发布时间】:2013-10-22 20:31:13
【问题描述】:

我一直试图在我的 asp.net Web 应用程序中登录 log4net,但没有成功或任何明显的错误。我正在尝试将 ADONetAppender 附加程序与以下配置一起使用:

<log4net>
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
  <bufferSize value="1" />
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <connectionString value="server=" />
  <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[Context]) VALUES 
                            (@log_date, @thread, @log_level, @logger, @message, @exception, @context)" />
  <parameter>
    <parameterName value="@log_date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </parameter>
  <parameter>
    <parameterName value="@thread" />
    <dbType value="String" />
    <size value="32" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%t" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@log_level" />
    <dbType value="String" />
    <size value="512" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%p" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@context" />
    <dbType value="String" />
    <size value="512" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%x" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@logger" />
    <dbType value="String" />
    <size value="512" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%c" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@message" />
    <dbType value="String" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%m" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@exception" />
    <dbType value="String" />
    <size value="2000" />
    <layout type="log4net.Layout.ExceptionLayout" />
  </parameter>
</appender>
<root>
  <level value="DEBUG" />
  <appender-ref ref="ADONetAppender" />
</root>

在我的 global.asax Application_Start 中调用

log4net.Config.XmlConfigurator.Configure();

然后尝试记录:

protected static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected void Page_Load(object sender, EventArgs e)
{            
    log.Info("did I log yet?");
}

据我所知,所有这些都无济于事。

【问题讨论】:

  • 我感觉这些连接字符串凭据是真实的,最好不要将它们包含在以后的帖子中......
  • 我也有同样的问题——这很令人沮丧。数据库中没有日志条目,Log4Net 的跟踪中没有错误.. 没有。

标签: c# asp.net log4net


【解决方案1】:

您还可以设置以下appsettings来启用内部lo​​g4net调试信息

<appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

内部调试消息被写入控制台(如果有的话)或跟踪(例如 Visual Studio 中的调试窗口或来自 sysintenals 的 dbgview)。这将帮助您解决 log4net 问题。

【讨论】:

  • 谢谢,这帮助我找到了 log4net 抛出的 Oracle 异常并立即解决了我的问题。
  • 如果您使用的是 DebugView,请尝试检查 Capture > Capture Global Win32 菜单。在我这样做之前我什么也没得到。
  • 你能告诉我我应该在哪里添加这段代码吗?我有一个 .Net 4.0 网络应用程序。
【解决方案2】:

Internal debugging for log4Net 是@Pratik 建议的方式。要将详细信息写入文件,请执行以下操作:

web.config 中添加以下内容,即使您为 log4net 使用不同的配置文件。

<appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

<system.diagnostics>
<trace autoflush="true">
  <listeners>
    <add
    name="textWriterTraceListener"
    type="System.Diagnostics.TextWriterTraceListener"
    initializeData="C:\toolbox\SmartClient\log4net.txt" />
  </listeners>
</trace>
</system.diagnostics>

参考

  1. How do I enable log4net internal debugging?
  2. log4net - Appenders not working in IIS7.5

【讨论】:

  • 这非常适合调试为什么它不能在托管环境中工作!谢谢。
【解决方案3】:

您是否在 Configuration->Configsections 下添加了以下部分

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

虽然可以将 log4net 配置设置添加到项目的 app.config 或 web.config 文件中,但最好将它们放在单独的配置文件中。除了可维护性的明显好处之外,它还有一个额外的好处,即 log4net 可以在您的配置文件中放置一个 FileSystemWatcher 对象,以监控它何时更改并动态更新其设置。

要使用单独的配置文件,请将名为 Log4Net.config 的文件添加到您的项目中,并将以下属性添加到您的 AssemblyInfo.cs 文件中:

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

注意:对于 Web 应用程序,这假定 Log4Net.config 驻留在 Web 根目录中。确保 log4net.config 文件在属性中标记为“复制到输出”->“始终复制”。

来自here

【讨论】:

  • 那么,如果您执行“复制到输出”,那么不会将 log4net.config 放入您的 Web 应用程序的 bin 目录以及站点根目录中吗?
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
相关资源
最近更新 更多