asp.Netcoreログコンポーネントserilog

4094 ワード

リファレンス

  • https://github.com/serilog/serilog-aspnetcore
  • https://github.com/serilog/serilog
  • https://github.com/serilog/serilog-sinks-rollingfile

  • serilogのインストール

    $ dotnet add package Serilog.AspNetCore
    $ dotnet add package Serilog.Settings.Configuration
    
    $ dotnet add package Serilog.Sinks.Console
    $ dotnet add package Serilog.Sinks.RollingFile
    

    プロファイルの変更


    コンポーネントのインストールSettings.コンフィギュレーション後、serilogが使用できる.Netcoreのプロファイル
    appsettings.json
    {
      "Serilog": {
        "WriteTo": [
          {
            "Name": "RollingFile",
            "Args": { "pathFormat": "log-{Date}.txt" }
          }
        ],
        "MinimumLevel": {
          "Default": "Debug",
          "Override": {
            "Microsoft": "Warning",
            "System": "Warning"
          }
        }
      }
    }
    

    Serilogをインストールします.Sinks.RollingFileを使用すると、ログを日付で整理されたファイルに出力し、プロファイルにファイル生成のルールとパスを設定できます.

    serilogをミドルウェアとして注入


    Program.cs
    ....
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Logging;
    using Serilog;
    using Serilog.Events;
    
    namespace Demo.API
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }
            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                .UseStartup().UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                .ReadFrom.Configuration(hostingContext.Configuration)
                .Enrich.FromLogContext()
                .WriteTo.Console());
                ##    serilog
        }
    }
    

    コントローラでのログコンポーネントの使用

    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Authorization;
    
    namespace Demo.API.Controllers
    {
        [Authorize]
        [Route("Api/[controller]")]
        [ApiController]
        public class UserController : ControllerBase
        {
            private readonly UserManager _userManager;
            private readonly ILogger _logger;
    
            public UserController(UserManager userManager, ILoggerFactory logFactory)
            {
                _userManager = userManager;
                _logger = logFactory.CreateLogger();
            }
    
            /// 
            ///     
            /// 
            ///       
            /// 
            [Route("Register")]
            [AllowAnonymous]
            [HttpPost]
            public async Task Register(RegisterModel model)
            {
                _logger.LogInformation("    =", model.PhoneNumber);
    
                if (!ModelState.IsValid)
                {
                    return ApiResultUtil.Fail("     !");
                }
                try
                {   
                    IdentityResult result = null;
                    var user = await _userManager.FindByNameAsync(model.UserName);
    
                    if (user != null)
                        return ApiResultUtil.Fail("    :     ");
    
                    user = new UserIdentity { UserName = model.UserName, Email = model.Email, PhoneNumber = model.PhoneNumber };
                    result = await _userManager.CreateAsync(user, model.Password);
    
                    if (result.Succeeded)
                    {
                        return ApiResultUtil.Success();
                    }
                    else
                    {
                        return ApiResultUtil.Fail("    !");
                    }
                }
                catch (Exception ex)
                {   
                    _logger.LogError(0, ex, "    :" + ApiResultUtil.GetMessage(ex));
                    return ApiResultUtil.Fail("    !");
                }
            }
        }
    }