欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-29 23:52:05
ASP.NET Core使用Elasticsearch记录NLog日志 1、新建一个 ASP.NET Core项目 2、安装Nuge包 运行:Install-Package NLog.Web.AspNetCore 运行:Install-Package NLog 运行:Install-package ......

asp.net core使用elasticsearch记录nlog日志

1、新建一个 asp.net core项目

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

 

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

2、安装nuge包

运行:install-package nlog.web.aspnetcore

运行:install-package nlog

运行:install-package nlog.targets.elasticsearch

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

 

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

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、正常运行如下

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

 

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

查看kibana

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

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

 

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