我有一个 Docker 容器,它通过 udp 将其日志发送到 Graylog。以前我只是用它来输出原始消息,但现在我想出了一个以 GELF 格式记录的解决方案。但是,Docker 只是将其放入“消息”字段(来自 Graylog Web 界面的屏幕):
或纯文本:
{
"version":"1.1",
"host":"1eefd38079fa",
"short_message":"Content root path: /app",
"full_message":"Content root path: /app",
"timestamp":1633754884.93817,
"level":6,
"_contentRoot":"/app",
"_LoggerName":"Microsoft.Hosting.Lifetime",
"_threadid":"1",
"_date":"09-10-2021 04:48:04,938",
"_level":"INFO",
"_callsite":"Microsoft.Extensions.Hosting.Internal.ConsoleLifetime.OnApplicationStarted"
}
GELF-driver 在 docker-compose 文件中配置:
logging:
driver: "gelf"
options:
gelf-address: "udp://sample-ip:port"
如何让 Docker 只转发这些已经格式化的日志?有没有办法处理这些日志并将它们作为自定义字段附加到 docker 日志?完美的解决方案是以某种方式启用 gelf 日志驱动程序,但禁用预处理/格式化,因为日志已经是 GELF。
PS。对于日志,我使用 NLog 库、C# .NET 5 及其 NuGet 包https://github.com/farzadpanahi/NLog.GelfLayout