NLog с целью Application Insights не регистрирует пользовательские параметры и исключения - PullRequest
0 голосов
/ 26 апреля 2019

Я использую Nlog с Application Insights в качестве цели в проекте WebJobs для ведения журнала телеметрии.Кажется, что все работает, если я регистрирую только сообщение, как показано ниже.

_logger.Log(LogLevel.Info, "Job completed");

Я вижу информацию о трассировке в обзорах приложения с сообщением «Задание выполнено»

Но я хотел войтинекоторые параметры вместе с сообщением, как показано ниже.

_logger.Info($"Job created successfully", req.UserId, req.ReportName, jobId, searchString);

или как показано ниже

catch (Exception ex)
{
    _logger.Error(ex, "Error creating the job", req.UserId, req.ReportName, searchString);
    throw;
}

Я ожидаю, что в приложениях прослеживается след, содержащий параметры, которые я передал вместе с сообщением.Но я могу видеть только сообщение, но не какие-либо параметры или сведения об исключениях.

Что мне не хватает?

Редактировать:

NLog Nuget версии 4.3.8 и Microsoft.ApplicationInsights.NLogTarget nuget версия 2.4.1

Подробнее Код:

try
{
    var jobId = _reportingService.RequestReport(req.ReportName, searchString).Result;

    _logger.Info($"Job created successfully", req.UserId, req.ReportName, jobId, searchString);

    var output = new RetrieveReportDataRequest()
    {
        CreationRequest = new ReportCreationRequest()
        {
            ImmutableUserId = req.UserId,
           ...
        },
        SearchParameters = searchString,
        JobId = jobId,
        Created = DateTime.UtcNow,
    };

    outputQueueMessage = JsonConvert.SerializeObject(output, settings);
}
catch (Exception ex)
{
    log.WriteLine(ex.Message);
    _logger.Error(ex, "Error creating the job", req.UserId, req.ReportName, searchString);
    throw;
}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Другой, возможно, более простой вариант - использовать структурированное ведение журнала.

, например

_logger.Info("Job {JobId} created successfully for {User} on {ReportName} with {Search}", jobId, req.UserId, req.ReportName, searchString);

Это создаст свойства события JobId, User, ReportName и Search.

См. Также NLog - Как использовать структурированное ведение журнала

примечание: в этом случае не используйте интерполированные строки.

0 голосов
/ 26 апреля 2019

Вы можете использовать LogEventInfo, затем добавить параметры в его свойствах.

Пример кода:

Для информации уровня журнала:

            LogEventInfo eventInfo = new LogEventInfo(LogLevel.Info, "event1", "this is a info111");
            eventInfo.Properties["myname"]= "myname is ddd";
            eventInfo.Properties["myid"] = "myid is ddd";
            eventInfo.Properties["myjobid"] = "myjobid is ddd";
            log.Log(eventInfo);

Для журнала ошибокуровень:

        #in you code, you can change the new Exception() to your own exception
        LogEventInfo eventinfo2 = new LogEventInfo(LogLevel.Error, null,null,null,null,new Exception("anexception222"));
        eventinfo2.Properties["errormessage"] = "thi si a error message";
        eventinfo2.Properties["myname"] = "myname is ddd";
        eventinfo2.Properties["myid"] = "myid is ddd";
        eventinfo2.Properties["myjobid"] = "myjobid is ddd";
        log.Log(eventinfo2);

Затем вы можете увидеть параметры на портале Azure:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...