我试图将一组以.net-core编写并在docker中运行的服务放在一起。我正在寻找对潜在生产系统至关重要的各个方面。目前,我正在查看日志记录,并遇到了这篇文章:Automating Docker Logging: ElasticSearch, Logstash, Kibana, and Logspout。
这可以正常工作,并可以从Windows计算机上的容器内部运行的Web api监视系统和容器的 Activity ,但是我找不到任何有关如何记录应用程序信息的指南,因此与该应用程序的使用方法相同。容器日志是(例如,记录内部异常)。
在Windows世界中,我将Log4Net与滚动文件附加程序一起使用,并在app.config中定义了日志位置。我也希望它在Docker容器中也一样容易(请记住,在我当前的设置中,logsprout会将容器日志发送到logstash),但是如果是这样,我不知道要定义哪个位置。
所以我有两个问题要解决:
有人对此有见识吗?
最佳答案
如果您希望.NET Core应用程序将日志写入Elasticsearch,并可以通过Kibana进行查询,则可以将记录器提供程序添加到标准Microsoft.Extensions.Logging中。
log4net有一个接收器,如果您最熟悉它,它会写入Elasticsearch,现在还有一个独立的记录器提供程序,它将按照Elasticsearch通用模式(ECS)字段规范https://github.com/sgryphon/essential-logging/tree/master/src/Essential.LoggerProvider.Elasticsearch直接将.NET Core日志记录写入Elasticsearch。
免责声明:我是Essential.LoggerProvider.Elasticsearch的作者
要在您的.NET Core应用程序中使用它,请添加对Essential.LoggerProvider.Elasticsearch包的引用:
dotnet add package Essential.LoggerProvider.Elasticsearch
然后,使用提供的扩展方法在主机构建过程中将提供程序添加到loggingBuilder中。
using Essential.LoggerProvider;
// ...
.ConfigureLogging((hostContext, loggingBuilder) =>
{
loggingBuilder.AddElasticsearch();
})
默认配置将写入运行在http://localhost:9200/的本地Elasticsearch。您可以在appsettings.json中将此配置更改为运行Elasticsearch的位置:
{
"Logging": {
"Elasticsearch": {
"NodeUris": [ "https://elastic-staging.example.com:9200" ],
"Tags": [ "Staging" ]
}
}
}
发送一些日志事件后,请打开Kibana(例如http://localhost:5601/),并使用时间过滤器“@timestamp”为“dotnet- *”定义一个索引模式。
日志事件是根据Elasticsearch通用架构(ECS)约定编写的,因此应与从其他来源(例如节拍。
关于logging - 应用日志.NET Core和Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39487740/