亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

ASP.NET?Core?6框架揭秘實(shí)例演示之如何承載你的后臺(tái)服務(wù)

 更新時(shí)間:2022年03月16日 11:48:32   作者:Artech  
這篇文章主要介紹了ASP.NET?Core?6框架揭秘實(shí)例演示之如何承載你的后臺(tái)服務(wù),主要包括利用承載服務(wù)收集性能指標(biāo)、依賴注入的應(yīng)用、配置選項(xiàng)的應(yīng)用等知識(shí)點(diǎn),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

借助 .NET提供的服務(wù)承載(Hosting)系統(tǒng),我們可以將一個(gè)或者多個(gè)長(zhǎng)時(shí)間運(yùn)行的后臺(tái)服務(wù)寄宿或者承載我們創(chuàng)建的應(yīng)用中。任何需要在后臺(tái)長(zhǎng)時(shí)間運(yùn)行的操作都可以定義成標(biāo)準(zhǔn)化的服務(wù)并利用該系統(tǒng)來(lái)承載,ASP.NET Core應(yīng)用最終也體現(xiàn)為這樣一個(gè)承載服務(wù)。

借助 .NET提供的服務(wù)承載(Hosting)系統(tǒng),我們可以將一個(gè)或者多個(gè)長(zhǎng)時(shí)間運(yùn)行的后臺(tái)服務(wù)寄宿或者承載我們創(chuàng)建的應(yīng)用中。任何需要在后臺(tái)長(zhǎng)時(shí)間運(yùn)行的操作都可以定義成標(biāo)準(zhǔn)化的服務(wù)并利用該系統(tǒng)來(lái)承載,ASP.NET Core應(yīng)用最終也體現(xiàn)為這樣一個(gè)承載服務(wù)。(本篇提供的實(shí)例已經(jīng)匯總到《ASP.NET Core 6框架揭秘-實(shí)例演示版》)

[S1401]利用承載服務(wù)收集性能指標(biāo)

承載服務(wù)的項(xiàng)目一般會(huì)采用“Microsoft.NET.Sdk.Worker”這個(gè)SDK。服務(wù)承載模型涉及的接口和類型大都定義在“Microsoft.Extensions.Hosting.Abstractions”這個(gè)NuGet包,而具體實(shí)現(xiàn)在由NuGet包“Microsoft.Extensions.Hosting”來(lái)提供。我們演示的承載服務(wù)會(huì)定時(shí)采集當(dāng)前進(jìn)程的性能指標(biāo)并將其分發(fā)出去。我們只關(guān)注處理器使用率、內(nèi)存使用量和網(wǎng)絡(luò)吞吐量這三種典型的指標(biāo),為此我們定義了如下這個(gè)PerformanceMetrics類型。我們并不會(huì)實(shí)現(xiàn)真正的性能指標(biāo)收集,定義的靜態(tài)方法Create會(huì)利用隨機(jī)生成的指標(biāo)來(lái)創(chuàng)建PerformanceMetrics對(duì)象。

public class PerformanceMetrics
{
    private static readonly Random _random = new();

    public int 	Processor { get; set; }
    public long 	Memory { get; set; }
    public long 	Network { get; set; }

    public override string ToString() => @$"CPU: {Processor * 100}%; Memory: {Memory / (1024* 1024)}M; Network: {Network / (1024 * 1024)}M/s";

    public static PerformanceMetrics Create() => new()
    {
        Processor 	= _random.Next(1, 8),
        Memory 	= _random.Next(10, 100) * 1024 * 1024,
        Network 	= _random.Next(10, 100) * 1024 * 1024
    };
}

