ElasticSearch+NLog实现.Net Core分布式日志管理
2023-04-18 14:51:49 时间
本文转载自微信公众号「UP技术控」,作者conan5566。转载本文请联系UP技术控公众号。
概述
Elasticsearch可广泛应用于日志分析、全文检索、结构化数据分析等多种场景,大幅度降低维护多套专用系统的成本,在开源社区非常受欢迎。在系统中,如果将日志作为文件输出,查看系统日志将非常不便;如果将日志保存到数据库中,又不能进行全文搜索。在这里我们将日志输出到ElasticSearch中,借助Kibana再查找日志。
实现方式
1、配置es服务地址
- {
- "ConnectionStrings": {
- "ElasticSearchServerAddress": "http://localhost:9200"
- },
- "Logging": {
- "LogLevel": {
- "Default": "Warning"
- }
- },
- "AllowedHosts": "*"
- }
2、配置nlog.config
- <?xml version="1.0" encoding="utf-8" ?>
- <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- internalLogToConsole="true">
- <extensions>
- <add assembly="NLog.Targets.ElasticSearch"/>
- </extensions>
- <targets>
- <!--ElasticSearch保存日志信息-->
- <target name="ElasticSearch" xsi:type="ElasticSearch" ConnectionStringName="ElasticSearchServerAddress"
- index="userapi-${date:format=yyyy.MM.dd}" documentType="doc" includeAllProperties="true"
- layout="[${date:format=yyyy-MM-dd HH:mm:ss}][${level}] ${logger} ${message} ${exception:format=toString}">
- <field name="MachineName" layout="${machinename}" />
- <field name="Time" layout="${longdate}" />
- <field name="level" layout="${level:uppercase=true}" />
- <field name="logger" layout=" ${logger}" />
- <field name="message" layout=" ${message}" />
- <field name="exception" layout=" ${exception:format=toString}" />
- <field name="processid" layout=" ${processid}" />
- <field name="threadname" layout=" ${threadname}" />
- <field name="stacktrace" layout=" ${stacktrace}" />
- <field name="Properties" layout="${machinename} ${longdate} ${level:uppercase=true} ${logger} ${message} ${exception}|${processid}|${stacktrace}|${threadname}" />
- </target>
- </targets>
- <rules>
- <logger name="*" minlevel="INFO" writeTo="ElasticSearch" />
- </rules>
- </nlog>
3、测试写入日志
- // GET api/values
- [HttpGet]
- public ActionResult<IEnumerable<string>> Get()
- {
- var result = new string[] { "value1", "value2" };
- _logger.LogInformation(JsonConvert.SerializeObject(result));
- return result;
- }
效果
相关文章
- 1次订单系统迁移,头发都快掉完了...
- 微软 Windows CoreOS 11 图片视频曝光:运行全新内核,采用 Windows 11 界面设计
- 微软 Teams 上位,Skype for Business Online 正式停用
- Windows 7系统,怎么免费升级至Windows 10系统?Windows 7系统升级方法
- 认识 Clapper:一款外观时尚的 Linux 视频播放器,极简主义者适用
- 用Windows 10玩游戏,遇到游戏退回桌面怎么办,游戏退回桌面解决方法
- 在 Podman 中运行一个 Linux 虚拟机
- 使用Windows 11系统,磁盘管理调整分区怎么操作?Windows 11磁盘分区方法
- Linux设备树的传递以及Kernel中对设备树的解析
- 微软自家的Linux发行版开源了!
- Linux基础之查看、添加、修改、删除用户
- 微软Windows 10 Build 19043.1151(KB5004296)发布:修复游戏模式负优化等Bug
- Windows系统中,如何读写临时文件
- 如何开机自动登录Windows 8系统
- Linux 内核终于可以 Debug 了!
- Windows 11微软商店大进化:全新UI&性能提升
- 系统小技巧:解密Windows 10图标上的相对蓝箭头
- Linux 上的六大安卓模拟器
- 7个改变我生活的Git小技巧
- 苹果 iOS/iPadOS 15、macOS 12、watchOS 8 公测版 Beta 4 更新发布