C#ASP.NET Core Serilog添加类名和方法进行记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#ASP.NET Core Serilog添加类名和方法进行记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2498字,纯文字阅读大概需要4分钟。
内容图文
![C#ASP.NET Core Serilog添加类名和方法进行记录](/upload/InfoBanner/zyjiaocheng/811/527ab6d2d2524bb49e94924837bd2087.jpg)
我最近添加了日志记录到我的ASP.Net核心项目.目前,日志以这种格式写入.txt文件:
{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}
例如:
2017-11-30 13:58:22.229 +01:00 [Information] Item created in database.
这很好,但我想要记录的类的名称和正在执行此.txt文件的方法.例如,当A类使用方法B向数据库写入内容并记录此内容时,我希望看到类似的内容
ClassA.MethodB: Item created in database
所有记录的类都将Logger注入到它们的构造函数中
public class ClassA
{
private readonly ILogger _log;
public ClassA(ILogger<ClassA> log){
_log = log;
}
public void AddItemToDb(Item item){
//Add item
//On success:
_log.LogInfo("Added item to db.");
}
}
我目前正在使用Serilog并使用以下LoggerConfiguration:
var logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.WriteTo.RollingFile(Configuration.GetValue<string>("LogFilePath") + "-{Date}.txt", LogEventLevel.Information)
.CreateLogger();
如何将类和方法添加到日志中?
编辑
我将自定义的outputTemplate添加到.WriteTo.Rollingfile()方法中,如下所示:
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}")
这导致命名空间加上要在日志中添加的类,现在只缺少方法
解决方法:
我通过使用Jordan’s答案和this答案的组合解决了这个问题.
我通过enrichment添加了logcontext来改变我的Logger配置,并将属性’method’添加到我的outputTemplate:
var logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.Enrich.FromLogContext()
.WriteTo.RollingFile(Configuration.GetValue<string>("LogFilePath") + "-{Date}.txt", LogEventLevel.Information,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{Method}) {Message}{NewLine}{Exception}")
.CreateLogger();
Enrich.FromLogContext允许使用LogContext.PushProperty()方法将属性推送到outputTemplate.在本例中为’method’属性(注意outputTemplate中的{Method}).
异步方法的示例:
using (LogContext.PushProperty("Method", new LogAsyncMethods().GetActualAsyncMethodName()))
{
_log.LogInformation("Log message.");
}
GetActualAsyncMethodName()的编写方式如下:
public static string GetActualAsyncMethodName([CallerMemberName]string name = null) => name;
这适用于异步方法.
现在对于非异步方法,这很好用:
using (LogContext.PushProperty("Method", System.Reflection.MethodBase.GetCurrentMethod().Name))
{
_log.LogInformation("Changing of customer name succeeded");
}
现在,方法名称正在记录中显示. SourceContext添加了类的命名空间,并通过添加“.{Method}”,它将导致:
Namespace.ClassName.MethodName
内容总结
以上是互联网集市为您收集整理的C#ASP.NET Core Serilog添加类名和方法进行记录全部内容,希望文章能够帮你解决C#ASP.NET Core Serilog添加类名和方法进行记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。