我试图在我的c# ASP.net Core2.2应用程序中使用ASP.net,但是当我使用这些模式时,它们会给我带问号的输出。
My log4net.config:
<?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>在写入日志之后,该文件如下所示:
2019-04-17 11:48:44,230 | INFO | [1] | ? ? ? - abc知道为什么会发生这样的事吗?如何解决?我看到了一些使用这些模式的教程并试图从它们中复制,但是结果是一样的.也许我的配置出了什么问题?
从here中,我知道我只需将文件名和行添加到我的消息中,但我想先在配置文件中尝试一个修复。
谢谢。
发布于 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
所以className,fileName,lineNumber,methodName,fullInfo都是不可用的。
https://stackoverflow.com/questions/55724516
复制相似问题