承載服務(wù)通過(guò)IHostedService接口表示,該接口定義的StartAsync和StopAsync方法可以啟動(dòng)與關(guān)閉服務(wù)。我們將性能指標(biāo)采集服務(wù)定義成如下這個(gè)PerformanceMetricsCollector類型。在實(shí)現(xiàn)的StartAsync方法中,我們一個(gè)定時(shí)器每隔5秒調(diào)用Create方法創(chuàng)建一個(gè)PerformanceMetrics對(duì)象,并將它承載的性能指標(biāo)輸出到控制臺(tái)上。作為定期是的Timer對(duì)象會(huì)在StopAsync方法中被釋放。

public sealed class PerformanceMetricsCollector : IHostedService
{
    private IDisposable? _scheduler;
    public Task StartAsync(CancellationToken cancellationToken)
    {
        _scheduler = new Timer(Callback, null, TimeSpan.FromSeconds(5),TimeSpan.FromSeconds(5));
        return Task.CompletedTask;

        static void Callback(object? state)=> Console.WriteLine($"[{DateTimeOffset.Now}]{PerformanceMetrics.Create()}");
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _scheduler?.Dispose();
        return Task.CompletedTask;
    }
}

服務(wù)承載系統(tǒng)通過(guò)IHost接口表示承載服務(wù)的宿主,該對(duì)象在應(yīng)用啟動(dòng)過(guò)程中采用Builder模式由對(duì)應(yīng)的IHostBuilder對(duì)象來(lái)構(gòu)建。HostBuilder類型是對(duì)IHostBuilder接口的默認(rèn)實(shí)現(xiàn),所以我們采用如下方式創(chuàng)建一個(gè)HostBuilder對(duì)象,并調(diào)用其Build方法來(lái)提供作為宿主的IHost對(duì)象。在調(diào)用Build方法構(gòu)建IHost對(duì)象之前,我們調(diào)用了ConfigureServices方法將PerformancceMetricsCollector注冊(cè)成針對(duì)IHostedService接口的服務(wù),并將生命周期模式設(shè)置成Singleton。

using App;
new HostBuilder()
.ConfigureServices(svcs => svcs
    .AddSingleton<IHostedService, PerformanceMetricsCollector>())
    .Build()
    .Run();

我們最后調(diào)用Run方法啟動(dòng)通過(guò)IHost對(duì)象表示的承載服務(wù)宿主,進(jìn)而啟動(dòng)由它承載的PerformancceMetricsCollector服務(wù),該服務(wù)將以圖1所示的形式每隔5秒在控制臺(tái)上輸出“采集”的性能指標(biāo)。

圖1 承載指標(biāo)采集服務(wù)

除了采用一般的服務(wù)注冊(cè)方式,我們還可以按照如下的方式調(diào)用IServiceCollection接口的AddHostedService<THostedService>擴(kuò)展方法來(lái)對(duì)承載服務(wù)PerformanceMetricsCollector進(jìn)行注冊(cè)。我們一般也不會(huì)通過(guò)調(diào)用構(gòu)造函數(shù)的方式創(chuàng)建HostBuilder對(duì)象,而是使用定義在Host類型中的 工廠方法CreateDefaultBuilder創(chuàng)建來(lái)構(gòu)建IHostBuilder對(duì)象。

using App;
Host.CreateDefaultBuilder(args)
    .ConfigureServices(svcs => svcs.AddHostedService<PerformanceMetricsCollector>())
    .Build()
    .Run();

[S1402]依賴注入的應(yīng)用

服務(wù)承載系統(tǒng)整合依賴注入框架,針對(duì)承載服務(wù)的注冊(cè)實(shí)際上就是將它注冊(cè)到依賴注入框架中。既然承載服務(wù)實(shí)例最終是通過(guò)依賴注入容器提供的,那么它自身所依賴的服務(wù)當(dāng)然也可以進(jìn)行注冊(cè)。我們接下來(lái)將PerformanceMetricsCollector提供的性能指標(biāo)收集功能分解到由四個(gè)接口表示的服務(wù)中,IProcessorMetricsCollector、IMemoryMetricsCollector和INetworkMetricsCollector接口代表的服務(wù)分別用于收集三種對(duì)應(yīng)的性能指標(biāo),而IMetricsDeliverer接口表示的服務(wù)則負(fù)責(zé)將收集的性能指標(biāo)發(fā)送出去。

