我有一个Windows服务,其中app.config文件和log4net.config文件是分开的。日志记录无效。

在我的app.config文件中,我在以下部分中有以下内容:

<add key="log4net.Config" value="log4net.config"/>

如果在值中指定了log4net.config文件的绝对路径,则此方法有效。

我是否需要提供log4net.cong的绝对路径? log4net.config和app.config文件都与可执行文件位于同一文件夹中。

任何想法?

Parag

有帮助吗?

解决方案

也许这很有帮助(将您的Log4Net配置移出web.config使用ASP.NET 2.0网站。)。

以下是您可能感兴趣的部分:

  

告诉应用程序进行配置   log4net使用此配置文件。那里   这真的是两个地方。第一,   global.asax和第二个   assemblyInfo.cs文件。请注意,大多数   当你开始的时候   global.asax文件包含所有代码   排队。无论出于何种原因,唯一的   我可以得到这个工作的方式   打破global.asax使用a   代码隐藏然后屁股   assemblyInfo.cs文件。所以它最终结束了   看起来像这样。

     

global.asax中:   <!> lt;%@ Application Language = <!> quot; C#<!> quot;继承= QUOT <!>; <!> GlobalAsax QUOT; %GT <!>;   global.asax.cs(在你的App_Code文件夹中):

using System;
using System.Web;

public class GlobalAsax : HttpApplication
{
    // you may have lots of other code here
    void Application_Start(object sender, EventArgs e)
    {
        log4net.Config.XmlConfigurator.Configure();
    }
}
  

现在你有了申请   你调用log4net的配置   可以在程序集中设置属性   信息,以便log4net知道在哪里   寻找配置文件。   AssemblyInfo.cs(在您的App_Code   文件夹):

     

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

     

watch标志告诉log4net保持一个   关注配置文件   潜在的变化。这有用   您想要更改配置   从记录everthing到仅错误   在测试过程中。

要确保log4net.config始终存在,请将log4net.config添加到csproject,并将其设置为CopyAlways。它应该出现在debug文件夹中。

您可以使用脚本将所有内容复制到发布文件夹,或者如果您使用的是MS安装项目,请手动将该文件添加到项目中。然后将添加引用。

其他提示

对于Windows服务,当前目录是Windows \ system32 - 并且XmlConfigurator.Configure()使用FileInfo来处理相对于当前目录的相对路径。所以log4net正在Windows \ system32中寻找它的配置文件。

另一方面,

XmlConfiguratorAttribute使用应用程序的BaseDirectory,这就是它始终有效的原因。

或者,您可以在调用XmlConfigurator.Configure()之前执行以下操作:

System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top