正确解析log4jxmlevent renderer的timestamp属性

时间:2018-10-19 09:14:55

标签: c# date serialization nlog

我使用NLog登录我的一个应用程序,并希望通过UI向用户提供日志。为此,我构建了一个日志解析器,该日志解析器获取日志文件并将所有日志解析为C#对象,然后将其发送到UI,以便用户可以查看它们。

但是,我很难正确地解析日期。带有log4jxmlevent的NLog日志如下所示:

<log4j:event 
    logger="Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" 
    level="INFO" 
    timestamp="1539939614029" 
    thread="6">
        <log4j:message>Executing action method Condato.IoT.Client.TinkerForge.Controllers.ApplicationController.GetLogs (Condato.IoT.Client.TinkerForge) - Validation state: Valid</log4j:message>
        <log4j:properties>
            <log4j:data name="log4japp" value="Condato.IoT.Client.TinkerForge(15096)" />
            <log4j:data name="log4jmachinename" value="DEVDOTNET" />
        </log4j:properties>
</log4j:event>

然后我创建了一个简单的类来保存日志:

public class Log
{
    public string Logger { get; set; }
    public string Level { get; set; }
    public DateTime Time { get; set; }
    public string Message { get; set; }
    public string LogSource { get; set; }
    public string LogSourceName { get; set; }
}

之后,我只需遍历我的日志并将每个XML解析为C#对象。这里的相关部分是解析每个日志的timestamp属性。

var time = new DateTime(long.Parse(rootReader["timestamp"])).ToUniversalTime();

我假设timestamp属性中的数字代表刻度线。因此,我只是将它们传递给Date()构造函数。但是,这是我通过解析timestamp属性得到的输出:

enter image description here

所以这似乎不合适,因为这些日志是昨天创建的。我看过NLog文档,但是log4jxmlevent的文档非常稀疏,或者我错过了一些东西。

1 个答案:

答案 0 :(得分:1)

事实证明timestamp属性是Unix时间戳。所以我需要这样解析:

-

然后它给了我正确的值。