public interface IProcessorMetricsCollector
{
    int GetUsage();
}
public interface IMemoryMetricsCollector
{
    long GetUsage();
}
public interface INetworkMetricsCollector
{
    long GetThroughput();
}

public interface IMetricsDeliverer
{
    Task DeliverAsync(PerformanceMetrics counter);
}

我們定義的MetricsCollector類型實(shí)現(xiàn)了三個(gè)性能指標(biāo)采集接口,采集的性能指標(biāo)直接來(lái)源于通過(guò)靜態(tài)方法Create創(chuàng)建的PerformanceMetrics對(duì)象。MetricsDeliverer類型實(shí)現(xiàn)了IMetricsDeliverer接口,實(shí)現(xiàn)的DeliverAsync方法直接將PerformanceMetrics對(duì)象承載的性能指標(biāo)輸出到控制臺(tái)上。

public class MetricsCollector :
    IProcessorMetricsCollector,
    IMemoryMetricsCollector,
    INetworkMetricsCollector
{
    long INetworkMetricsCollector.GetThroughput() => PerformanceMetrics.Create().Network;

    int IProcessorMetricsCollector.GetUsage() => PerformanceMetrics.Create().Processor;

    long IMemoryMetricsCollector.GetUsage() => PerformanceMetrics.Create().Memory;
}

public class MetricsDeliverer : IMetricsDeliverer
{
    public Task DeliverAsync(PerformanceMetrics counter)
    {
        Console.WriteLine($"[{DateTimeOffset.UtcNow}]{counter}");
        return Task.CompletedTask;
    }
}

由于整個(gè)性能指標(biāo)的采集工作被分解到四個(gè)接口表示的服務(wù)之中,所以我們可以采用如下所示的方式重新定義承載服務(wù)類型PerformanceMetricsCollector。如代碼片段所示,我們?cè)跇?gòu)造函數(shù)中注入四個(gè)依賴服務(wù),StartAsync方法利用注入的IProcessorMetricsCollector、IMemoryMetricsCollector和INetworkMetricsCollector對(duì)象采集對(duì)應(yīng)的性能指標(biāo),并利用IMetricsDeliverer對(duì)象將其發(fā)送出去。

public sealed class PerformanceMetricsCollector : IHostedService
{
    private readonly IProcessorMetricsCollector 	_processorMetricsCollector;
    private readonly IMemoryMetricsCollector 		_memoryMetricsCollector;
    private readonly INetworkMetricsCollector 		_networkMetricsCollector;
    private readonly IMetricsDeliverer 		_MetricsDeliverer;
    private IDisposable? 				_scheduler;

    public PerformanceMetricsCollector(
        IProcessorMetricsCollector processorMetricsCollector,
        IMemoryMetricsCollector memoryMetricsCollector,
        INetworkMetricsCollector networkMetricsCollector,
        IMetricsDeliverer MetricsDeliverer)
    {
        _processorMetricsCollector 	= processorMetricsCollector;
        _memoryMetricsCollector 	= memoryMetricsCollector;
        _networkMetricsCollector 	= networkMetricsCollector;
        _MetricsDeliverer 		= MetricsDeliverer;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
       _scheduler = new Timer(Callback, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5));
       return Task.CompletedTask;

        async void Callback(object? state)
        {
            var counter = new PerformanceMetrics
            {
                Processor = _processorMetricsCollector.GetUsage(),
                Memory 	  = _memoryMetricsCollector.GetUsage(),
                Network   = _networkMetricsCollector.GetThroughput()
            };
            await _MetricsDeliverer.DeliverAsync(counter);
        }
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _scheduler?.Dispose();
        return Task.CompletedTask;
    }
}

