除了使用预处理器指令来启用/禁用日志记录之外,是否还有其他选项取决于环境变量?我不希望来自生产环境的敏感数据进入日志。 事实证明,每个环境都有自己的配置。
public class Service
{
private readonly Serilog.ILogger logger;
public Service(ILogger logger)
{
this.logger = logger;
}
public void DoSomething()
{
#if DEBUG
// if it's a development environment
this.logger
.ForContext("Debug data", data)
.Information("something happened");
#endif
// if it's a production environment
this.logger.Information("something happened");
}
}
答案 0 :(得分:2)
您可以根据条件配置Serilog管道。您只需要决定如何检测应用程序正在运行的环境,并相应地构建管道即可。
var configuration = new LoggerConfiguration()
.WriteTo.Console();
if (condition)
{
configuration.WriteTo.SomeOtherSink();
}
Log.Logger = configuration.CreateLogger();
以下是根据条件配置Serilog的更多示例:
您还可以通过配置文件设置Serilog,并且每个环境具有单独的配置文件。如果要使用appsettings.json
,请查看Serilog.Settings.Configuration;如果要使用app.config
,请查看Serilog.Settings.AppSettings。
答案 1 :(得分:0)
从Serilog 2.9.0开始,您可以使用条件接收器。通过使用.WriteTo.Conditional
,您可以指定条件,该条件定义是否将接收器写入。
例如
bool enableConsoleLogging = (...)
bool enableFileLogging = (...)
var builder = new LoggerConfiguration()
.Enrich.WithExceptionDetails()
.Enrich.FromLogContext()
.MinimumLevel.Warning()
.WriteTo.Conditional(evt => enableConsoleLogging, wt => wt.Console())
.WriteTo.Conditional(evt => enableFileLogging, wt => wt.File(...));
Log.Logger = builder.CreateLogger();
// ...