我有一个单独的类库,其中包含一个静态类,其中包含了Log4Net的使用。 这样的事情(见下文)。
public static class Logger
{
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static Logger()
{
log4net.Config.XmlConfigurator.Configure();
log = log4net.LogManager.GetLogger(typeof(Logger));
log.Logger.IsEnabledFor(log4net.Core.Level.All);
}
public static void Error(object msg)
{
log.Error(msg);
}
public static void Error(object msg, Exception ex)
{
log.Error(msg, ex);
}
}
我无法记录任何内容。当我进入代码时,我会看到一些对象上的消息,例如ConfigurationMessage:
{log4net:错误XmlConfigurator:无法找到配置部分 ' log4net的'在应用程序的.config文件中。检查.config文件 对于和元素。配置 部分看起来应该像:}
这个类的assemblyinfo.cs,我添加了这个
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
所以,显然,它无法找到这个文件?该程序集正在从ASP.Net MVC Web应用程序中使用,并且在编译时,log4net.config被复制到/ bin文件夹中,所以它在那里,但它无法找到?
答案 0 :(得分:1)
程序集属性配置与Web应用程序不能很好地协作,尤其是当主程序集中的程序集属性不存在时。
而是使用引用文件本身的XmlConfigurator.Configure
重载:
// or wherever your file is
var fileInfo = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");
if (fileInfo.Exists)
log4net.Config.XmlConfigurator.Configure(fileInfo);
else
throw new InvalidOperationException("No log config file found");