如何为类库包含log4net?

我想将日志function实现到类库中,类库本身在web服务中引用。 我尝试添加app.config并完成所需的一切,但似乎抛出exception时,log4net什么都不做。

我的app.config

 

在AssemblyInfo.cs中:

 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config")] 

在LogManager.cs中:

 private static readonly ILog Log = log4net.LogManager.GetLogger (MethodBase.GetCurrentMethod().DeclaringType); public static void WriteLog(Exception ex) { Log.Error(ex); } 

你能告诉我什么是错的吗? 如何让log4net为我的类库工作?

谢谢

在运行时,除非明确声明,否则始终从主机应用程序使用配置文件。 在这种情况下,使用web.config而不是app.cofig。 而是提及一些其他自定义配置文件名,并确保将文件复制到Web服务的虚拟目录中。 同样如chibacity所说,确保对日志文件的许可。 最好将它保存在web服务主机的app_data文件夹中。

您可以使用某种注射方式,或者构建一个简单的注射方式,例如:

 public interface ILogger { void LogInfo(string message); . . . } 

然后你只需要注入与该接口匹配的东西,比如log4net等的包装器。

但是,我认为最正确的事情是不登录类库。 为什么我这么认为是因为库本身不是应用程序,因此您的Web服务是您的Web服务应该决定记录的内容。 如果要记录exception,请不要在类库中捕获它们,并让Web服务处理日志记录。 这也可以更容易集中日志记录。

请参阅我对以下问题的回答:

在SDK中使用log4net

它有一个日志配置例程,它将构建一个log4net配置文件的完整路径。 当你在网络服务中时,我不会看到你对“app.config”的期望。

还要确保您有权从Web服务写入“D:\ mylogfile.txt”。