C# 正确解析log4jxmlevent呈现程序的时间戳属性
我使用NLog登录我的一个应用程序,并希望通过UI向用户提供日志。为此,我构建了一个日志解析器,它接受日志文件并将所有日志解析为C#对象,然后将这些对象发送到UI,以便用户可以查看它们 然而,我很难确定正确的日期。带有log4jxmleevent的NLog日志如下所示:C# 正确解析log4jxmlevent呈现程序的时间戳属性,c#,date,serialization,nlog,C#,Date,Serialization,Nlog,我使用NLog登录我的一个应用程序,并希望通过UI向用户提供日志。为此,我构建了一个日志解析器,它接受日志文件并将所有日志解析为C#对象,然后将这些对象发送到UI,以便用户可以查看它们 然而,我很难确定正确的日期。带有log4jxmleevent的NLog日志如下所示: <log4j:event logger="Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" level="INFO" tim
<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>
之后,我只需迭代我的日志,并将每个日志从XML解析为C#对象。这里的相关部分是解析每个日志的timestamp属性
var time = new DateTime(long.Parse(rootReader["timestamp"])).ToUniversalTime();
我假设timestamp
属性中的数字表示刻度。所以我只是将它们传递到Date()
构造函数中。但是,这是我通过解析timestamp
属性得到的输出:
所以这似乎是不对的,因为这些日志是昨天创建的。我已经看过NLog文档,但是
log4jxmleevent
文档很少,或者我遗漏了一些东西 原来timestamp属性是Unix时间戳。所以我需要像这样解析它:
var timestamp = DateTimeOffset.FromUnixTimeMilliseconds(long.Parse(rootReader["timestamp"].ToString())).DateTime;
然后它给了我正确的值。另请参见“是”,谢谢您添加该值。:)
var timestamp = DateTimeOffset.FromUnixTimeMilliseconds(long.Parse(rootReader["timestamp"].ToString())).DateTime;