c# - 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 复选标记)。这些代码优化可能是问题所在吗?
解决方案
推荐阅读
- python - 基于参数的 Python 方法
- javascript - 在反应中将音频文件转换为wav
- pandas - 使用 cudf 数据框搜索索引不适用于 numpy
- javascript - 在 javascript 或 jquery 中复制 SQL 查询
- javascript - 过滤对象数组中的 2 个元素
- c# - 无法理解这个 blazor 函数是如何工作的 c#
- css - 调整蒸馏文档中的图形大小/位置
- javascript - div 中的类在创建后未正确反映在 HTML 中
- postgresql - PostgreSQL:无法更新(冲突更新)列是驼峰式的
- javascript - 将双星号转换为粗体标签