Net core配置日志记录 NLog+ELK+数据库

Net 项目你通过NLog+ELK 实现分布式日志,以及数据库存储。

首先准备

1.部署好ELK分布式日志系统(不会部署ELK看(278条消息) Linux系统ELK分布式日志docker-compose部署_不喜欢写代码的程序员的博客-CSDN博客)。

2.Net 项目 并且安装Nuget包 NLog.Web.AspNetCore

然后开始起飞:

第二部:配置NLog的配置文件

<?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"
      autoReload="true"
      internalLogLevel="Error"
      internalLogFile="log/internalLog.txt"
      >
    <!-- enable asp.net core layout renderers -->
    <extensions>
        <add assembly="NLog.Web.AspNetCore"/>
    </extensions>
    <!-- the targets to write to -->
    <targets>
        <!-- sql日志target -->
        <!--<target xsi:type="File" name="SqlLog" fileName="${currentdir}/log/sql/${shortdate}.log"
           layout="${longdate} ${logger} ${uppercase:${level}}
${newline}${message} ${exception:format=tostring}${newline}" />-->
        <!-- Tcp日志target -->
        <target xsi:type="Network"
                name="ownLog-tcp"
                keepConnection="false"
                address ="tcp://IP:4560/"
                layout="${longdate} LogShareService API | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"
            />
        <target name="database" xsi:type="Database" dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" >
            <!-- connectionString="server=10.220.130.146;User Id=root;password=sa12345;Database=eProcurementDB" -->
            <connectionString>${var:connectionString}</connectionString>
            <commandText>
                insert into `tbl_base_Loginfo` (`ErrorID`, `Application`, `Host`, `Type`, `Source`,`StatusCode`, `Message`, `User`,  `TimeUtc`, `AllXml`, `Data`, `CreateDate`)
                values
                (UUID()
                ,@application
                ,@host
                ,@type
                ,@source
                ,@statuscode
                ,@message
                ,@user
                ,@timeUtc
                ,@allXml
                ,@data
                ,@createDate);
            </commandText>
            <parameter name="@application" layout="LogShareService Api" />
            <parameter name="@host" layout="${machinename}" />
            <parameter name="@type" layout="${level}" />
            <parameter name="@source" layout="${logger}" />
            <parameter name="@statuscode" layout="" />
            <parameter name="@message" layout="${message}" />
            <parameter name="@user" layout="${machinename}" />
            <parameter name="@timeUtc" layout="${date}" />
            <parameter name="@allXml" layout="${exception:StackTrace}" />
            <parameter name="@data" layout="${exception:tostring}" />
            <parameter name="@createDate" layout="${longdate}" />
        </target>
    </targets>
    <!-- rules to map from logger name to target -->
    <rules>
        <!--<logger name="Microsoft.EntityFrameworkCore.Database.*" 
            writeTo="SqlLog" />-->
        <!-- <logger name="*" minlevel="Error" writeTo="ErrorInfo" />-->
        <!--测试只控制器中的日志记录到elk中,仅警告级别以上的日志会被写入 -->
        <!--<logger name="Microsoft.*" minlevel="Trace" final="true" />-->
        <!--<logger name="*" minlevel="Info" writeTo="ownLog-tcp" />
        <logger name="*" minlevel="Error" writeTo="ownLog-tcp" />-->
        <logger name="*" minlevel="Error" writeTo="database" />
    </rules>
</nlog>

第三步:在Program 中进行NLog信息的配对 (我这里是.net6)

第四步:写一个错误方法 启动项目 执行查看结果

结果:

数据库已经存储到日志信息

ELK:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值