我使用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
属性得到的输出:
所以这似乎不合适,因为这些日志是昨天创建的。我看过NLog文档,但是log4jxmlevent
的文档非常稀疏,或者我错过了一些东西。
答案 0 :(得分:1)
事实证明timestamp属性是Unix时间戳。所以我需要这样解析:
-
然后它给了我正确的值。