首页 新闻 赞助 找找看

net core 2.2 下使用 log4net 2.0.8 不能输出行号的问题?

0
悬赏园豆:40 [已解决问题] 解决于 2019-04-09 10:08

log4net 2.0.8 下不会正常输出文件名和行号,%file 和 % line 显示为 ?
此外,%location 也输出为?

一字不改 log4net.config,一路将 log4net 的版本降到 2.0.5,输出就正常了!
但是用2.0.5 编译的时候又有个警告

警告 NU1701 已使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETCoreApp,Version=v2.2”还原包“log4net 2.0.5”。此包可能与项目不完全兼容。

请问这是 2.0.5之后版本的BUG,还是log4net改了 Pattern 的标签?

难道就我一个遇到这RPWT?

树欲静·而风不止的主页 树欲静·而风不止 | 初学一级 | 园豆:83
提问于:2019-01-10 13:33
< >
分享
最佳答案
0

等了很久也没查到有谁吐槽这个,实在忍不了,索性下载了log4net的源码,结果看到 LocationInfo.cs 中的构造函数

if !(NETCF || NETSTANDARD1_3) // StackTrace isn't fully implemented for NETSTANDARD1_3 https://github.com/dotnet/corefx/issues/1797

...

end if

合着打2015年起,log4net 压根就没有为.net core实现这个(当时的 .net standard 1.3 没有完全实现 StackTrace 的接口),这么多年过去了,哪怕 .net standard 2.0 早就更新了 StackTrace, 可 log4net 的 net standard 版本一直就停在了 1.3。

至于为啥 2.0.5 可以支持行号输出,是因为 2.0.5 压根儿就不支持.net standard, .net core对 log4net 的调用实际是通过 .net Framework 4.5 实现的,所以在 Windows 上跑不会出啥问题,真要跨平台就现原形了。

试着改了一下 log4net 的源码,想在 .net standard 2.0 下重新编译,结果不知道这个工程是怎么组织的,平台切到 2.0 下,工程里面的源码文件直接就不见了,从1.0~2.0 挨个切换了一圈,就 1.3 底下能看到源码。我自认学艺不精,暂时处于绝望中……

树欲静·而风不止 | 初学一级 |园豆:83 | 2019-04-06 23:09
其他回答(2)
0

好像.net core有新的日志组件

日暮青色 | 园豆:473 (菜鸟二级) | 2019-04-09 14:20
0

Adming | 园豆:119 (初学一级) | 2019-04-09 14:57

长见识了,这40分应该给你。

另外我试了另一个知名日志组件NLog,在.net standard 2.0 下正常工作,也算是西方不亮东方亮 。

支持(0) 反对(0) 树欲静·而风不止 | 园豆:83 (初学一级) | 2019-04-09 22:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册