繁体   English   中英

为什么 Serilog selflog 在这个简单的 windows 服务中不起作用?

[英]Why does not Serilog selflog work in this simple windows service?

我无法让 Serilog selflog 在我的 .NET Core 6.0 C# Windows 服务中工作。 这是 Main 的样子:

public static void Main(string[] args)
        {
            Serilog.Debugging.SelfLog.Enable(msg => System.Diagnostics.Debug.WriteLine($"Seri-serlflog : {msg}"));

            Log.Logger = new LoggerConfiguration().DefaultLoggerSetup<Program>();
            var serviceName = "MyService";

            var configurationBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
            var appSettings = configurationBuilder.Get<AppSettings>();

            try
            {
                Log.Information("{@serviceName} microservice starting up.", serviceName);
                
                var built = Host.CreateDefaultBuilder(args)
                    .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration))
                    .ConfigureServices((hostContext, services) =>
                    {
                        services
                            .AddHostedService<MyApp.Cloud.MyService.BusinessLogicLayer.MyService>()
                            .Configure<MySettings>(configurationBuilder.GetSection("MQSettings"))
                            .AddAutoMapper(typeof(ConnectorToCloudTreatment))
                            .AddTransi...
                    }).Build();
                Log.Information("{@serviceName} all built.", serviceName);
                built.Run();
                Log.Information("{@serviceName} microservice closing down.", serviceName);
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Unhanled exception in {@serviceName}.", serviceName);
            }
            finally
            {
                Log.Information("{@serviceName} Cleaning up.", serviceName);
                Log.CloseAndFlush();
                Log.Information("{@serviceName} Application Exit.", serviceName);
            }
        }
    }

application.json 的 serilog 部分如下所示:

  "serilog": {
    "Using": [ "Serilog.Sinks.MSSqlServer", "Serilog.Sinks.Email" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId" ],
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "outputTemplate": "[{Timestamp:HH:mm:ss.fff} [{Level}] {SourceContext} {Message}{NewLine}{Exception}",
          "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "/Logs/logs.txt",
          "outputTemplate": "{Timestamp:G} {SourceContext} [{Level}] {Message}{NewLine:1}{Exception:1}",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
          "fileSizeLimitBytes": 1000000,
          "rollOnFileSizeLimit": "true",
          "shared": "true",
          "flushToDiskInterval": 3
        }
      }
    ]
  }

我在这个应用程序中做了很多日志记录并且它工作正常但是有几个问题并且找到为什么我需要使用 selflog 但我没有获得任何信息到 output > 调试?

编辑:似乎这可能与注射有关。 在 program.cs 中,我使用 static 日志,但在所有其他类中,我使用注入类型的记录器。 但无论如何,我应该在 output 中得到几行 $"Seri-serlflog: {msg}" 吗?

如果您正在尝试获取调试级别的日志记录,则必须放宽您的日志级别:

"MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Debug",
        "System": "Debug"
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM