无论如何,使用方法名称来丰富所有Serilog输出.
对于实例,请考虑如果我有以下内容;
Public Class MyClassName
Private Function MyFunctionName() As Boolean
Logger.Information("Hello World")
Return True
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
期望的输出如下;
2015-04-06 18:41:35.361 +10:00 [Information] [MyFunctionName] Hello World!
Run Code Online (Sandbox Code Playgroud)
实际上,完全合格的名字会很好.
2015-04-06 18:41:35.361 +10:00 [Information] [MyClassName.MyFunctionName] Hello World!
Run Code Online (Sandbox Code Playgroud)
似乎"Enrichers"仅对静态信息有用,并且每次都不起作用.
Mov*_*GP0 14
如果您需要C#中的版本:
public static class LoggerExtensions
{
public static ILogger Here(this ILogger logger,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0) {
return logger
.ForContext("MemberName", memberName)
.ForContext("FilePath", sourceFilePath)
.ForContext("LineNumber", sourceLineNumber);
}
}
Run Code Online (Sandbox Code Playgroud)
使用这样:
Logger.Here().Information("Hello, world!");
Run Code Online (Sandbox Code Playgroud)
请记住在消息模板中添加这些属性.你可以使用这样的东西:
var outputTemplate = "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message}{NewLine}in method {MemberName} at {FilePath}:{LineNumber}{NewLine}{Exception}{NewLine}";
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Warning()
.Enrich.FromLogContext()
.WriteTo.RollingFile("log/{Date}.log", outputTemplate, LogEventLevel.Warning)
.WriteTo.Console(LogEventLevel.Warning, outputTemplate, theme: AnsiConsoleTheme.Literate)
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
Nic*_*rdt 12
通过反映调用堆栈可以通过扩展来实现这一点,但这样做非常昂贵,因此Serilog不提供它.
相反,你可以使用类似的东西:
Logger.Here().Information("Hello, world!");
Run Code Online (Sandbox Code Playgroud)
并实现该Here()方法作为扩展方法ILogger:
<Extension>
Public Sub Here(ByVal logger as ILogger,
<CallerMemberName> Optional memberName As String = Nothing)
Return logger.ForContext("MemberName", memberName)
End Sub
Run Code Online (Sandbox Code Playgroud)
基于MovGP0 的答案(对于 C#),
我创建了一个解决方案,不需要Here()在要记录的每一行中使用 -Method,只需将自定义Log.cs-Class 添加到项目的“根命名空间”中即可。
有关更多信息,请参阅:https://gist.github.com/litetex/b88fe0531e5acea82df1189643fb1f79