【问题标题】:use log4net without web.config在没有 web.config 的情况下使用 log4net
【发布时间】:2011-06-09 11:20:24
【问题描述】:

我正在使用 log4net 记录错误。

目前我下载了log4net.dll文件,然后在global.asax文件中做了如下改动:

private static ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

protected void Application_Start(object sender, EventArgs e)
{
    log4net.Config.XmlConfigurator.Configure();
}
protected void Application_Error(object sender, EventArgs e)
{
    Log.Fatal("An uncaught exception occurred", this.Server.GetLastError());
}

这些更改也在 web.config 文件中进行

<log4net>

<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  <param name="File" value="c:\Log4NetExample.log"/>
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
  </layout>
</appender>

<root>

  <level value="All"/>

  <appender-ref ref="LogFileAppender"/>
</root>

一切正常。但我需要的是从web.config 中移动代码并从文本文件中读取它。

我还需要 2 个级别的调试和错误..

谁能帮我解决这个问题?

谢谢

【问题讨论】:

标签: c# asp.net logging log4net


【解决方案1】:

我不知道这是不是你想要的,但是你可以把相同的log4net xml配置信息放到一个txt文件中,自己读取,然后用那个xml初始化log4net。

请参阅此处的this question,了解如何以编程方式使用 xml 配置 log4net。在示例中,我展示了通过 log4net api 将 xml 直接发送到 log4net。您的案例所缺少的只是从文本文件中读取它。我认为如果你从 web.config 复制你的 log4net xml 配置信息并将其粘贴到一个文本文件中,你应该能够从文件中读取它并将其发送到 log4net,如示例所示。

请注意,如果您只想将 log4net 日志配置与 web.config 放在一个单独的文件中,log4net 确实允许您指定一个仅包含 log4net 配置信息的单独文件(这将是比我上面的例子)。

有关如何为 ASP.NET 应用程序执行此操作的示例,请参阅 this question

【讨论】:

    【解决方案2】:

    将此属性放入您的 AssemblyInfo.cs 文件中:

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

    其中 'Log4net.config' 等同于您的配置文件的名称。

    当然,还有其他方法可以达到相同的效果。例如,您可以将配置部分处理程序保留在您的 web.config 中。将元素移动到自己的 xml 文件中,并在 web.config 中将其替换为空元素,因此:

    <log4net configSource="c:\config\myLog4NetConfig.xml" />
    

    configSource 属性提供外部文件的位置(不能是 UNC 路径,但它必须是机器本地的。)

    至于配置 log4net...这可能会有点棘手。请参阅以下链接以获取帮助和示例:

    【讨论】:

    • 我喜欢将我的 log4net 配置文件分开,因为它还允许您快速更改模式而无需强制重新加载程序集,如果您更新 web.config 文件会发生这种情况。
    • 确保您的 Log4Net.config 具有“如果较新则复制”的构建设置。特别是对于控制台项目。
    • 相对路径呢?例如,我可以写&lt;log4net configSource="bin\LogConfiguration.config" /&gt; 吗?
    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2019-03-29
    相关资源
    最近更新 更多