.net6 asp:在容器内运行时,默认输出日志格式为 json

Posted

技术标签:

【中文标题】.net6 asp:在容器内运行时,默认输出日志格式为 json【英文标题】:.net6 asp : Default output logs are formatted as json when run inside container 【发布时间】:2021-11-25 08:44:17 【问题描述】:

我刚刚将我的 asp web api 项目从 net5 升级到 net6,而没有触及任何代码。一切正常,但我注意到当在容器内运行时,日志输出显示为一系列串联的 Json 对象,而不是预期的控制台格式。

之前

info: Microsoft.Hosting.Lifetime[14]
  Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[14]
  Now listening on: http://localhost:5000

之后

"EventId":14,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Now listening on: https://[::]:5001","State":"Message":"Now listening on: https://[::]:5001","address":"https://[::]:5001","OriginalFormat":"Now listening on: address"
"EventId":14,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Now listening on: http://[::]:5000","State":"Message":"Now listening on: http://[::]:5000","address":"http://[::]:5000","OriginalFormat":"Now listening on: address"

我不知道问题是来自发送到 std 的实际日志结构的修改还是来自容器引擎(在我的例子中是 docker)。

它在容器外的控制台中运行良好。

有什么想法吗?

【问题讨论】:

【参考方案1】:

显然,控制台日志记录的默认格式已从“简单”更改为“Json”。

您可以通过将此行添加到您的 Dockerfile 来更改它(如果您进行多阶段构建,它会在最终映像中结束):

ENV Logging__Console__FormatterName=Simple

您无法在 appsettings.json 文件中更改它,因为 Microsoft 在其 Docker 映像中设置了环境变量,这将覆盖您配置文件中的任何设置。你必须设置环境变量。

这里有一个关于更改的未解决问题:https://github.com/dotnet/dotnet-docker/issues/3274

【讨论】:

谢谢,设置这个环境变量可以解决问题 @MCabrolier 太好了。请您将答案标记为已接受吗? 抱歉,完成

以上是关于.net6 asp:在容器内运行时,默认输出日志格式为 json的主要内容,如果未能解决你的问题,请参考以下文章

轻松搞定对容器实例日志设置定期清理和回卷

简述Kubernetes容器日志收集原理!

Docker容器日志管理介绍

docker一次查看两个容器日志

K8S日志收集:容器日志输出JSON,自动采集至ES

如何通过 uwsgi 强制应用程序的标准输出日志?