我有一个Windows服务,其中app.config文件和log4net.config文件是分开的.日志记录无效.
在我的app.config文件中,我在以下部分中有以下内容:
<add key="log4net.Config" value="log4net.config"/>
Run Code Online (Sandbox Code Playgroud)
如果在值I中指定了log4net.config文件的绝对路径,则此方法有效.
我是否需要提供log4net.cong的绝对路径?log4net.config和app.config文件都与可执行文件位于同一文件夹中.
有任何想法吗?
Parag
Gra*_*ton 21
也许这很有用(使用ASP.NET 2.0网站将您的Log4Net配置移出web.config.).
以下是您可能感兴趣的部分:
告诉应用程序使用此配置文件配置log4net.这有两个地方.首先是global.asax,第二个是assemblyInfo.cs文件.请注意,大多数情况下,您将使用包含所有内联代码的global.asax文件开始.无论出于何种原因,我可以使用它的唯一方法是将global.asax分解为使用代码隐藏然后使用assemblyInfo.cs文件.所以最终看起来像这样.
global.asax:<%@ Application Language ="C#"Inherits ="GlobalAsax"%> 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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在您的应用程序调用了log4net的配置,您可以在程序集信息中设置一个属性,以便log4net知道在哪里查找配置文件.
AssemblyInfo.cs(在你的App_Code文件夹中):
[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]监视标志告诉log4net密切关注配置文件以查找可能的更改.如果您希望仅在测试过程中将配置更改为仅将错误记录为错误,这将非常有用.
要确保log4net.config始终存在,请将log4net.config添加到csproject,并将其设置为CopyAlways.它应该出现在debug文件夹中.
您可以使用脚本将所有内容复制到发布文件夹,或者如果您使用的是MS安装项目,请手动将该文件添加到项目中.然后将添加引用.
zvo*_*kov 13
对于Windows服务,当前目录是Windows\system32 - 并且XmlConfigurator.Configure()使用FileInfo来处理相对于当前目录的相对路径.所以log4net正在Windows\system32中寻找它的配置文件.
另一方面,XmlConfiguratorAttribute使用应用程序的BaseDirectory,这就是它始终有效的原因.
或者,您可以在调用XmlConfigurator.Configure()之前执行以下操作:
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);
Run Code Online (Sandbox Code Playgroud)