log4net未为引用的项目文件创建日志文件。

4

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

2个回答

8

要使log4net开始记录所引用程序集中的日志,您需要:

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

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


GUI已经正确地实现并运行了log4net。两者都使用assemblyinfo.cs装饰方法。 - XBigTK13X
GUI中调用记录器的任何内容都可以正常工作。GUI通过Process()命令调用独立的控制台应用程序来工作。控制台应用程序的源代码被设置为GUI的项目依赖项。由控制台应用程序发出的记录器调用是从GUI中省略的部分。 - XBigTK13X
因此,在GUI应用程序的输出文件夹中(例如bin \ Debug),您应该有一个GUI进程的.exe,一个GUI进程的.exe.config,一个控制台进程的.exe和一个控制台进程的.exe.config。由于听起来您正在调用控制台应用程序作为单独的进程,我认为您需要在构建输出中拥有两个.config文件,因为控制台应用程序仍将依赖于自己的配置文件。您能确认这两个配置文件都在那里吗? - Joe
控制台应用程序的.config文件不存在于输出目录中。GUI的.config文件在那里。但是,控制台应用程序中的app.config设置为“始终复制”。 - XBigTK13X
为了解决这个问题,我将每个应用程序的app.config重命名为<applicationname>.exe.config。这确实解决了问题,但是有没有更好的解决方案呢? - XBigTK13X
显示剩余3条评论

1

我知道现在可能有点晚了,但是还是为了参考一下。 在你的应用程序中设置log4net.Internal.Debug = true,你就可以在控制台上看到问题了。(由于你的应用程序可能无法找到它的配置文件,这正是我的情况,所以要通过编程方式来实现)

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接