如何更改 Serilog 中记录事件的时区?

问题描述 投票:0回答:1

我想更改 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();

c# .net serilog
1个回答
0
投票

如果您控制输出格式,那么您可以使用

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");

    }
© www.soinside.com 2019 - 2024. All rights reserved.