log4net - 来自程序集属性的Log4net配置不会加载配置文件

标签 log4net log4net-configuration

我的bin目录中有以下文件Log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<log4net xmlns="urn:log4net">
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <param name="file" value="MyLogFile.log"/>
        <param name="appendToFile" value="false"/>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date (%logger) [%5level] - %message" />
        </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date (%logger) [%5level] - %message" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
        <appender-ref ref="ConsoleAppender"/>
    </root>
    <logger name="NHibernate" additivity="false">
        <level value="WARN"/>
    </logger>
</log4net>

我的AssemblyInfo.cs文件中包含以下代码:

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyTitle("My Project")]
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4net.config", Watch = true)]

运行程序时,将得到以下log4net调试输出:
log4net: log4net assembly [log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821]. Loaded from [D:\Data\Projects\Active\Clients\MyProject\src\MyProject.Importer\bin\Debug\log4net.dll]. (.NET Runtime [4.0.30319.1] on Microsoft Windows NT 6.1.7600.0)
log4net: DefaultRepositorySelector: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy]
log4net: DefaultRepositorySelector: Creating repository for assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null]
log4net: DefaultRepositorySelector: Assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] Loaded From [D:\Data\Projects\Active\Clients\MyProject\src\MyProject.Importer\bin\Debug\MyCompany.Framework.dll]
log4net: DefaultRepositorySelector: Assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified.
log4net: DefaultRepositorySelector: Assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net: DefaultRepositorySelector: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy]
The thread 'vshost.RunParkingWindow' (0xd30) has exited with code 0 (0x0).
The thread '<No Name>' (0x15d0) has exited with code 0 (0x0).
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository]

Log4net已加载,但似乎未处理我的配置文件。当我在AssemblyInfo.cs中注释掉该属性并在程序初始化期间运行以下代码时,它将按预期工作:

var log4netConfig = "Log4net.config";
var log4netInfo = new FileInfo(log4netConfig);
log4net.Config.XmlConfigurator.ConfigureAndWatch(log4netInfo);

我究竟做错了什么?我想从AssemblyInfo.cs加载。

最佳答案

我也无法使用这种增强log4net的方法。 documentation说您必须在应用程序启动时尽早打电话

if you use configuration attributes you must invoke log4net to allow it to read the attributes. A simple call to LogManager.GetLogger will cause the attributes on the calling assembly to be read and processed. Therefore it is imperative to make a logging call as early as possible during the application start-up, and certainly before any external assemblies have been loaded and invoked.



尝试将记录器放在启动应用程序的同一类中(program.cs,app.xaml等)。例如
private static readonly ILog Log = LogManager.GetLogger(typeof(Program));

对于踢,请对日志进行任何调用(即使是从附加过程中筛选或评估的日志,也应强制log4net评估您的存储库/层次结构)。
static Program()
{
    Log.Debug("Application loaded.");
}

关于log4net - 来自程序集属性的Log4net配置不会加载配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3971250/

相关文章:

log4net - Biztalk Log4Net

c# - 有人能告诉我我的 log4net 配置/实现有什么问题吗?

c# - 在设置应用程序期间使用 Log4Net

c# - 以编程方式设置文件名时,带有 MinimalLock 锁定模型的 log4net 不起作用

log4net - 使用自定义主题配置或扩展 log4net SmtpAppender

c# - 如何在Asp.net core 2.0中使用log4net

asp.net - 如何在 Log4Net 目录中指定日期?

c# - log4net可以输出Json吗?

nhibernate - 使用 asp mvc 2 和 nhibernate 的单个网站多个​​连接字符串

log4net - 如何让 log4net 帮助我在 %message 中记录结构化数据?