在調(diào)用IHostBuilder接口的Build方法將IHost對(duì)象構(gòu)建出來(lái)之前,包括承載服務(wù)在內(nèi)的所有服務(wù)都可以通過(guò)它的ConfigureServices方法進(jìn)行了注冊(cè)。修改后的程序啟動(dòng)之后同樣會(huì)在控制臺(tái)上看到圖14-1所示的輸出結(jié)果(S1402)。

using App;
var collector = new MetricsCollector();
Host.CreateDefaultBuilder(args)
    .ConfigureServices(svcs => svcs
        .AddHostedService<PerformanceMetricsCollector>()
        .AddSingleton<IProcessorMetricsCollector>(collector)
        .AddSingleton<IMemoryMetricsCollector>(collector)
        .AddSingleton<INetworkMetricsCollector>(collector)
        .AddSingleton<IMetricsDeliverer, MetricsDeliverer>())
    .Build()
    .Run();

[S1403]配置選項(xiàng)的應(yīng)用

真正的應(yīng)用開發(fā)基本都會(huì)使用到配置選項(xiàng),比如我們演示程序中性能指標(biāo)采集的時(shí)間間隔就應(yīng)該采用配置選項(xiàng)來(lái)指定。由于涉及對(duì)性能指標(biāo)數(shù)據(jù)的發(fā)送,所以最好將發(fā)送的目標(biāo)地址定義在配置選項(xiàng)中。如果有多種傳輸協(xié)議可供選擇,就可以定義相應(yīng)的配置選項(xiàng)。 .NET應(yīng)用推薦采用Options模式來(lái)使用配置選項(xiàng),所以可以定義如下這個(gè)MetricsCollectionOptions類型來(lái)承載三種配置選項(xiàng)。

public class MetricsCollectionOptions
{
    public TimeSpan 		CaptureInterval { get; set; }
    public TransportType 	Transport { get; set; }
    public Endpoint 		DeliverTo { get; set; }
}
public enum TransportType
{
    Tcp,
    Http,
    Udp
}
public class Endpoint
{
    public string 	Host { get; set; }
    public int 	        Port { get; set; }
    public override string ToString() => $"{Host}:{Port}";
}

傳輸協(xié)議和目標(biāo)地址使用在MetricsDeliverer服務(wù)中,所以我們對(duì)它進(jìn)行了如下的修改。如代碼片段所示,我們?cè)跇?gòu)造函數(shù)中利用注入的IOptions<MetricsCollectionOptions>服務(wù)來(lái)提供上面的兩個(gè)配置選項(xiàng)。在實(shí)現(xiàn)的DeliverAsync方法中,我們將采用的傳輸協(xié)議和目標(biāo)地址輸出到控制臺(tái)上。

public class MetricsDeliverer : IMetricsDeliverer
{
    private readonly TransportType _transport;
    private readonly Endpoint 	     _deliverTo;

    public MetricsDeliverer(IOptions<MetricsCollectionOptions> optionsAccessor)
    {
        var options 	= optionsAccessor.Value;
        _transport 	= options.Transport;
        _deliverTo 	= options.DeliverTo;
    }

    public Task DeliverAsync(PerformanceMetrics counter)
    {
        Console.WriteLine($"[{DateTimeOffset.Now}]Deliver performance counter {counter} to {_deliverTo} via {_transport}");
        return Task.CompletedTask;
    }
}

承載服務(wù)類型PerformanceMetricsCollector同樣應(yīng)該采用這種方式來(lái)提取表示性能指標(biāo)采集頻率的配置選項(xiàng)。如下所示的代碼片段是PerformanceMetricsCollector采用配置選項(xiàng)后的完整定義。

public sealed class PerformanceMetricsCollector : IHostedService
{
    private readonly IProcessorMetricsCollector 		_processorMetricsCollector;
    private readonly IMemoryMetricsCollector 		_memoryMetricsCollector;
    private readonly INetworkMetricsCollector 		_networkMetricsCollector;
    private readonly IMetricsDeliverer 			_metricsDeliverer;
    private readonly TimeSpan 				_captureInterval;
    private IDisposable? 				_scheduler;

