您好我正在尝试在WCF IIS托管服务中使用Log4Net,但它不会记录任何数据。 有没有人使用Log4Net实现了WCF服务的登录?
答案 0 :(得分:8)
我在自托管的WCF应用程序中成功地在我的项目中使用了log4net。
我们的设置步骤相当简单。
将以下行添加到上面项目的AssemblyInfo.cs文件中(允许指定自定义log4net配置文件,log4net将“监视”更新。快速,但可能有点脏......)
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
将log4net.config文件添加到控制台项目并将其复制到输出目录(文件属性:“复制到输出目录”)
将记录器声明为需要记录的类的私有静态成员:
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
答案 1 :(得分:1)
另外要注意的是,当您在Wcf端点的单独程序集中定义了自定义WCF ServiceHostFactory
时(例如保持DRY),那么定义工厂的程序集就是“根”从log4net的角度来看,需要在该程序集中声明XmlConfigurator
属性。
此常见问题http://logging.apache.org/log4net/release/faq.html#trouble-webapp-stops-logging及相关评论说明log4net希望尽快初始化
答案 2 :(得分:0)
使用assembly属性配置log4net将不起作用,因为log4net不会检查配置文件的正确目录。也许你可以在指定配置文件时尝试使用一些相对路径,但更容易使用建议的解决方案之一here。
答案 3 :(得分:0)
我在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);
}
答案 4 :(得分:0)
我遇到了同样的问题,这是因为我在使用自定义配置文件的相对路径。我使用了以下代码行:
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));
通过log4nets调试输出,它告诉我它正在IIS根目录中而不是在应用程序路径中的任何位置寻找log4net.config文件。
因此,将行更改为更直接的名称以避免此问题(如果您还以这种方式配置自定义配置):
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(@"G:\MyProject\log4net.config"));