zoukankan      html  css  js  c++  java
  • .net core 2.x

    记录日志到elasticsearch(es),下面简写es,然后我们可以通过kibana可视化的观察日志信息以及统计分析等.

    1.起源

      年中旬时候,公司有个需求是需要分析用户的地址,需要先分词处理然后通过搜索引擎匹配相关数据,当然这个不是这里说的重点,主题还是日志 to es,也就是日志传入es,这里我们还是借助开源的作品,感谢提供者.

    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>
    View Code

    同时在 startup.cs中的configure方法中注入 IHostingEnvironment env对象,通过 env配置nlog,参考如下:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseCors("cors");
                loggerFactory.AddNLog();
                env.ConfigureNLog("nlog.config");
                app.UseMvc();
            }

    这里需要添加nlog同时指定我们自定义的nlog.config的配置文件,这样就完了.这时候会报错,因为少了文件,也就是一个第三方的资源包

    3.使用到的资源

    使用nuget导入对应的binary对象 nuget: install-package NLog.Targets.ElasticSearch,,这里的相关配置说明如下:
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off“
      internalLogFile="c: emp log-internal.log">
      xmlns=“http://www.nlog-project.org/schemas/NLog.xsd” 这表示默认命名空间;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 这个命名空间里面的元素或者属性就必须要以xsi:这种方式来写 比如schemaLocation就是他的一个属性,所以写成xsi:schemaLocation 而默认命名空间不带类似xsi这种,其实xml标签名称有个专业叫法叫做QName,而如果没有前面的xsi:这种一般叫做NCName xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" 表示把定义这个命名空间的schema文件给引用进来,好让开发类型工具能够解析和验证你的xml文件是否符合语法规范 等同于
    简单来说 上面是用来验证你XML格式是否正确的。
      InternalLogFile="c:log log.txt" //NLog内部日志文件位置 internalLogLevel="Debug" //日志级别 autoReload:一旦启动程序,这时候NLog.config文件被读取后,知道程序再启动都不会再读取配置文件了。假如我们不想停掉程序,比如说服务器哪能说停就停哈。这就用上这个配置了,这个配置功能是,一旦你对配置文件修改,程序将会重新读取配置文件,也就是自动再配置。
      throwExceptions//NLog日志系统抛出异常 internalLogFile="c:log log.txt" //NLog内部日志文件位置 internalLogLevel="Debug" //日志级别- 定义配置文件中用到的变量 - 定义日志的目标/输出 - 定义日志的路由规则

    Layout布局
      几种常见的 ${var:basePath} basePath是前面自定义的变量 ${longdate} 日期格式 2017-01-17 16:58:03.8667 ${shortdate}日期格式 2017-01-17 ${date:yyyyMMddHHmmssFFF} 日期 20170117165803866 ${message} 输出内容 ${guid} guid ${level}日志记录的等级 ${logger} 配置的logger

    NLog记录等级
      Trace - 最常见的记录信息,一般用于普通输出 Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序 Info - 信息类型的消息 Warn - 警告信息,一般用于比较重要的场合 Error - 错误信息 Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。 自上而下,等级递增。

    NLog等级使用
      指定特定等级 如:level="Warn" 指定多个等级 如:levels=“Warn,Debug“ 以逗号隔开 指定等级范围 如:minlevel="Warn" maxlevel="Error"

    Logger使用
    从配置文件读取信息并初始化 两种常用的方式
      根据配置的路由名获生成特定的logger Logger logger = LogManager.GetLogger("LoggerDemo");
      初始化为当前命名空间下当前类的logger Logger logger = LogManager.GetCurrentClassLogger();
      区别是logger的name不一样 前者是LoggerDemo,后者是当前命名空间+点+当前类名 如类比较多,并且往同一个日志文件记录,建议用GetCurrentClassLogger

    Logger有以下三种常用的写入方式
      logger.Error("这是DatabaseDemo的错误信息"); logger.Error(“ContentDemo {0}:{1}”,“时间”,DateTime.Now.ToString());需要拼接字符串的话推荐这种,NLog做了延迟处理,用的时候才拼接。 logger.Log(LogLevel.Error, "这是ContentDemo");

    Logger发邮件参数
      smtpServer=“” 邮件服务器 例如126邮箱是smtp.126.com smtpPort=“25“端口 smtpAuthentication=“Basic“ 身份验证方式 基本 smtpUserName=““ 邮件服务器用户名 smtpPassword=“**”邮件服务器密码 enableSsl=“false”是否使用安全连接 需要服务器支持 addNewLines=“true” 开头与结尾是否换行 from=“” 发件邮箱 to=“XXXX@XX.com,XXXXX@XX.com”收件邮箱 多个以逗号分隔 subject=“subject:${machinename}报错“ 邮件主题 header=“---------------------开头-------------------------“ 邮件开头 body=“${newline}${message}${newline}“ 邮件内容 footer=“---------------------结尾-------------------------“ 邮件结尾

    ABP 开源框架中配置参考

    <!--write logs to file-->
    
    <target xsi:type="File" name="allfile" fileName="${logDirectory}
    log-all-${shortdate}.log"
                 layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
    
    <target xsi:type="File" name="ownFile-web" fileName="nlog-my-${shortdate}.log"
                 layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
    
    <target xsi:type="Null" name="blackhole" />
    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />

    资源地址:

    通过nuget gallery查询获取:

    https://www.nuget.org/packages?q=NLog.Targets.ElasticSearch

    通过igthub获取:

    https://github.com/markmcdowell/NLog.Targets.ElasticSearch

  • 相关阅读:
    jQuerychicun
    css3动画
    app开发,H5+CSS3页面布局小tips
    函数基础
    函数
    冒泡排序
    关于Vue+iview的前端简单的导入数据(excel)
    关于Vue+iview的简单下拉框滚动加载
    ES6中set的用法回顾
    百度地图api设置点的自定义图标不显示
  • 原文地址:https://www.cnblogs.com/Tmc-Blog/p/9995722.html
Copyright © 2011-2022 走看看