fix(scripting): companion sink falls back to ScriptId for the main-log mirror (T3 review)
This commit is contained in:
@@ -47,7 +47,8 @@ public sealed class ScriptLogCompanionSink : ILogEventSink
|
|||||||
if (logEvent.Level < _minMirrorLevel) return;
|
if (logEvent.Level < _minMirrorLevel) return;
|
||||||
|
|
||||||
var scriptName = "unknown";
|
var scriptName = "unknown";
|
||||||
if (logEvent.Properties.TryGetValue(ScriptLoggerFactory.ScriptNameProperty, out var prop)
|
if ((logEvent.Properties.TryGetValue(ScriptLoggerFactory.ScriptNameProperty, out var prop)
|
||||||
|
|| logEvent.Properties.TryGetValue(ScriptLoggerFactory.ScriptIdProperty, out prop))
|
||||||
&& prop is ScalarValue sv && sv.Value is string s)
|
&& prop is ScalarValue sv && sv.Value is string s)
|
||||||
{
|
{
|
||||||
scriptName = s;
|
scriptName = s;
|
||||||
|
|||||||
@@ -136,6 +136,36 @@ public sealed class ScriptLogCompanionSinkTests
|
|||||||
Should.NotThrow(() => companion.Emit(ev));
|
Should.NotThrow(() => companion.Emit(ev));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tests that an Error event carrying only ScriptId (no ScriptName) is mirrored
|
||||||
|
/// with the ScriptId value — not the "unknown" fallback.
|
||||||
|
/// Evaluators built by ScriptLoggerFactory bind ScriptId, not ScriptName.
|
||||||
|
/// </summary>
|
||||||
|
[Fact]
|
||||||
|
public void ScriptId_used_as_fallback_when_ScriptName_absent()
|
||||||
|
{
|
||||||
|
var mainSink = new CapturingSink();
|
||||||
|
var mainLogger = new LoggerConfiguration()
|
||||||
|
.MinimumLevel.Verbose().WriteTo.Sink(mainSink).CreateLogger();
|
||||||
|
|
||||||
|
var scriptLogger = new LoggerConfiguration()
|
||||||
|
.MinimumLevel.Verbose()
|
||||||
|
.WriteTo.Sink(new ScriptLogCompanionSink(mainLogger))
|
||||||
|
.CreateLogger();
|
||||||
|
|
||||||
|
// Bind ScriptId only — no ScriptName — as the evaluator path does.
|
||||||
|
scriptLogger.ForContext(ScriptLoggerFactory.ScriptIdProperty, "script-abc-123")
|
||||||
|
.Error("evaluator error");
|
||||||
|
|
||||||
|
mainSink.Events.Count.ShouldBe(1);
|
||||||
|
var forwarded = mainSink.Events[0];
|
||||||
|
// ScriptName property in the forwarded event must be the ScriptId value, not "unknown".
|
||||||
|
forwarded.Properties.ShouldContainKey("ScriptName");
|
||||||
|
((ScalarValue)forwarded.Properties["ScriptName"]).Value
|
||||||
|
.ShouldBe("script-abc-123",
|
||||||
|
"companion sink should fall back to ScriptId when ScriptName is absent");
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Tests that null main logger is rejected.</summary>
|
/// <summary>Tests that null main logger is rejected.</summary>
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Null_main_logger_rejected()
|
public void Null_main_logger_rejected()
|
||||||
|
|||||||
Reference in New Issue
Block a user