首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >log4net写“?”当我使用‘’%type,%方法和%line`‘模式时

log4net写“?”当我使用‘’%type,%方法和%line`‘模式时
EN

Stack Overflow用户
提问于 2019-04-17 09:39:15
回答 1查看 1K关注 0票数 4

我试图在我的c# ASP.net Core2.2应用程序中使用ASP.net,但是当我使用这些模式时,它们会给我带问号的输出。

My log4net.config:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="C:\Temp\app.log" />
    <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%date | %level | [%thread] | %type %method %line - %message%n" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="RollingFile" />
  </root>
</log4net>

在写入日志之后,该文件如下所示:

代码语言:javascript
运行
复制
2019-04-17 11:48:44,230 | INFO | [1] | ? ? ? - abc

知道为什么会发生这样的事吗?如何解决?我看到了一些使用这些模式的教程并试图从它们中复制,但是结果是一样的.也许我的配置出了什么问题?

here中,我知道我只需将文件名和行添加到我的消息中,但我想先在配置文件中尝试一个修复。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 10:11:51

我复制-粘贴您的配置到我的项目,它的工作,如预期的。你是在发行版还是调试版运行项目的?你读过那些模式的局限性吗?

关于呼叫者位置信息的注意事项。下面的模式%type %file %line %method %location %class %C %F %L %l %M都会生成调用方位置信息。位置信息使用System.Diagnostics.StackTrace类生成调用堆栈。然后从这个堆栈中提取调用者的信息。 System.Diagnostics.StackTrace类在.NET CompactFramework1.0中不受支持,因此调用方位置信息在该框架中不可用。 关于发行版构建,System.Diagnostics.StackTrace类有如下内容: 使用Debug构建配置,StackTrace信息将提供最丰富的信息。默认情况下,Debug生成包含调试符号,而发行版生成不包含调试符号。调试符号包含大多数用于构造StackFrame和StackTrace对象的文件、方法名称、行号和列信息。由于优化过程中发生的代码转换,StackTrace可能报告的方法调用不像预期的那样多。 --这意味着在发行版构建中,调用方信息可能是、不完整或者根本不存在!因此,在发布版本中不能依赖调用方位置信息。

编辑

在.net核心/ .net标准中,StackTrace不完全受支持:

https://github.com/apache/logging-log4net/blob/master/src/Core/LocationInfo.cs#L86

所以classNamefileNamelineNumbermethodNamefullInfo都是不可用的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55724516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档