首页 > 解决方案 > Log4Net 在发布版本中没有显示类名或行号

问题描述

我们使用一个静态记录器类,它在内部利用 Log4Net 来创建我们的日志文件。当我们在调试模式下运行应用程序时,一切正常并且我们得到正确的日志。然而,在发布模式下运行应用程序会产生不正确的日志条目,其中缺少类名、方法名和行号。

我怀疑构建中缺少一些调试信息,但我还没有找到解决方案来解决如何在不实际在调试模式下编译的情况下向 Log4Net 提供这些信息。

我试图在网上找到这个问题,但我找不到任何人有同样问题的线程(或者我搜索错误)。

我们用于记录的静态类如下所示:

using System;
using log4net.Core;

namespace Diagnostics
{
    public static class MessageHandling
    {
        private static readonly LoggerFacade Logger = LoggerFacade.GetLoggerWrapper();

        public static void SendDebug(string message)
        {
            Send(message, Level.Debug);
        }
    }

LoggerFacade看起来像这样:

public class LoggerFacade
    {
        private static LoggerFacade _loggerFacade;
        private static readonly ILogger Logger = LogManager.GetLogger(typeof(LoggerFacade)).Logger; 

        public static LoggerFacade GetLoggerWrapper()
        {
            if (_loggerFacade != null) return _loggerFacade;
            _loggerFacade = new LoggerFacade();
            GlobalContext.Properties["pid"] = Process.GetCurrentProcess().Id;
            return _loggerFacade;
        }

        public void Log(string message, Level level, Type declaringType = null, Exception exception = null)
        {
            Logger.Log(declaringType ?? typeof(LoggerFacade), level, message, exception);
        }
    }

日志消息应该(并且在调试模式下)看起来像这样:

2019-08-23 11:09:15,019 INFO [1] [MyClass] (MyMethod) 'Line: 1' -> Message

但在发布模式下,它们看起来像这样:

2019-08-23 11:09:15,019 INFO [1] [?] (?) 'Line: ?' -> Message

编辑:PDB 文件包含在发布版本中,并且版本是使用代码优化构建的(Visual Studio 复选标记)。这些代码优化可能是问题所在吗?

标签: c#log4netrelease-mode

解决方案


推荐阅读