首页 > 编程语言 >Asp.Net Core使用Exceptionless日志服务2-集成Exceptionless.NLog

Asp.Net Core使用Exceptionless日志服务2-集成Exceptionless.NLog

时间:2023-05-13 21:33:16浏览次数:46  
标签:Exceptionless Asp startDate config Core NLog 日志 exceptionlessTarget

Asp.Net Core使用Exceptionless日志服务2-集成Exceptionless.NLog

 

Exceptionless有自己一套完整的Api用于提交日志,我的项目已经写好了,使用Asp.Net Core标准接口ILogger记录日志,然后通过NLog输出到文件和控制台,我不想修改标准的日志接口,幸好有Exceptionless.NLog这样强大的组件,可以直接把NLog日志配置输出到Exceptionless服务。

NuGet安装NLog.Web.AspNetCore、Exceptionless.NLog。

    <PackageReference Include="Exceptionless.NLog" Version="5.0.0" />

    <PackageReference Include="NLog.Web.AspNetCore" Version="5.2.2" />

 

有2种方式可以把NLog日志配置输出到Exceptionless服务,可以修改NLog.config配置文件,也可以通过代码配置NLog记录器,殊途同归。

通过NLog.config配置文件上传日志到Exceptionless

在配置文件增加exceptionless记录器,填写项目的秘钥apiKey,Exceptionless服务器地址serverUrl

D:\Software\gitee\testexceptionless\NLog.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">

    <extensions>
        <!--添加扩展Exceptionless​程序集-->
        <add assembly="Exceptionless.NLog"/>
    </extensions>

    <targets async="true">

        <!--write logs to Console-->
        <target name="console" xsi:type="ColoredConsole"
                layout="${longdate}, ${level:uppercase=true:padding=-5}, ${callsite}, ${message}, ${exception}" />

        <!--write logs to Visual Studio Output-->
        <target name="debugger" xsi:type="Debugger"
                layout="${longdate}, ${level:uppercase=true:padding=-5}, ${callsite}, ${message}, ${exception}" />

        <!--write logs to file-->
        <target name="file"  xsi:type="File"
                layout="${longdate}, ${level:uppercase=true:padding=-5}, ${callsite}, ${message}, ${exception}"
                fileName="${basedir}/data/logs/app.log"
                archiveFileName="${basedir}/data/logs/app.{#}.log"
                encoding="utf-8"
                archiveAboveSize="1024000"
                maxArchiveFiles="10"
                archiveNumbering="Rolling"
                concurrentWrites="true"
                keepFileOpen="false" />

        <!--Exceptionless分布式日志-->
        <target name="exceptionless" xsi:type="Exceptionless"
                apiKey="xxx" serverUrl="https://www.myweb.cn:8811">
        <field name="CallSite" layout="${callsite}"/>
        </target>

    </targets>

    <rules>
        <!--TRACE,DEBUG,INFO,WARN,ERROR,FATAL-->
        <logger name="*" minlevel="Info" writeTo="console" />
        <logger name="*" minlevel="Debug" writeTo="debugger" />
        <logger name="*" minlevel="Info" writeTo="file" />

        <!--上报Exceptionless-->
        <logger name="*" minlevel="Info" writeTo="exceptionless" />
    </rules>
</nlog>

 

注册服务的时候,加载NLog.config配置

D:\Software\gitee\testexceptionless\Program.cs

//添加日志服务,读取NLog.config配置文件
    private static void AddLogServicesFromFile(IServiceCollection services, IConfiguration configuration)
    {
        //NuGet下载NLog.Web.AspNetCore
        services.AddLogging(builder =>
        {
            //移除已经注册的其他日志处理程序
            builder.ClearProviders();

            //只使用NLog记录日志
            builder.AddNLogWeb();//获取NLog.config配置
        });
    }

 

通过NLog.config配置文件方式有一个缺点,无法满足一个项目部署到多个运行环境的需求,比如,测试环境,生产环境,需要配置不同的项目秘钥。当然也不是绝对不行,在部署阶段修改秘钥也可以,就是比较麻烦。

 

通过代码配置NLog记录器上传日志到Exceptionless

采用代码配置NLog记录器方式,可以在软件初始化阶段,读取外部配置文件或者环境变量,获取Exceptionless的项目秘钥,能够比较方便的满足多个运行环境的需求。

D:\Software\gitee\testexceptionless\Program.cs

 

//添加日志服务,通过代码配置记录器
    private static void AddLogServicesByCode(IServiceCollection services, IConfiguration configuration)
    {
        //添加NLog和Exceptionless日志服务
        var exceptionlessTarget = new ExceptionlessTarget();
        exceptionlessTarget.ApiKey = "xxx";
        exceptionlessTarget.ServerUrl = "https://www.mywed.cn:8811";

        exceptionlessTarget.Name = "exceptionless";

        exceptionlessTarget.Fields.Add(new ExceptionlessField() { Name = "CallSite", Layout = "${callsite}", });

        //添加exceptionless的Target对象
        LogManager.Configuration.AddTarget("exceptionless", exceptionlessTarget);

        //添加exceptionless的LoggingRule
        LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", global::NLog.LogLevel.Info, exceptionlessTarget));

        //NuGet下载NLog.Web.AspNetCore
        services.AddLogging(builder =>
        {
            //移除已经注册的其他日志处理程序
            builder.ClearProviders();

            //只使用NLog记录日志
            builder.AddNLogWeb(LogManager.Configuration, null);//使用修改后的配置
        });
    }

 

 