    public PerformanceMetricsCollector(
        IProcessorMetricsCollector processorMetricsCollector,
        IMemoryMetricsCollector memoryMetricsCollector,
        INetworkMetricsCollector networkMetricsCollector,
        IMetricsDeliverer metricsDeliverer,
        IOptions<MetricsCollectionOptions> optionsAccessor)
    {
        _processorMetricsCollector 	= processorMetricsCollector;
        _memoryMetricsCollector 	= memoryMetricsCollector;
        _networkMetricsCollector 	= networkMetricsCollector;
        _metricsDeliverer		= metricsDeliverer;
        _captureInterval 		= optionsAccessor.Value.CaptureInterval;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
       _scheduler = new Timer(Callback, null, TimeSpan.FromSeconds(5), _captureInterval);
       return Task.CompletedTask;

        async void Callback(object? state)
        {
            var counter = new PerformanceMetrics
            {
                Processor = _processorMetricsCollector.GetUsage(),
                Memory 	= _memoryMetricsCollector.GetUsage(),
                Network 	= _networkMetricsCollector.GetThroughput()
            };
            await _metricsDeliverer.DeliverAsync(counter);
        }
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _scheduler?.Dispose();
        return Task.CompletedTask;
    }
}

配置文件配置選項(xiàng)的常用來(lái)源,所以我們?cè)诟夸浵绿砑恿艘粋€(gè)名為appsettings.json的配置文件,并在其中定義如下內(nèi)容來(lái)提供上述三個(gè)配置選項(xiàng)。由Host類型的CreateDefaultBuilder工廠方法創(chuàng)建的IHostBuilder對(duì)象會(huì)自動(dòng)加載這個(gè)配置文件。

{
  "MetricsCollection": {
    "CaptureInterval": "00:00:05",
    "Transport": "Udp",
    "DeliverTo": {
      "Host": "192.168.0.1",
      "Port": 3721
    }
  }
}

我們接下來(lái)對(duì)演示程序做相應(yīng)的改動(dòng)。之前針對(duì)依賴服務(wù)的注冊(cè)是通過(guò)調(diào)用IHostBuilder對(duì)象的ConfigureServices方法利用作為參數(shù)的Action<IServiceCollection>對(duì)象完成的,該接口還有一個(gè)ConfigureServices方法重載,它的參數(shù)類型為Action<HostBuilderContext, IServiceCollection>,作為輸入的HostBuilderContext上下文可以提供表示應(yīng)用配置的IConfiguration對(duì)象。

using App;
var collector = new MetricsCollector();
Host.CreateDefaultBuilder(args)
    .ConfigureServices((context, svcs) => svcs
        .AddHostedService<PerformanceMetricsCollector>()
        .AddSingleton<IProcessorMetricsCollector>(collector)
        .AddSingleton<IMemoryMetricsCollector>(collector)
        .AddSingleton<INetworkMetricsCollector>(collector)
        .AddSingleton<IMetricsDeliverer, MetricsDeliverer>()
        .Configure<MetricsCollectionOptions>(context.Configuration.GetSection("MetricsCollection")))
    .Build()
    .Run();

我們利用提供的Action<HostBuilderContext, IServiceCollection>委托通過(guò)調(diào)用IServiceCollection接口的Configure<TOptions>擴(kuò)展方法從提供的HostBuilderContext對(duì)象中提取出配置,并對(duì)MetricsCollectionOptions配置選項(xiàng)做了綁定。我們修改后的程序運(yùn)行之后在控制臺(tái)上會(huì)輸出如圖2所示結(jié)果。

圖2 引入配置選項(xiàng)

[S1404]提供針對(duì)環(huán)境的配置

