【问题标题】:log4net doesn't create a log file for a referenced project filelog4net 不会为引用的项目文件创建日志文件
【发布时间】:2011-03-14 22:19:37
【问题描述】:

我正在构建一个调用已编译可执行文件的应用程序。所述可执行文件的源代码项目文件被父应用程序的解决方案文件引用。子可执行文件是一个独立的命令行应用程序。父级实际上是控制台应用程序的 GUI 包装器。当我编译控制台应用程序时,我可以访问应用程序中内置的所有 log4net 功能。但是,当我编译引用控制台应用程序源代码文件的父项目时,一切运行正常,但没有生成日志。什么会导致此错误发生,如何解决此问题? log4net 的内部调试机制不会抛出任何消息。

【问题讨论】:

    标签: c# log4net dependencies logging


    【解决方案1】:

    我知道为时已晚,但无论如何仅供参考。 在您的应用程序中设置 log4net.Internal.Debug = true ,您可能会在控制台上看到问题。 (以编程方式执行此操作,因为您的应用程序可能无法找到它的配置文件,这就是我的情况)

    在进程 p 上,在使用 p.start() 执行进程后,尝试将 stdout 写入控制台; Console.write(p.StandardOutput.ReadToEnd());

    您应该能够看到问题所在。 (为什么 log4net 没有被配置或者为什么它没有记录) 在我的例子中,它在父进程的工作目录中寻找 app.config 文件。 (我的应用程序及其配置存在于文件系统的其他位置)

    【讨论】:

      【解决方案2】:

      要让 log4net 在引用的程序集中开始记录,您必须:

      • 通过在应用程序启动时调用 log4net.Config.XmlConfigurator.Configure() 或通过将 [assembly: log4net.Config.XmlConfigurator(Watch=true)] 添加到包装应用程序的 AssemblyInfo.cs 文件来调用 log4net 的 Configure() 函数。
      • 如果您还没有这样做,请在 app.config 中为您的 GUI 包装器创建一个 log4net 配置部分。将 app.config 文件添加到您的项目中,并将您的 log4net 配置信息从引用的库中复制到其中。
      • 确保运行应用程序的帐户有权在日志目录中写入和创建文件(假设您使用基于文件的日志记录)。

      有关设置配置的更多信息,请参阅:http://logging.apache.org/log4net/release/manual/configuration.html

      【讨论】:

      • GUI 已经正确实现 log4net 并运行。两者都使用了 assemblyinfo.cs 修饰方法。
      • 如果是这种情况,那么应该进行 log4net 配置。 GUI 应用程序是否有应用程序配置文件,使用 log4net 配置部分设置?最后,GUI 应用程序日志记录的问题是一直发生还是偶尔发生?
      • 每个应用程序都有一个单独的 app.config 文件,该文件设置为使用 log4net。此问题持续发生,当 GUI 调用时,控制台应用程序中的日志记录功能从未出现过。任何设置为启动项目的项目都是唯一可以访问日志记录支持的项目,尽管应用程序中的其他所有内容都可以按需要运行。
      • 谢谢。您能否为 GUI 应用程序发布应用程序配置文件的 log4net 部分?如果我正确阅读了您的回复,那么您是说 GUI 应用程序的其他区域确实具有日志记录支持,并且只是有关由 gui 调用的控制台应用程序的部分没有记录。准确吗?
      • GUI 中调用记录器的任何东西都可以正常工作。 GUI 通过调用独立控制台应用程序的 Process() 命令工作。控制台应用程序的源代码设置为 GUI 的项目依赖项。控制台应用程序对记录器的调用是从 GUI 中遗漏的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2014-07-29
      • 1970-01-01
      • 2011-02-12
      • 2012-11-03
      相关资源
      最近更新 更多