我正在尝试使用
ForContext()
向演员的记录器添加额外的属性。当前的 Akka.NET 文档表示,从 Akka.NET 1.5 版本开始,您应该能够使用 GetLogger()
,而不是 GetLogger<SerilogLoggingAdapter>()
,并且特定的 SerilogLoggingAdapter
仅在 Akka.net 1.4 中需要。
但是这似乎不起作用 - 我可以显示由
ForContext
设置的属性的唯一方法是使用显式 GetLogger<SerilogLoggingAdapter>()
方式。
是否有某种方法可以在 Actor 内部使用 ForContext 调用,而不必显式引用
SerilogLoggingAdapter
这是一个简单的例子 - actor MyActor 尝试双向发出消息,只有旧的方式可以让我访问该属性:
internal class Program
{
static void Main(string[] args)
{
var logger = new LoggerConfiguration()
.WriteTo.Console(outputTemplate: "[From Context: {FromContextProperty}] [From Message:{FromMessageProperty}] {Message:lj}{NewLine}")
.MinimumLevel.Information()
.CreateLogger();
Serilog.Log.Logger = logger;
var systemConfig = @"
akka {
loglevel=DEBUG,
loggers=[""Akka.Logger.Serilog.SerilogLogger, Akka.Logger.Serilog""]
logger-formatter=""Akka.Logger.Serilog.SerilogLogMessageFormatter, Akka.Logger.Serilog""
}";
using (var sys = ActorSystem.Create("mySystem", systemConfig))
{
Console.WriteLine("Enter some text to send to the actor, to log it");
var act = sys.ActorOf<MyActor>();
while (true)
{
act.Tell(Console.ReadLine());
}
}
}
}
public class MyActor:ReceiveActor
{
public MyActor()
{
Receive<string>(txt =>
{
// this way does NOT render the FromContext property in the output, contrary to documentation
Context.GetLogger()
.ForContext("FromContextProperty", "bbb")
.Error("NEW WAY {FromMessageProperty}", txt);
Context.GetLogger<SerilogLoggingAdapter>()
.ForContext("FromContextProperty", "bbb")
.Error("OLD WAY {FromMessageProperty}", txt);
}
);
}
}
使用的软件包版本:
<ItemGroup>
<PackageReference Include="Akka" Version="1.5.19" />
<PackageReference Include="Akka.Logger.Serilog" Version="1.5.12.1" />
<PackageReference Include="Serilog" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" />
</ItemGroup>
当前的 Akka.NET 文档表示,从 Akka.NET 1.5 版本开始,您应该能够使用 GetLogger(),而不是 GetLogger(),并且仅在 Akka.net 1.4 中才需要特定的 SerilogLoggingAdapter。
所以我认为我们在 Akka.Hosting 文档中遗漏了这一点,但基本上现在可以普遍设置日志格式化程序。不过,在配置过程中需要执行此操作,您可以在此处查看:https://github.com/akkadotnet/Akka.Logger.Serilog/blob/ba72148dce96f26d1faccd2a6362ceaaef9e7eca/src/Examples/Akka.Hosting.LoggingDemo/程序.cs#L26-L37