應(yīng)用程序總是針對(duì)某個(gè)具體環(huán)境進(jìn)行部署的,開發(fā)(Development)、預(yù)發(fā)(Staging)和產(chǎn)品(Production)是三種典型的部署環(huán)境,這里的部署環(huán)境在服務(wù)承載系統(tǒng)中統(tǒng)稱為承載環(huán)境(Hosting Environment)。一般來(lái)說(shuō),不同的承載環(huán)境往往具有不同的配置選項(xiàng),下面我們將演示如何為不同的承載環(huán)境提供相應(yīng)的配置選項(xiàng)。具體的做法很簡(jiǎn)單:將共享或者默認(rèn)的配置定義在基礎(chǔ)配置文件(如appsettings.json)中,將差異化的部分定義在針對(duì)具體環(huán)境的配置文件(如appsettings.staging.json和appsettings.production.json)中。對(duì)于我們演示的實(shí)例來(lái)說(shuō),我們可以采用圖3所示的方式添加額外的兩個(gè)配置文件來(lái)提供針對(duì)預(yù)發(fā)環(huán)境和產(chǎn)品環(huán)境的差異化配置。

圖3 針對(duì)承載環(huán)境的配置文件

對(duì)于演示實(shí)例提供的三個(gè)配置選項(xiàng)來(lái)說(shuō),假設(shè)針對(duì)承載環(huán)境的差異化配合僅限于發(fā)送的目標(biāo)終結(jié)點(diǎn)(IP地址和端口),我們就可以采用如下方式將它們定義在針對(duì)預(yù)發(fā)環(huán)境的appsettings.staging.json和針對(duì)產(chǎn)品環(huán)境的appsettings.production.json中。

appsettings.staging.json:

{
  "MetricsCollection": {
    "DeliverTo": {
      "Host": "192.168.0.2",
      "Port": 3721
    }
  }
}

appsettings.production.json:

{
  "MetricsCollection": {
    "DeliverTo": {
      "Host": "192.168.0.3",
      "Port": 3721
    }
  }
}

由于我們?cè)谡{(diào)用Host的CreateDefaultBuilder方法時(shí)傳入了命令行參數(shù)(args),所以默認(rèn)創(chuàng)建的IHostBuilder會(huì)將其作為配置源。也正因?yàn)槿绱?,我們可以采用命令行參?shù)的形式設(shè)置當(dāng)前的承載環(huán)境(對(duì)應(yīng)配置名稱為“environment”)。如圖4所示,我們分別指定不同的承載環(huán)境先后四次運(yùn)行我們的程序,從輸出的IP地址可以看出,應(yīng)用程序確實(shí)是根據(jù)當(dāng)前承載環(huán)境加載對(duì)應(yīng)的配置文件的。輸出結(jié)果還體現(xiàn)了另一個(gè)細(xì)節(jié),那就是默認(rèn)采用的是產(chǎn)品(Production)環(huán)境。

圖4 針對(duì)承載環(huán)境加載配置文件

[S1405]日志的應(yīng)用

應(yīng)用開發(fā)中不可避免地會(huì)涉及很多針對(duì)“診斷日志”的應(yīng)用,我們接下來(lái)就來(lái)演示承載服務(wù)如何記錄日志。對(duì)于我們的演示實(shí)例來(lái)說(shuō),用于發(fā)送性能指標(biāo)的MetricsDeliverer對(duì)象會(huì)將收集的指標(biāo)數(shù)據(jù)輸出到控制臺(tái)上,下面將這段文字以日志的形式進(jìn)行輸出,為此我們將這個(gè)類型進(jìn)行了如下的修改。

public class MetricsDeliverer : IMetricsDeliverer
{
    private readonly TransportType _transport;
    private readonly Endpoint _deliverTo;
    private readonly ILogger _logger;
    private readonly Action<ILogger, DateTimeOffset, PerformanceMetrics, Endpoint, TransportType, Exception?> _logForDelivery;

