在没有 DI 的情况下获取 Serilog 记录器的实例
Getting an instance of the Serilog logger without DI
我有一个没有使用 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));
获取记录器
Serilog 的设置如下:
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();
}
}
}
如何像在其他 类 中使用 log4net 那样获取 Serilog 记录器的实例,即 private static readonly ILog log = LogManager.GetLogger(typeof(Program));
?
Serilog 允许用事件的来源标记事件,一般来说 class 编写它们的名称。您可以使用 Log
class.
的 ForContext
方法之一来做到这一点
在你上面的例子中,它会是这样的:
private static readonly ILogger log = Log.ForContext<Program>();
或
private static readonly ILogger log = Log.ForContext(typeof(Program));
写入的事件将包含一个 属性 SourceContext
,其值为 "MyNamespace.MyClass"
,稍后可用于过滤掉嘈杂的事件,或有选择地将它们写入特定的接收器。
文档:https://github.com/serilog/serilog/wiki/Writing-Log-Events#source-contexts
我有一个没有使用 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));
Serilog 的设置如下:
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();
}
}
}
如何像在其他 类 中使用 log4net 那样获取 Serilog 记录器的实例,即 private static readonly ILog log = LogManager.GetLogger(typeof(Program));
?
Serilog 允许用事件的来源标记事件,一般来说 class 编写它们的名称。您可以使用 Log
class.
ForContext
方法之一来做到这一点
在你上面的例子中,它会是这样的:
private static readonly ILogger log = Log.ForContext<Program>();
或
private static readonly ILogger log = Log.ForContext(typeof(Program));
写入的事件将包含一个 属性 SourceContext
,其值为 "MyNamespace.MyClass"
,稍后可用于过滤掉嘈杂的事件,或有选择地将它们写入特定的接收器。
文档:https://github.com/serilog/serilog/wiki/Writing-Log-Events#source-contexts