#azure-application-insights #serilog
Вопрос:
Я использую Serilog для входа в application insights, но я получаю только предупреждения, ошибки и критические уровни журнала для регистрации. В appsettings.json у меня установлен минимальный уровень журнала для подробного, и это регистрирует все с помощью приемников файлов и консоли.
По умолчанию application insights может регистрировать только предупреждения и выше. В коде (в разделе настройка ведения журнала) я могу добавить фильтр, чтобы переопределить это предупреждение по умолчанию и выше. Я предпочитаю делать это в настройках приложений с другой конфигурацией ведения журнала.
Как я могу использовать настройки приложений, чтобы разрешить Serilog регистрировать все уровни в Application Insights?
- Я получаю некоторые журналы в application insights, поэтому подключение работает.
- Я вижу все уровни входа в файл журнала и на консоли.
Где настраивается ведение журнала,если я добавлю файл уровня журнала (закомментирован) Я могу заставить это работать. Мне нужно работать с приложениями.
host.ConfigureLogging(
loggingBuilder =>
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
loggingBuilder.AddApplicationInsights();
loggingBuilder.AddSerilog(logger, dispose: true);
//loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Trace);
}
);
Вот мои настройки приложений:
"Serilog": {
"AllowedHosts": "*",
"Enrich": [ "WithMachineName" ],
"MinimumLevel": {
"Default": "Verbose",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"fileSizeLimitBytes": "1048576",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact , Version=1.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10",
"path": "c:\LogFiles\Publisher\Test1\_log.txt",
"retainedFileCountLimit": null,
"rollingInterval": "Day",
"rollOnFileSizeLimit": "true"
}
},
{
"Name": "ApplicationInsights",
"Args": {
"restrictedToMinimumLevel": "Verbose",
"telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
}
}
]
},
Комментарии:
1. Есть ли какой-нибудь прогресс, сэр? Если вы чувствуете, что мой пост ниже полезен для вас, не могли бы вы принять его в качестве ответа?
2. @TinyWang это то, что я сделал, но это не работает. Я вижу только предупреждения, ошибки и критические параметры приложений, вошедших в систему. Я могу заставить его работать, но добавлю это в код: loggingBuilder. addFilter<ApplicationInsightsLoggerProvider>(«», уровень журнала. Трассировка); Мне нужно, чтобы он работал из приложений. Похоже, у меня те же настройки приложений, что и у вас.
3. Я обновил вопрос примерами кода и конфигурации. Кроме того, я заметил, что вижу подробные сообщения уровня, которые регистрируют библиотеки Microsoft (в Microsoft. EntityFrameworkCore. Инфраструктура), только не тогда, когда я их регистрирую.
4. Я думаю, это потому, что ваш код охватывал настройку приложений. Я вспомнил, что конфигурация в коде более высокого уровня, чем в настройке приложений. Я увидел, что в вашем наборе приложений нет ключа инструмента, и не могли бы вы изменить свой файл program.cs на то, что я опубликовал ниже? В ходе моего тестирования я также нахожу много документов по серилогу конфигурации, но только то, что я опубликовал ниже, увенчалось успехом. Я также не могу понять причину, по которой может работать только эта конфигурация. Я думаю, что вы также можете создать пустое asp.net основной проект mvc и скопируйте мой код для тестирования(замените только ключ инструмента).
5. В разделе appinsights есть клавиша инструмента. Регистратор получает это, иначе ничего не было бы зарегистрировано (и я вижу это в отладчике).
Ответ №1:
Вот мой результат тестирования:
Я создал свой asp.net основное приложение mvc, и вот мои настройки приложений.json:
{
"AllowedHosts": "*",
"Serilog": {
"Using": [],
"MinimumLevel": "Verbose",
"WriteTo": [
{
"Name": "Console",
"Args": {
"restrictedToMinimumLevel": "Verbose",
"outputTemplate": "{Timestamp:HH:mm:ss.fff zzz} [{Level}] {Message} {NewLine}{Exception}"
}
},
{
"Name": "ApplicationInsights",
"Args": {
"instrumentationKey": "instrument_key_here",
"restrictedToMinimumLevel": "Verbose",
"telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId"],
"Properties": {
"Application": "Sample"
}
}
}
Моя программа.cs, добавьте код конфигурации чтения и добавьте UseSerilog():
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
namespace serilog_appsetting_file_appinsights
{
public class Program
{
public static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseSerilog();
}
}
Мои посылки:
<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.17.0" />
<PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="3.1.0" />
</ItemGroup>
Мой файл контроллера:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Serilog;
using serilog_appsetting_file_appinsights.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace serilog_appsetting_file_appinsights.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
Log.Verbose("serilog_verbose_info");
Log.Debug("serilog_debug_info");
Log.Information("serilog_information_info");
Log.Warning("serilog_warning_info");
Log.Error("serilog_error_info");
return View();
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
При отладке в localhost мы можем видеть, как app insights записывает журналы, подобные этому, и просматривать журнал консоли