【问题标题】:log4net logger configurationlog4net 记录器配置
【发布时间】:2010-12-29 06:42:05
【问题描述】:

是否可以从配置中设置记录器。我有一个网络应用程序 使用框架。该框架是可扩展的并且具有记录器。 当前,当我登录时,记录器设置为框架类。

我是否可以配置我的网络应用程序并将网络应用程序的记录器设置为 loggerForWebApp 和控制台应用程序的记录器(使用 相同的框架)到loggerForConsoleApp?

【问题讨论】:

  • 正如我在回答中所描述的那样,这是可能的。但是为什么要在这两个应用程序之间共享 log4net 配置呢?您能否将控制台应用程序与您的网络应用程序隔离开来,并且仍然能够使用您的框架,或者它是否与网络应用程序绑定在一起?
  • 不,我不会在 2 个应用程序之间共享它。我想在运行时从 2 个具有不同值的不同 app/web.configs 中获取它。
  • 对。那么为什么需要在控制台 app.config 中使用 webapp 记录器或在 web.config 中使用 consoleapp 记录器?我想我没有看到你问题的全部背景......
  • 嘿彼得。我想我没有正确表达我的问题。我将有 2 个应用程序使用相同的框架(因此使用相同的日志记录类)。记录器将被初始化为私有static ILog Logger = LogManager.GetLogger(ConfigurationManager.AppSettings["Logger"].ToString());。在我的 web.config 中,我会将“appsettings”设置为“webAPPLogger”,在我的 consoleApp 中,我会将“Logger”的“appSettings”设置为“ConsoleAppLogger”。他们可以写入相同/不同的数据库,现在我会知道哪个应用程序正在记录以及它正在记录什么

标签: configuration logging web-config log4net


【解决方案1】:

除了根记录器(必须始终存在)之外,您还可以使用自己的 appender-refs 和级别命名记录器。

例如,你可以有这样的东西:

<root>
....
</root>

<logger name="loggerForWebApp">
    <level value="WARN" />
    <appender-ref ... />
</logger>

<logger name="loggerForConsoleApp">
    <level value="WARN" />
    <appender-ref ... />
</logger>

在代码中,您可以通过它们的名字来召唤这些记录器:

var log = LogManager.GetLogger("loggerForWebApp");

【讨论】:

    【解决方案2】:

    毫无疑问,这是 log4net 的一大优点:它可以注销到各种记录器。

    有关附加程序的示例,请参阅here。最常用的可能是RollingFileAppender,但ConsoleAppender 对于控制台应用程序可能非常方便。或者,TraceAppender 可以写入标准 .NET 跟踪侦听器以进行进一步重定向(或显示在 Visual Studio 的调试输出窗口中)。

    要创建自己的,请实现IAppender

    详细信息

    【讨论】:

    • @Ram 不是在询问附加程序,而是在询问记录器。 log4net 世界中有两个不同的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多