ASP.NET Core使用Elasticsearch记录NLog日志

ASP.NET Core使用Elasticsearch记录NLog日志

1、新建一个 ASP.NET Core项目

2、安装Nuge包

运行:Install-Package NLog.Web.AspNetCore

运行:Install-Package NLog

运行:Install-package NLog.Targets.ElasticSearch

3、编写NLog配置文件(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>
    <target name="ElasticSearch" xsi:type="ElasticSearch"
            ConnectionStringName="http://localhost:9200"
            index="Jon.NLog-${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>

主要配置说明:

ConnectionStringName:连接字符串

Index:ES索引

documentType:ES类型

layout:布局

layout可配置变量如下:

$ {activityid} - 将一个System.Diagnostics跟踪关联ID放入日志中。
$ {all-event-properties} - 记录所有事件上下文数据。
$ {appdomain} - 当前的应用程序域。
$ {assembly-version} - 默认应用程序域中可执行文件的版本。
$ {basedir} - 当前应用程序域的基本目录。
$ {callsite} - 呼叫站点(类名称,方法名称和源信息)。
$ {callsite-linenumber} - 呼叫站点源行号。
$ {counter} - 一个计数器值(每个布局渲染都会增加)。
$ {currentdir} - 应用程序的当前工作目录。
$ {date} - 当前日期和时间。
$ {document-uri} - 托管当前Silverlight应用程序的HTML页面的URI。
$ {environment} - 环境变量。
$ {event-properties} - 记录事件属性数据 - 重命名$ {event-context}。
$ {exception} - 通过调用其中一个Logger * Exception()方法提供的异常信息。
$ {file-contents} - 渲染指定文件的内容。
$ {gc} - 关于垃圾收集器的信息。
$ {gdc} - 全局诊断上下文项目。字典结构来保存每个应用程序实例值。
$ {guid} - 全局唯一标识符(GUID)。
$ {identity} - 线程标识信息(名称和认证信息)。
$ {install-context} - 安装参数(传递给InstallNLogConfig)。
$ {level} - 日志级别。
$ {literal} - 一个字符串文字。
$ {log4jxmlevent} - 与log4j,Chainsaw和NLogViewer兼容的XML事件描述。
$ {logger} - 记录器名称。
$ {longdate} - 日期和时间格式很长,可排序yyyy-MM-dd HH:mm:ss.ffff。
$ {machinename} - 进程正在运行的机器名称。
$ {mdc} - 映射的诊断上下文 - 一个线程局部结构。
$ {mdlc} - 异步映射的诊断上下文 - 一个线程局部结构。
$ {message} - 格式化的日志消息。
$ {ndc} - 嵌套的诊断上下文 - 一个线程局部结构。
$ {ndlc} - 异步嵌套诊断上下文 - 一个线程局部结构。
$ {newline} - 换行符。
$ {nlogdir} - NLog.dll所在的目录。
$ {performancecounter} - 性能计数器。
$ {processid} - 当前进程的标识符。
$ {processinfo} - 关于正在运行的进程的信息。
$ {processname} - 当前进程的名称。
$ {processtime} - 格式为HH:mm:ss.mmm的处理时间。
$ {qpc} - 高精度计时器,基于从QueryPerformanceCounter()返回的值(可选地转换为秒)。
$ {registry} - 来自注册表的值。
$ {sequenceid} - 日志序列标识
$ {shortdate} - 可排序格式的短日期yyyy-MM-dd。
$ {sl-appinfo} - 有关Silverlight应用程序的信息。
$ {specialfolder} - 系统特殊文件夹路径(包括我的文档,我的音乐,程序文件,桌面等)。
$ {stacktrace} - 堆栈跟踪渲染器。
$ {tempdir} - 一个临时目录。
$ {threadid} - 当前线程的标识符。
$ {threadname} - 当前线程的名称。
$ {ticks} - 当前日期和时间的Ticks值。
$ {time} - 以24小时可排序格式HH:mm:ss.mmm的时间。
$ {var} - 渲染变量(4.1中新增)
$ {windows-identity} - 线程Windows身份信息(用户名)。
包装
$ {cached} - 将缓存应用于另一个布局输出。
$ {filesystem-normalize} - 通过用安全字符替换文件名中不允许的字符。
$ {json-encode} - 使用JSON规则转义另一个布局的输出。
$ {lowercase} - 将另一个布局输出的结果转换为小写。
$ {onexception} - 仅在为日志消息定义异常时才输出内部布局。
$ {pad} - 将填充应用于另一个布局输出。
$ {replace} - 用另一个字符串替换另一个布局输出中的字符串。
$ {replace-newlines} - 用另一个字符串替换换行符。
$ {rot13} - 用ROT-13解码“encrypted”文本。
$ {trim-whitespace} - 修剪另一个布局渲染器的结果中的空白。
$ {uppercase} - 将另一个布局输出的结果转换为大写。
$ {url-encode} - 编码另一个布局输出的结果以用于URL。
$ {when} - 只有在满足指定条件时才输出内部布局。
$ {whenEmpty} - 当内部布局产生空结果时输出替代布局。
$ {WrapLine} - 在指定的行长度处包装另一个布局输出的结果。
$ {xml-encode} - 将另一个布局输出的结果转换为XML兼容。
NLog.Extended软件包
$ {appsetting} - 应用程序配置设置。
NLog.Web包
$ {aspnet-MVC-Action} - ASP.NET MVC动作名称
$ {aspnet-MVC-Controller} - ASP.NET MVC控制器名称
$ {aspnet-Application} - ASP.NET应用程序变量。
$ {aspnet-Item} - ASP.NET HttpContext项目变量。
$ {aspnet-TraceIdentifier} - ASP.NET跟踪标识符
$ {aspnet-Request} - ASP.NET请求变量。
$ {aspnet-Request-Cookie} - ASP.NET请求cookie内容。
$ {aspnet-Request-Host} - ASP.NET请求主机。
$ {aspnet-Request-Method} - ASP.NET请求方法(GET,POST等)。
$ {aspnet-Request-IP} - 客户端IP。
$ {aspnet-Request-QueryString} - ASP.NET请求查询字符串。
$ {aspnet-Request-Referrer} - ASP.NET请求引用者。
$ {aspnet-Request-UserAgent} - ASP.NET请求useragent。
$ {aspnet-Request-Url} - ASP.NET请求URL。
$ {aspnet-Session} - ASP.NET Session变量。
$ {aspnet-SessionId} - ASP.NET会话ID变量。
$ {aspnet-User-isAuthenticated} - ASP.NET用户身份验证?
$ {aspnet-User-AuthType} - ASP.NET用户身份验证。
$ {aspnet-User-Identity} - ASP.NET用户变量。
$ {iis-site-name} - IIS站点名称。

4、Program、Startup配置

4.1、Program配置NLog

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
?
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .UseNLog()
            .UseStartup<Startup>();
}

