【问题标题】:Appenders list empty in Logger for Log4netLog4net 的 Logger 中的 Appenders 列表为空
【发布时间】:2017-06-20 00:07:25
【问题描述】:

我有以下配置:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date{ABSOLUTE} 
    [%thread] %level %logger - %message%newline"/>
    </layout>
  </appender>

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\Log.txt" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <maximumFileSize value="5MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date{ABSOLUTE} 
    [%thread] %level %logger - %message%newline" />
    </layout>
    <encoding value="utf-8" />
  </appender>

  <logger name="TraceLogger" additivity="false">
    <level value="INFO" />
    <appender-ref ref="RollingFileAppender"/>
    <appender-ref ref="ConsoleAppender" />
  </logger>
</log4net>

我已经在 XmlConfigurator 上运行了配置:

static class ProgramEntry
{
    static void Main(string[] args)
    {
        log4net.Config.XmlConfigurator.Configure();
        ...

我的 web.config 有:

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />    
  </configSections>

...

<log4net configSource="Config\log4net.config" />

...




<system.diagnostics>
    <trace autoflush="true" indentsize="0">
      <listeners>
        <add name="Log4NetTraceListener" type="BLAH.Log4netTraceListener, BLAH" />
      </listeners>
    </trace>
  </system.diagnostics>

我有一个 Trace 监听器实现:

public class Log4netTraceListener : System.Diagnostics.TraceListener
{
    private readonly ILog log;

    public Log4netTraceListener()
    {
        log = LogManager.GetLogger("TraceLogger");

        // disable logging to trace write if logging fails, or else we'll end up in a deadlock.
        log4net.Util.LogLog.EmitInternalMessages = false;
    }

    private string level = "Info";

    public override void Write(string message)
    {
        if (message.Contains("Error:"))
        {
            level = "Error";
        }
        else if (message.Contains("Warning:"))
        {
            level = "Warning";
        }
        else if (message.Contains("Information:"))
        {
            level = "Info";
        }
        else
        {
            if (log != null)
            {
                LogMessage(message);
            }
        }
    }

    public override void WriteLine(string message)
    {
        if (log != null)
        {
            LogMessage(message);
        }

        // reset the level
        level = "Info";
    }

    private void LogMessage(string message)
    {
        if (level == "Info")
        {
            log.Info(message);
        }

        if (level == "Error")
        {
            log.Error(message);
        }

        if (level == "Warning")
        {
            log.Warn(message);
        }
    }
}

Trace 监听器开始运行,似乎找到了“TraceLogger”,但它的 appenders 集合是空的。

我可能做错了什么?真正的问题是

编辑

发现错误:

log4net:ERROR 无法解析配置文件。是个 指定为: System.Configuration.ConfigurationErrorsException:无法打开 configSource 文件“Config\log4net.config”。 (C:\Users\awdawd\Documents\Visual Studio 2015\Projects\BLAH\BLAH\BLAH\bin\Debug\DataFactoryPreparationManager.exe.Config 第 36 行)

我的 app.config 在根目录下,我的 Config 文件夹在这个目录下

【问题讨论】:

  • configSource 文件路径相对于配置文件本身的位置。它也只能引用自己目录中的文件/文件夹。
  • 我的 app.config 在我的项目的根目录中。我错过了什么吗?我的 Config 文件夹在这个目录下
  • 运行时在哪里?您的应用程序实际上是从bin\Debug 文件夹运行的吗? (错误消息表明确实如此) log4net 配置文件是否复制到bin\Debug\Config
  • 天哪,我的解决方案中的文件是 log4net.config,但每当我保存它时,它都会变成大写 Log4Net.config。到底是什么

标签: log4net


【解决方案1】:

确保通过 Visual Studio 中文件的“复制到输出目录”属性将 log4net.config 复制到 bin\Debug\Config。 在解决方案资源管理器中右键单击该文件并选择“属性”。

【讨论】:

  • 我已经完成了,我现在在调用 GetLogger("TraceLogger") 时遇到 System.StackOverflowException
  • 啊,我找到了。 log.txt 文件实际上存储在 bin/Debug/Logs 文件夹中。不是我想的地方。显然没有附加程序意味着什么:)
  • 它让我查看了那个文件夹,然后我发现日志实际上正在被写出。我不需要复制到输出目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多