【发布时间】:2011-01-05 08:37:00
【问题描述】:
您好,我正在尝试在 WCF IIS 托管服务中使用 Log4Net,但它不记录任何数据。 有没有人使用 Log4Net 登录 WCF 服务?
【问题讨论】:
-
必须与您设置配置的方式有关..检查 eventvwr 以查看是否列出了任何错误..还有您在哪里指定了 lof4net 设置。
您好,我正在尝试在 WCF IIS 托管服务中使用 Log4Net,但它不记录任何数据。 有没有人使用 Log4Net 登录 WCF 服务?
【问题讨论】:
我在自托管 WCF 应用程序中的项目中成功使用 log4net。
我们的设置步骤相当简单。
将以下行添加到上述项目的 AssemblyInfo.cs 文件(允许指定自定义 log4net 配置文件,log4net 将“监视”更新。快,但可能有点脏..)
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
将log4net.config文件添加到console项目,并复制到输出目录(文件属性:“复制到输出目录”)
将记录器声明为需要记录的类的私有静态成员:
private static readonly log4net.ILog Logger =
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
在需要的地方记录:
Logger.Info("Starting console service host");
这篇文章几乎涵盖了它:http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx
【讨论】:
要注意的另一件事是,当您在 Wcf 端点的单独程序集中定义自定义 WCF ServiceHostFactory(例如,保持 DRY)时,定义工厂的程序集是来自的“根”程序集log4net 的观点和XmlConfigurator 属性需要在该程序集中声明。
这个常见问题解答http://logging.apache.org/log4net/release/faq.html#trouble-webapp-stops-logging 和链接的 cmets 说明 log4net 想要尽快初始化
【讨论】:
使用程序集属性配置 log4net 将不起作用,因为 log4net 不会检查配置文件的正确目录。也许您可以在指定配置文件时尝试使用一些相对路径,但使用建议的解决方案之一更容易here。
【讨论】:
我在 IIS 7 中托管的 MSMQ 激活 WCF 服务中使用 log4net。我使用 Ninject 进行依赖注入并安装了 Ninject.Extensions.Wcf、Ninject.Extensions.Logging.log4net NuGet 包并将 log4net 配置部分添加到 Web.config 文件。
我看到有人建议将 log4net 初始化代码添加到 Global.asax,但据我所知,这不适用于 MSMQ 激活的服务。但是,Ninject 安装了 WebActivator 包,允许您在 Web 应用程序启动时运行初始化代码。 Ninject 将自己的代码放入 App_Start\NinjectWebCommon.cs。要配置 log4net,您需要将代码添加到 Start 方法。我的看起来像这样:
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
// configure log4net
XmlConfigurator.Configure();
bootstrapper.Initialize(CreateKernel);
}
【讨论】:
我遇到了同样的问题,这是因为我使用的是自定义配置文件的相对路径。我使用了以下代码行:
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));
通过 log4nets 调试输出,它告诉我它正在根 IIS 目录中查找 log4net.config 文件,而不是在我的应用程序路径中的任何位置。
因此,将行更改为更直接的内容以避免此问题(如果您也以这种方式配置自定义配置):
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(@"G:\MyProject\log4net.config"));
【讨论】:
Iısusr 许可 好的。
授予写入和修改权限。
Assamble.cs
在末尾添加:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
【讨论】: