Tag: serilog

Serilog的例外解构

Serilog有一种方便的方法来解析对象,如下例所示: logger.Debug(exception, “This is an {Exception} text”, exception); logger.Debug(exception, “This is an {@Exception} structure”, exception); 第一行导致记录器将exception记录为纯文本(通过调用ToString()),第二行使记录器将exception属性写为单独的字段。 但是这个重载呢: logger.Debug(exception, “This is an exception”, exception); 这个作为第一个参数使用exception,它总是写成一个字符串。 我想要做的是以结构化的方式启用日志记录exception。 是否可以配置Serilog来实现这一目标? UPDATE。 我想这个问题会导致记录exception的另一个方面:如何确保消息通过exception属性进行丰富(因此它们以结构化的方式记录到富散问件,如Elasticsearch),而无需将所有exception属性写入呈现的文本消息(所以纯文本记录器没有填满大量的exception细节)。

模式使用Serilog(通过ILogger vs使用静态Serilog.Log)

背景 在Serilog被选为记录器的新项目中,我自动开始绕过ILogger接口。 代码访问Log.Logger一次,然后希望记录的类通过构造函数注入接受ILogger 。 我受到了这种做法的挑战,建议是在Log类上使用静态方法,例如Serilog.Log.Debug(…) 。 争论的焦点是set; 在Log.Logger所以很容易进行Log.Logger 。 看看api,我可以看到传递ILogger的好处之一是ForContext方法。 我花了一些时间在网上和Serilog的文档中,但是我找不到有关在整个应用程序代码中访问日志的规范方法的信息。 题 是否存在规范的,即大多数情况下更好的方式来访问/传递Serilog记录器,如果存在,是否通过ILogger或在Serilog.Log类上使用静态api?

如何关闭Serilog?

我们使用Serilog将项目记录到带有Windows服务的数据库中,并且用户希望能够进行手动运行,因此我们创建了一个按钮(在网页上)来调用相同的代码(作为模块,而不是服务本身)。 当我们在代码中添加初始化日志以便代码将继续添加到db日志表时,它也会在此之后记录所有http流量。 因此,在运行此代码之后,我们希望“关闭”在Web服务器上运行的Logger。 有一个简单的方法吗? Log.Logger = new LoggerConfiguration() .WriteTo.MSSqlServer(ConfigurationManager.ConnectionStrings[“ConnString”].ConnectionString, “LOGS”) .CreateLogger();

Serilog MSSQL Sink不会将日志写入数据库

我创建了一个.Net类库(4.6.2)并创建了serilog实现,它由其他接口(如控制台应用程序)调用。 现在,当我使用文件接收器类型时,日志将被写入文件但是使用MSSQL接收器,它没有这样做。 使用autoCreateTable选项提供的列选项创建日志表 ILogger logger = new LoggerConfiguration() .WriteTo.MSSqlServer(connectionString, tableName, autoCreateSqlTable: autoCreateSqlTable, restrictedToMinimumLevel: LogEventLevel.Verbose, columnOptions: GetSQLSinkColumnOptions(), batchPostingLimit: batchPostingLimit) .CreateLogger(); 我还启用了serilog的自我记录,但没有显示exception。 找不到任何有用的解决方案。 但是生成了日志表。 我已检查用户的权限,并且还具有正确的权限。 下面是代码的快照。 public static class GenericLogger { private static ILogger _usageLogger; private static ILogger _errorLogger; static GenericLogger() { var logTypes = LogConfigurationHelper.GetLogTypes(); if (logTypes != null && logTypes.Count > 0) { foreach (var […]

使用Serilog的一个记录器的多个filter

我正在尝试使用我的ASP.NET核心应用程序设置Serilog。 我想为所有控制器提供一个日志文件,一个用于所有服务,一个用于其余服务,理想情况下包含一切。 每个控制器都inheritanceBaseController和每个服务BaseService 。 我正在调用的控制器和服务正在编写跟踪日志事件。 通过dependency injection检索记录器和服务。 该服务看起来像控制器(关于记录器)。 public class UsersController: BaseController { private UserService service { get; } public UsersController(ILogger logger, UserService userService) : base(logger) { service = userService; } } public abstract class BaseController: Controller { protected readonly ILogger Logger; public BaseController(ILogger logger) { Logger = logger; } } 方法1 (仅与基础部门合作) Log.Logger = […]

Serilog – 多个日志文件

我正在使用Serilog进行日志记录,并且无法弄清楚如何将日志事件分离到不同的文件。 例如,我想将错误记录到error_log-ddmmyyyy.txt,并将警告记录到warn_log-ddmmyyyy.txt。 这是我的记录器配置: Log.Logger = new LoggerConfiguration() .WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(Matching.WithProperty(“Level”, “Warning”)) .WriteTo.RollingFile( Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @”Logs\warn_log-{Date}.txt”), outputTemplate: OutputTemplate)) .WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(Matching.WithProperty(“Level”, “Error”)) .WriteTo.RollingFile( Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @”Logs\error_log-{Date}.txt”), outputTemplate: OutputTemplate)) .CreateLogger(); 它仅在我在日志消息中指定{Level}属性时才有效。 我试图使用: Matching.WithProperty(“Level”, l => l == LogEventLevel.Warning) 但它也没有用。