【问题标题】:How can I fix the "Input string was not in a correct format" in Akka.Event.LogMessage如何修复 Akka.Event.LogMessage 中的“输入字符串格式不正确”
【发布时间】:2019-12-30 15:16:18
【问题描述】:

我正在使用 Akka.Net 和 Akka.Logger.Serilog。在我的应用设置中,我使用 loggers = ["Akka.Logger.Serilog.SerilogLogger, Akka.Logger.Serilog"]

Program.cs,我使用:

Host.CreateDefaultBuilder(args)
    .UseServiceProviderFactory(new AutofacServiceProviderFactory())
    .UseSerilog((ctx, config) =>
             config.ReadFrom.Configuration(ctx.Configuration), true);

Startup.cs,我尝试过有或没有

services.AddSingleton<ILoggingAdapter, SerilogLoggingAdapter>(); 

在我的演员中,我使用以下内容来初始化记录器:

ILoggingAdapter _logger = Context.GetLogger(); // and Logger.GetLogger(Context);
// then
_logger.Info("Message loaded: {@Message}", message);
// and this _logger.Info("Message loaded: {Message}", message);

以及上述的各种其他组合,但每次,

在控制台中我看到了一些我自己的日志,但我到处都看到以下消息:

[ERROR][12/30/2019 12:43:47][Thread 0010][akka://MyActorSystem/system/log1-DefaultLogger] Input string was not in a correct format. Cause: System.FormatException: Input string was not in a correct format.
   at System.Text.StringBuilder.FormatError()
   at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.Format(String format, Object[] args)
   at Akka.Event.DefaultLogMessageFormatter.Format(String format, Object[] args)

是否还有其他步骤可以确保 Akka.net 使用正确的日志适配器?

如何控制默认记录器使用的内容?

【问题讨论】:

    标签: logging .net-core serilog akka.net


    【解决方案1】:

    最后,有两件事:

    1. 从 JSON 加载 HOCON 的挑战,通过以下方式解决: https://stackoverflow.com/a/47997504/474702记得那个套管 很重要,所以我随意使用了[JsonProperty("property-name")]
    2. 您需要在Program.cs中正确加载Serilog

    见下文:

    Host.CreateDefaultBuilder(args)
        .UseServiceProviderFactory(new AutofacServiceProviderFactory())
        .UseSerilog((ctx, config) => 
            config
                .ReadFrom.Configuration(ctx.Configuration)
                .Enrich.FromLogContext())
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });
    

    一旦我开始工作,我就能在日志中看到变化:

    [DEBUG][12/30/2019 17:02:38][Thread 0005][akka://MyActorSystem/system/log1-SerilogLogger] Started (Akka.Logger.Serilog.SerilogLogger)
    [INFO][12/30/2019 17:02:38][Thread 0005][[akka://MyActorSystem/system/log1-SerilogLogger#121623868]] SerilogLogger started
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多