Cách sử dụng Serilog trong ứng dụng .NET Core Console


8

Tôi muốn ứng dụng của mình có khả năng đăng nhập vào một tệp, vì vậy tôi bắt đầu tìm kiếm thứ gì đó hơn khung ghi nhật ký .NET Core 2.2 mặc định. Tôi thấy rằng Serilog có thể làm công việc. Tuy nhiên, tôi không thể tìm thấy bất kỳ tài liệu nào về cách thiết lập Serilog trong ứng dụng .NET Core Console với Dependency Injection. Tất cả những gì tôi thấy là các tài liệu ASP.NET, có lẽ không phải là thứ tôi cần.

Tôi bắt đầu tự làm điều đó. Tôi đã cài đặt (Nuget):

  • Sê-ri
  • Serilog.Extensions.Logging
  • Serilog.Sinks.File
  • Serilog.Sinks.Console (để sử dụng Serilog cho tất cả nhật ký của tôi)

Tôi đã tạo một phần mở rộng choServiceCollection

        public static void AddLogging(this IServiceCollection services, Microsoft.Extensions.Logging.LogLevel logLevel)
        {
            var serilogLogger = new LoggerConfiguration()
            .WriteTo.Console()
            .WriteTo.File("log.txt")
            .CreateLogger();

            services.AddLogging(builder =>
            {
                builder.SetMinimumLevel(logLevel);
                builder.AddSerilog(logger: serilogLogger, dispose: true);
            });
        }

Ghi nhật ký hoạt động, tuy nhiên:

  • mức độ đăng nhập không phải là những gì tôi đặt nó. Có vẻ như serilog đang sử dụng cấp INFO, mặc dù tôi muốn có DEBUG. Tại sao thiết lập của tôi không được tôn trọng? Rốt cuộc, tôi vẫn đang sử dụng khung ghi nhật ký của NET Core, vì vậy tôi đang sử dụng nó để thiết lập mức ghi nhật ký
  • Tôi thực sự đang thực hiện thiết lập này một cách chính xác? Tôi không thực sự chắc chắn nếu disposenên true. Nói chung, tôi muốn khuôn khổ Dependency Injection của NET Core đảm nhiệm việc xử lý các dịch vụ.

Câu trả lời:


3

Tôi không chắc chắn về builder.SetMinimumLevelđiều đó (nó không sử dụng enum Serilog).

Chúng tôi đặt mức logger khi tạo LoggerConfigurationđối tượng.

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Debug) // restricted... is Optional
    (...)
    .CreateLogger();

BTW. Thật đáng để chỉ ra phần sau đây từ Cấu hình cơ bản

Logger so với mức tối thiểu chìm - điều quan trọng là phải nhận ra rằng mức ghi nhật ký chỉ có thể được nâng lên cho các mức chìm, không được hạ xuống. Vì vậy, nếu MinimalLevel của logger được đặt thành Thông tin thì phần chìm với Debug là mức được chỉ định sẽ vẫn chỉ thấy các sự kiện ở cấp Thông tin. Điều này là do cấu hình mức logger kiểm soát các câu lệnh ghi nhật ký nào sẽ dẫn đến việc tạo ra các sự kiện, trong khi cấu hình mức chìm chỉ lọc các sự kiện này. Để tạo một logger duy nhất với mức độ dài hơn, hãy sử dụng một LoggerConfiguration riêng.


Tôi không chắc chắn về builder.AddSerilog.

Đây là những gì làm việc cho tôi.

using Serilog;

(...)

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    (...)
    .CreateLogger();

(...)

return new HostBuilder()
      .ConfigureHostConfiguration(...)
      .ConfigureServices(...)
      .UseSerilog();

Điểm đầu tiên của bạn về cấu hình là hợp lệ trong trường hợp của tôi. Khu định cư builder.SetMinimumLevelcó mức độ ưu tiên cao hơn cài đặt của Serilog. Vì vậy, tôi có thể đặt ghi nhật ký Verbose trên Serilog và mức độ mong muốn thực tế khi đăng nhập Microsoft để có được thứ tôi cần. Tôi thấy bạn đang ở trong một số ứng dụng được lưu trữ, như ASP.NET. Có lẽ bạn đang sử dụng gói Serilog.AspNetCore. Trong trường hợp của tôi, tôi không có máy chủ nào.
Loreno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.