我想更改 Serilog 记录事件的时区。默认情况下,它使用系统的时区,但我需要记录不同时区的事件。我尝试使用具有不同时区的 CultureInfo,但这只会更改日期和时间的格式,而不更改时区本身。
Log.Logger = new LoggerConfiguration()
.WriteTo.File(path: "Logs/logs-.txt",
rollingInterval: RollingInterval.Month,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")
.CreateLogger();
如果您控制输出格式,那么您可以使用
ITextFormatter
public class CustomTimestampFormatter(TimeZoneInfo timeZone) : ITextFormatter
{
private readonly TimeZoneInfo _timeZone = timeZone;
public void Format(LogEvent logEvent, TextWriter output)
{
var localTime = TimeZoneInfo.ConvertTimeFromUtc(logEvent.Timestamp.UtcDateTime, _timeZone);
output.Write($"[{localTime:yyyy-MM-dd HH:mm:ss}] ");
logEvent.RenderMessage(output);
output.WriteLine();
}
}
static void Main(string[] args)
{
var logger = new LoggerConfiguration()
.WriteTo.Console(new CustomTimestampFormatter(TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")))
.CreateLogger();
logger.Information("log message");
}