У меня есть простая функция Azure, и я хотел бы иметь возможность отслеживать вывод журнала как в окне потокового журнала, так и в Application Insights.
Пока я могу видеть вывод NLog в Application Insights, но не в окне потоковой передачи. Вывод Microsoft ILogger отображается в обоих случаях.
Вот что я сделал до сих пор:
- Создана базовая функция тестирования Azure
- На портале Azure я включил Application Insights
- Установлено NLog и Microsoft.ApplicationInsights.NLogTarget Зависимости nuget для функции.
- Добавлен код функции для программного создания цели nlog Application Insights.
- После прочтения этих вопросов ... Потоковая передача журнала Azure с NLog и Как интегрировать NLog для записи журнала в журнал потоковой передачи Azure Я также программно добавил NLog TraceTarget, поскольку они предлагают что механизм потокового журнала отображает только выходной поток трассировки (не путать с уровнем журнала, называемым «трассировка»!)
Наконец, я изменил host.json , чтобы повысить уровень ведения журнала по умолчанию до «Trace». Это необходимо для того, чтобы потоковое окно показывало выходные данные уровня трассировки для Microsoft ILogger, и я подумал, что это может быть причиной того, что ни один из выходных данных Nlog не показывал ...
{
"version": "2.0",
"logging": {
"logLevel": {
"default": "Trace"
}
}
}
Пока что результаты таковы:
- Все выходные данные журнала Microsoft отображаются в окне потоковой передачи и журнале Application Insights.
- Выход Nlog равен , показанному в Application Insights, но NOT отображается в окне потоковой передачи.
Вот окончательный код функции ...
public static class Function1
{
[FunctionName("LogTest")]
public static void Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
// Set up NLOG targets and logger
var config = new LoggingConfiguration();
//send logging to application insights
config.LoggingRules.Add(
new LoggingRule("*", LogLevel.Trace,
new ApplicationInsightsTarget()));
//also try to log to Trace output
//'RawWrite' is used to try and force output at all log-levels
config.LoggingRules.Add(
new LoggingRule("*", LogLevel.Trace,
new TraceTarget {RawWrite = true}));
LogManager.Configuration = config;
var nlog = LogManager.GetLogger("Example");
//log using native
log.LogInformation($"log:Info"); //appears in live-stream, app-insights
log.LogError("log:Error"); //appears in live-stream, app-insights
log.LogTrace("log:Trace"); //appears in live-stream, app-insights (after modifying host.json)
//log using nlog
nlog.Info("nlog:info"); //appears in ........... app-insights
nlog.Error("nlog:error"); //appears in ........... app-insights
nlog.Trace("nlog:trace"); //appears in ........... app-insights
//say goodbye
log.LogInformation("log:ending");
}
}
Заранее спасибо за любые предложения - без сомнения, я пропускаю какой-то простой шаг.