测试提交日志

用Asp.Net Core默认的天气预报服务,记录日志,运行项目,显示天气预报页面,生成日志

D:\Software\gitee\testexceptionless\Data\WeatherForecastService.cs

public Task<WeatherForecast[]> GetForecastAsync(DateOnly startDate)
        {
            //_logger.LogDebug($"Debug获取了天气预报{startDate}");
            _logger.LogInformation($"Info1获取了天气预报{startDate}");
            _logger.LogWarning($"Warn获取了天气预报{startDate}");
            //_logger.LogError(new Exception("测试错误"), $"获取了天气预报{startDate}");
            //_logger.LogInformation($"Info2获取了天气预报{startDate}");

            return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = startDate.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            }).ToArray());
        }

在Exceptionless服务器选择项目,查看【全部日志】-【活动时间表】,可以看到上传的日志。

  

问题

 我在测试的时候发现一个问题,如果没有warn类型,只有Info类型,有时候没有看到上传的日志。本机VS2022调试运行的时候发现日志上传不稳定,有时候没有及时上传。但是我把项目部署到云服务器,长期运行,日志还是比较稳定上传的。我不知道这是什么原因,但是因为项目在云服务器稳定运行后日志功能正常,所以就不去研究它了。

  

DEMO代码地址:https://gitee.com/woodsun/testexceptionless

 

标签:Exceptionless,Asp,startDate,config,Core,NLog,日志,exceptionlessTarget
From: https://www.cnblogs.com/sunnytrudeau/p/17398238.html

相关文章

  • 【愚公系列】2023年05月 .NET CORE工具案例-Workflow-Core轻量级工作流引擎(随机流程)
    (文章目录)前言1.什么是工作流工作流是OA系统比较重要的功能之一,主要在于企业流程协同审批,有效进行流程管理。流程管理起源于生产组织和办公自动化领域,是针对日常工作中具有固定程序的活动提出的一个概念。目的是通过将工作分解成定义良好的任务、角色,按照一定的规则和过程来......
  • 在 ASP.NET Core Web API 中处理 Patch 请求
    一、概述PUT和PATCH方法用于更新现有资源。它们之间的区别是,PUT会替换整个资源,而PATCH仅指定更改。在ASP.NETCoreWebAPI中,由于C#是一种静态语言(dynamic在此不表),当我们定义了一个类型用于接收HTTPPatch请求参数的时候,在Action中无法直接从实例中得知客户......
  • CF1777D Score of a Tree 题解
    题目简述给你一个\(n\)个结点根为\(1\)的树。在\(t=0\)时,每个结点都有一个值,为\(0\)或\(1\)。在每一个\(t>0\)时,每个结点的值都会变成其子结点在\(t-1\)时的值的异或和。定义\(S(t)\)为\(t\)时所有结点值的和。定义\(F(A)\)为树在\(0\let\le10^......
  • NET Core 事件总线,分布式事务解决方案:CAP
    转载:https://blog.csdn.net/WuLex/article/details/1245648311.事件总线概念事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点松耦合横切关注点可测试性事件驱动事件总线类型进程内事件(Event):本地事件,它......
  • Node.js & Raspberry Pi & WS2812B RGB LEDs strip All In One
    Node.js&RaspberryPi&WS2812BRGBLEDsstripAllInOneNode.js&RaspberryPi&WS2812BRGBLED灯带Node.jshttps://www.w3schools.com/nodejs/nodejs_raspberrypi.aspdemos(......
  • EntityFramework Core 6.0 MySql WebApi
    Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.DesignPomelo.EntityFrameworkCore.MySqlMicrosoft.EntityFrameworkCore.Tools-----------------------------------------------------------------------------------------------------------------------......
  • HTTP Error 500.31 - Failed to load ASP.NET Core runtime
    一、问题:Youmustinstallorupdate.NETtorunthisapplication.App:D:\Projects\four_pl\BaseApi3\EDIGateway\bin\Debug\net5.0\EDIGateway.dllArchitecture:x64Framework:'Microsoft.AspNetCore.App',version'5.0.0'(x64).NETlo......
  • .Net Core Mvc 2. VS2022 + Core6.0 + Mvc 添加控制器
    Controllers控制器 我们的控制器都放在Controllers文件夹在项目的Controllers文件夹上右键添加,选择控制器(空白),添加一个HelloWorldController的控制器。在控制器中添加一个新的action,起名叫WelcomepublicstringWelcome(){return"thisis......
  • .net core 上传文件大小配置
    发布会的web.config中下增加       Starup.cs增加//上传文件大小限制Kestrel设置services.Configure(options=>{//Setthelimitto256MBoptions.Limits.MaxRequestBodySize=268435456;});//上传文件大小限制IIS设置services.Configure(options=>......
  • NetCore项目部署到Linux之后,登录界面验证码不显示问题
    NetCore项目部署到Linux之后,登录界面验证码不显示问题1.在centos下安装libgdiplus-devel; 命令: yuminstalllibgdiplus-devel2.重启.netcore服务(supervisorctlrestart服务名称)我是用的supervisor做的守护进程或者supervisorctlreload......