在 Metrolog 中记录当地时间

Logging in Local time in Metrolog

我的 Metrolog 输出看起来像是在 GMT 中记录的。我的时区是 GMT +5.30。设备上的时间设置正确。如何让 Metrolog 以当地时间登录?

示例日志:4|2017-05-15T05:05:36.6887812+00:00|TRACE|3|App|Analytics configured

您可以通过创建 class 扩展 MetroLog.Layouts.Layout 来更改跟踪布局,您可以在其中显示 DateTime 根据你的时区 :

public class CustomLayout : MetroLog.Layouts.Layout
{
    /// <summary>
    /// Create a formatted string based on given informations
    /// </summary>
    /// <param name="context"><see cref="LogWriteContext"/></param>
    /// <param name="info"><see cref="LogEventInfo"/></param>
    /// <returns>Formatted string to log</returns>
    public override string GetFormattedString(LogWriteContext context, LogEventInfo info)
    {
        return $"{info.SequenceID}|{info.TimeStamp.LocalDateTime}|{info.Level}|{info.Logger}|{info.Message}|{info.Exception}";
    }
}

并且不要忘记在初始化目标时使用此自定义布局。例如,如果您使用的是 DebugTarget,您应该执行如下操作:

var loggingConfiguration = new LoggingConfiguration { IsEnabled = true };
loggingConfiguration.AddTarget(LogLevel.Trace, LogLevel.Fatal, new DebugTarget(new CustomLayout()));

然后创建您的日志管理器:

var logManager = LogManagerFactory.CreateLogManager(loggingConfiguration);