You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1控制台应用无视日志级别打印所有Trace日志问题

问题产生原因
  • 核心逻辑错误:TraceSwitch暴露的TraceError/TraceWarning/TraceInfo/TraceVerbose成员是布尔类型的判断属性,作用是返回当前开关配置下对应级别的日志是否允许输出,并非待打印的日志内容。你将这几个布尔值直接作为Trace.WriteLine的消息参数传入,自然会在每条日志末尾打印True/False,且WriteLine方法默认无条件执行,因此所有级别日志都会被输出。
  • 未使用条件输出方法:Trace类不会自动关联你实例化的TraceSwitch做过滤,直接调用Trace.WriteLine会无视开关配置输出所有传入内容,必须通过条件判断或专用的条件输出方法,才能实现按级别过滤。
  • 配置文件复制问题(潜在坑点):如果没有将appsettings.json设置为复制到输出目录,运行时会找不到配置文件,TraceSwitch会使用默认值Off,所有日志都不会输出。你当前的运行结果说明配置绑定已生效,该问题不是本次异常的诱因,但调整时需要确认。
修复方法
  1. 替换原有的四行Trace.WriteLine调用,改用Trace.WriteLineIf条件输出方法:将对应级别的布尔判断属性作为第一个条件参数,真正的日志文本作为第二个消息参数。修正后的输出代码如下:
Trace.WriteLineIf(ts.TraceError, "Trace error");
Trace.WriteLineIf(ts.TraceWarning, "Trace warning");
Trace.WriteLineIf(ts.TraceInfo, "Trace info");
Trace.WriteLineIf(ts.TraceVerbose, "Trace verbose");
  1. 右键点击项目中的appsettings.json文件,在属性窗口将「复制到输出目录」设置为如果较新则复制,避免运行时丢失配置。

修复后重新执行dotnet run --configuration Release,当日志级别设置为Warning时,仅会输出Error和Warning级别的日志,无多余布尔后缀,和书中预期结果完全一致。

补充说明:TraceLevel枚举的级别从宽松到严格排序为:Verbose > Info > Warning > Error > Off,设置为某一级别时,会自动开放所有优先级高于等于该级别的日志输出权限。

内容的提问来源于stack exchange,提问作者teefour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:48:19