获取一个没有DI的Serilog记录器实例



我有一个没有依赖注入的控制台应用程序,它使用log4net。我正在尝试用Serilog替换log4net。

这接近log4net的设置方式:

using log4net;
using log4net.Config;
using System;
using System.IO;
using System.Reflection;
namespace LoggingDemo.Log4Net
{
class Program
{
private static readonly ILog log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
log.Debug("Starting up");
log.Debug("Shutting down");
Console.ReadLine();
}
}
}

在其他类别中,通过设置private static readonly ILog log = LogManager.GetLogger(typeof(Program));获取记录器

序列号设置如下:

using Serilog;
using System;
namespace LoggingDemo.Serilog
{
class Program
{
static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("logfile.log", rollingInterval: RollingInterval.Day)
.CreateLogger();
Log.Debug("Starting up");
Log.Debug("Shutting down");
Console.ReadLine();
}
}
}

如何获得Serilog记录器的实例,就像我们在其他类(即private static readonly ILog log = LogManager.GetLogger(typeof(Program));(中使用log4net一样?

Serilog允许用事件的源标记事件,通常说来就是编写事件的类的名称。您可以使用Log类的一个ForContext方法来执行此操作。

在上面的例子中,它是这样的:

private static readonly ILogger log = Log.ForContext<Program>();

private static readonly ILogger log = Log.ForContext(typeof(Program));

写入的事件将包括值为"MyNamespace.MyClass"的属性SourceContext,该属性稍后可用于过滤噪声事件,或选择性地将它们写入特定接收器。


文档:https://github.com/serilog/serilog/wiki/Writing-Log-Events#source-上下文

最新更新