    public MetricsDeliverer(IOptions<MetricsCollectionOptions> optionsAccessor, ILogger<MetricsDeliverer> logger)
    {
        var options = optionsAccessor.Value;
        _transport = options.Transport;
        _deliverTo = options.DeliverTo;
        _logger = logger;
        _logForDelivery = LoggerMessage.Define<DateTimeOffset, PerformanceMetrics, Endpoint, TransportType>(LogLevel.Information, 0, "[{0}]Deliver performance counter {1} to {2} via {3}");
    }

    public Task DeliverAsync(PerformanceMetrics counter)
    {
        _logForDelivery(_logger, DateTimeOffset.Now, counter, _deliverTo, _transport, null);
        return Task.CompletedTask;
    }
}

如上面的代碼片段所示,我們利用構(gòu)造函數(shù)中注入了的ILogger<MetricsDeliverer>對(duì)象并來(lái)記錄日志。為了避免對(duì)同一個(gè)消息模板的重復(fù)解析,我們可以使用LoggerMessage類型定義的委托對(duì)象來(lái)輸出日志,這也是MetricsDeliverer中采用的編程模式。運(yùn)行修改后的程序會(huì)控制臺(tái)上的輸出如圖5所示的結(jié)果。由輸出結(jié)果可以看出,這些文字是由我們注冊(cè)的ConsoleLoggerProvider提供的ConsoleLogger對(duì)象輸出到控制臺(tái)上的。由于承載系統(tǒng)自身在進(jìn)行服務(wù)承載過(guò)程中也會(huì)輸出一些日志,所以它們也會(huì)輸出到控制臺(tái)上。

圖5 將日志輸出到控制臺(tái)上

[S1406]在配置中定義日志過(guò)濾規(guī)則

如果需要對(duì)輸出的日志進(jìn)行過(guò)濾,可以將過(guò)濾規(guī)則定義在配置文件中。為了避免在“產(chǎn)品”環(huán)境因輸出過(guò)多的日志影響性能,我們?cè)赼ppsettings.production.json配置文件中以如下的形式將類別以“Microsoft.”為前綴的日志(最低)等級(jí)設(shè)置為 Warning。

{
  "MetricsCollection": {
    "DeliverTo": {
      "Host": "192.168.0.3",
      "Port": 3721
    }
  },
  "Logging": {
    "LogLevel": {
      "Microsoft": "Warning"
    }
  }
}

如果此時(shí)分別針對(duì)開發(fā)(Development)環(huán)境和產(chǎn)品(Production)環(huán)境以命令行的形式啟動(dòng)修改后的應(yīng)用程序,就會(huì)發(fā)現(xiàn)針對(duì)開發(fā)環(huán)境控制臺(tái)會(huì)輸出類型前綴為“Microsoft.”的日志,但是在針對(duì)產(chǎn)品環(huán)境的控制臺(tái)上卻找不到它們的蹤影。

圖6 根據(jù)承載環(huán)境過(guò)濾日志

