Правильность синтаксического анализа метки времени в log4jxmlevent рендерере - PullRequest
0 голосов
/ 19 октября 2018

Я использую NLog для входа в одно из своих приложений и хотел предоставить журналы пользователю через пользовательский интерфейс.Для этой цели я создал анализатор журналов, который берет файл журнала и анализирует все журналы в объектах C #, которые затем отправляются в пользовательский интерфейс, чтобы пользователь мог их просматривать.

Однако мне труднополучить правильную разбор даты.Журналы NLog с log4jxmlevent выглядят следующим образом:

<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 голосов
/ 22 октября 2018

Оказывается, свойство timestamp является меткой времени Unix.Поэтому мне нужно было разобрать это так:

var timestamp = DateTimeOffset.FromUnixTimeMilliseconds(long.Parse(rootReader["timestamp"].ToString())).DateTime;

Затем он дал мне правильное значение.

...