У меня есть простая функция Azure, и я хотел бы иметь возможность отслеживать выходные данные журнала как в окне журнала потоковой передачи, так и в Application Insights.
Пока я могу видеть выходные данные NLog в Application Insights, но не в окне потоковой передачи. Выходные данные Microsoft ILogger отображаются в обоих случаях.
Вот что я сделал до сих пор:
Наконец, я изменил хост.json, чтобы поднять уровень ведения журнала по умолчанию до «Trace». Это необходимо для того, чтобы в окне потоковой передачи отображались выходные данные на уровне трассировки для Microsoft ILogger, и я подумал, что это может быть причиной того, что ни один из выходных данных Nlog не показывался...
{
"version": "2.0",
"logging": {
"logLevel": {
"default": "Trace"
}
}
}
На данный момент результаты таковы:
Вот окончательный код функции...
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");
}
}
Заранее спасибо за любые предложения - без сомнения, я пропускаю какой-то простой шаг.
Спасибо, Карлос, но, как я уже упоминал в своем посте, я прочитал этот вопрос и ответ и связанный с ним. Оба они относятся к использованию файла конфигурации, тогда как я пытаюсь сделать это с (эквивалентным) программным интерфейсом.
Может быть, это может помочь: github.com/NLog/NLog.Extensions.Logging/wiki/…?
Пожалуйста, проверьте github.com/nlog/nlog/wiki/Журналирование-устранение неполадок
Я проверю эти ссылки более подробно позже, но просто повторю... NLog _ правильно ведет журнал в целевом объекте ApplicationInsights с точно такими же правилами, что и TraceTarget. Проблема заключается в том, что выходные данные TraceTarget не попадают в консоль Streamed Log на портале Azure. В этой первой ссылке есть интересный раздел, который показывает, как подключить NLog к экземпляру ILogger, поэтому я попробую это позже.
Благодаря связь, предоставленному Рольфом Кристенсеном
кажется, решение состоит в том, чтобы настроить новое правило, используя MicrosoftILoggerTarget
, а не TraceTarget
.
Итак, полный код
var config = new LoggingConfiguration();
//ensure that log output is seen in the Streamed Log window
config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace,
new MicrosoftILoggerTarget(azureLog)));
//ensure that log output is sent to Application Insights
config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace,
new ApplicationInsightsTarget()));
LogManager.Configuration = config;
var nlog = LogManager.GetLogger("Example");
nlog.Info("output from nlog");
где azureLog — это ILogger
, предоставленный методу Run функции.
MicrosoftILoggerTarget
можно найти в пакете nuget NLog.Extensions.Logging.
Счастливый MicrosoftILoggerTarget
смог решить вашу проблему :)