到此這篇關(guān)于ASP.NET Core 6框架揭秘實(shí)例演示如何承載你的后臺(tái)服務(wù)的文章就介紹到這了,更多相關(guān)ASP.NET Core 6實(shí)例演示內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • .Net Core部署IIS的最細(xì)步驟

    .Net Core部署IIS的最細(xì)步驟

    本文來(lái)介紹一下.Net Core部署IIS,首先需要安裝.NET Core和IIS,并創(chuàng)建Web應(yīng)用程序項(xiàng)目,然后,將項(xiàng)目文件夾拷貝到IIS服務(wù)器上,并使用IIS管理器配置Web應(yīng)用程序,感興趣的可以了解一下
    2023-11-11
  • C#反射實(shí)例學(xué)習(xí)及注意內(nèi)容

    C#反射實(shí)例學(xué)習(xí)及注意內(nèi)容

    C#反射的入門學(xué)習(xí)首先要明白C#反射提供了封裝程序集、模塊和類型的對(duì)象等等需要的朋友可以參考下
    2012-12-12
  • ASP.NET無(wú)刷新分頁(yè)簡(jiǎn)單實(shí)現(xiàn)

    ASP.NET無(wú)刷新分頁(yè)簡(jiǎn)單實(shí)現(xiàn)

    無(wú)刷新分頁(yè)功能,雖然比較簡(jiǎn)單,但是涉及到的知識(shí)面蠻多的,我記錄一下制作的步驟與心得,僅供參考。如有哪里不足,希望大家指出,有更好的方法,也可以提出來(lái),大家一起學(xué)習(xí)。
    2015-09-09
  • Asp.Net各種超時(shí)問(wèn)題總結(jié)

    Asp.Net各種超時(shí)問(wèn)題總結(jié)

    在數(shù)據(jù)庫(kù)或者請(qǐng)求操作時(shí),如果選擇的時(shí)間段過(guò)短或操作數(shù)據(jù)量過(guò)大,就會(huì)遇到"請(qǐng)求超時(shí)"的的問(wèn)題,網(wǎng)絡(luò)上提供很多解決方案,但普遍不完善,根據(jù)個(gè)人經(jīng)驗(yàn)及參考網(wǎng)絡(luò)解決方案,先將其匯總
    2013-02-02
  • 一個(gè)簡(jiǎn)單的ASP.NET Forms 身份認(rèn)證的實(shí)例方法

    一個(gè)簡(jiǎn)單的ASP.NET Forms 身份認(rèn)證的實(shí)例方法

    當(dāng)訪問(wèn)默認(rèn)首頁(yè)default.aspx時(shí),會(huì)自動(dòng)跳轉(zhuǎn)到login.aspx頁(yè)面上請(qǐng)求登錄,隨便輸入用戶名和密碼,點(diǎn)擊“登錄”按鈕,會(huì)回到首頁(yè),并顯示當(dāng)前登錄的用戶名。
    2013-07-07
  • 老生常談.NET中的?COM?組件

    老生常談.NET中的?COM?組件

    COM組件中的接口是一組由組件實(shí)現(xiàn)的,提供給客戶使用的函數(shù),這篇文章主要介紹了.NET中的?COM?組件,需要的朋友可以參考下
    2022-10-10
  • Visual Studio 2017通過(guò)SSH調(diào)試Linux上.NET Core

    Visual Studio 2017通過(guò)SSH調(diào)試Linux上.NET Core

    這篇文章主要為大家詳細(xì)介紹了Visual Studio 2017通過(guò)SSH調(diào)試Linux 上.NET Core的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Unicode中文轉(zhuǎn)碼函數(shù)代碼

    Unicode中文轉(zhuǎn)碼函數(shù)代碼

    最近在研究QQ空間里個(gè)個(gè)游戲的工具,需要把騰訊編碼過(guò)的用戶名解碼,照實(shí)費(fèi)了點(diǎn)勁。
    2011-01-01
  • asp.net音頻轉(zhuǎn)換之.amr轉(zhuǎn).mp3(利用七牛轉(zhuǎn)換法)

    asp.net音頻轉(zhuǎn)換之.amr轉(zhuǎn).mp3(利用七牛轉(zhuǎn)換法)

    相信很多人都遇到amr格式的音頻文件不能直接在網(wǎng)頁(yè)播放的問(wèn)題,有人使用QuickTime插件的輔助,下面這篇文章主要給大家介紹了asp.net音頻轉(zhuǎn)換之利用七牛轉(zhuǎn)換法將.amr格式轉(zhuǎn).mp3格式,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2016-12-12
  • 詳解在ASP.NET Core中使用Angular2以及與Angular2的Token base身份認(rèn)證

    詳解在ASP.NET Core中使用Angular2以及與Angular2的Token base身份認(rèn)證

    這篇文章主要介紹了詳解在ASP.NET Core中使用Angular2以及與Angular2的Token base身份認(rèn)證,有興趣的可以了解一下。
    2016-12-12

最新評(píng)論