4.2、Startup添加NLog中间件

  
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }
?
        app.UseStaticFiles();
        app.UseCookiePolicy();
?
        loggerFactory.AddNLog();
        env.ConfigureNLog("NLog.config");
?
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

5、正常运行如下

查看kibana

原文地址:https://www.cnblogs.com/lwc1st/p/10009157.html

时间: 2024-08-01 13:03:43

ASP.NET Core使用Elasticsearch记录NLog日志的相关文章

ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB

在项目开发中,日志系统是系统的一个重要组成模块,通过在程序中记录运行日志.错误日志,可以让我们对于系统的运行情况做到很好的掌控.同时,收集日志不仅仅可以用于诊断排查错误,由于日志同样也是大量的数据,通过对这些数据进行集中分析,可以产生极大的价值. 在微服务的系统架构中,由于一个系统会被拆成很多个功能模块,每个模块负责不同的功能,对于日志系统的要求也会更高,比较常见的有 EFLK(ElasticSearch + Filebeat + LogStash + Kibana) 方案,而对于我们这种单体应

ASP.NET Core 开发-Logging 使用NLog 写日志文件

ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以轻松输出到控制台. 学习Logging 组件的相关使用,使用NLog 将日志写入到文件记录. Logging 使用 新建一个 ASP.NET Core 项目,为了方便,我选择Web 应用程序,改身份验证 改为 不进行身份验证. 新建好以后,会自动引用好对应的 类库.这样我们就可以直接使用 Logge

asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

原文:asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionless的学习做下笔记! Exceptionless是什么?能做什么呢? “Exceptionless”这个词的定义是:没有异常.Exceptionless可以为您的ASP.NET.We

ASP.NET Core 3中的自定义日志记录

根据我的经验,通常在API中记录请求和响应.这样做可以帮助开发人员调试问题并提供有价值的性能指标.在本教程中,我将介绍如何为ASP.NET Core 3 Web API创建基本的日志记录解决方案.在这篇文章的结尾,我们将有一个有效的日志记录解决方案,它将记录每个请求以及对控制台和文件系统的响应,并且日志将包括API处理每个请求所花费的时间.以下是概述: 1. 先决条件2. 创建RequestLog和ResponseLog模型3. 创建ILogForWebAPI4. 创建WebAPIConsole

asp.net core的AOP记录

序曲:学习编程最好的方式就是敲代码,没有比这个更好的方法,哪怕你看了上百G的视频,都不如你自己敲几行代码更为有效.还有要记得敲完代码然后写一篇随笔来记录一下你所学所想. 什么叫AOP? AOP面向切面编程(Aspect Oriented Programming),是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 运用场景? 比较常见的场景是:日志记录,错误捕获.性能监控等 AOP的本质是通过代理对象来间接执行真实对象,在代理类中往往会添加装饰一些额外的业务代码. 下面通过代码来

ASP.NET MVC中Log4Net记录错误日志的使用

第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSections>节点中 配置log4Net节点引用. <!--log4net日志记录--> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net

ASP.NET Core学习零散记录

赶着潮流听着歌,学着.net玩着Core 竹子学Core,目前主要看老A(http://www.cnblogs.com/artech/)和tom大叔的博客(http://www.cnblogs.com/TomXu/),当然还有我们博客园的Core中国学习小组啦(http://www.cnblogs.com/dotNETCoreSG/),只是笔记作用,所以很多图片,文字都是来源于他们~ 中间件(middleware): 原文:随着WebHost的Start方法的调用,按照具体需求进行定制的请求处理

asp.net core mcroservices 架构之 分布式日志(三):集成kafka

一 kafka介绍 kafka是基于zookeeper的一个分布式流平台,既然是流,那么大家都能猜到它的存储结构基本上就是线性的了.硬盘大家都知道读写非常的慢,那是因为在随机情况下,线性下,硬盘的读写非常快.kafka官方文档,一直拿传统的消息队列来和kafka对比,这样大家会触类旁通更快了解kafka的特性.最熟悉的消息队列框架有ActiveMQ 和 RabbitMQ.熟悉消息队列的,最熟悉的特性就是队列和发布订阅功能,因为这是大家最常用的,kafka实现了一些特有的机制,去规避传统的消息队列

ASP.NET Core根据环境切换NLog配置

1.新建NLog配置文件,名称分别为nlog.config和nlog.debug.config <?xml version="1.0"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" inter