Вход в Application Insights для консольного приложения .NET Core 2.1 с помощью LoggerFactory - PullRequest
0 голосов
/ 07 сентября 2018

У меня консольное приложение .NET Core 2.1. Я добавил все необходимые пакеты Nuget.

private static IConfiguration Configuration { get; set; }
static void Main(string[] args)
{
    ServiceCollection services = new ServiceCollection();
    ConfigureServices(services);
    var serviceProvider = services.BuildServiceProvider();
    var logger = serviceProvider.GetService<ILoggerFactory>()
        .CreateLogger<Program>()
    var service = serviceProvider.GetService<TestClass>();
    service.TimmerTriggerTask();
}

private static void ConfigureServices(IServiceCollection services)
{
    IConfiguration config = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", true, true)
            .Build();
    services.AddApplicationInsightsTelemetry("8028437c-1111-2222-8293-2cf3f3f106a8"); //instrumentation key
    services.AddLogging(builder => builder.AddConsole());
}

TestClass.cs
public class TestClass
{
    private readonly ILogger<TestClass> _logger;

    public TestClass(ILogger<TestClass> logger)
    {
        Console.WriteLine("Ctor");
        _logger = logger;
    }

    public void TimmerTriggerTask()
    {
        Console.WriteLine("Timer");
    //LOG BELOW IN APPLICATION INSIGHTS
        _logger.LogTrace("Hello World");
        _logger.LogInformation(DateTime.Now.ToString());
    }
}

Мне нужно зарегистрировать всю информацию и исключения в Application Insights. ищу возможность интеграции loggerfactory с applicationInsights.

Я ищу что-то, что мы можем сделать в .NET Core Web app

WebHost.CreateDefaultBuilder(args).UseApplicationInsights()
loggerFactory.AddApplicationInsights(app.ApplicationServices, defaultLogLevel);

Пожалуйста, помогите мне, как я могу использовать классы логгера для входа в applicationinsights.

Пожалуйста, предоставьте альтернативное решение, если то, что я делаю, неверно.

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Обновление:

Для консольного приложения .net core 2.1 вы можете использовать следующий код:

using Microsoft.ApplicationInsights;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;

        static void Main(string[] args)
        {

            var telemetryClient = new TelemetryClient() { InstrumentationKey = "your instrumentation key" };

            ServiceCollection services = new ServiceCollection();
            services.AddSingleton(x => telemetryClient);

            var provider = services.BuildServiceProvider();

            var loggerFactory = new LoggerFactory();
            loggerFactory.AddApplicationInsights(provider, LogLevel.Information);

            var logger = loggerFactory.CreateLogger<Program>();
            logger.LogInformation("a test from 0911 again...");
            logger.LogError("a error test from 0911 again...");


            Console.WriteLine("aaa");

            telemetryClient.Flush();
            System.Threading.Thread.Sleep(5000);
        }

После запуска в окне вывода Visual Studio я вижу, что данные телеметрии отправлены, снимок экрана, как показано ниже: enter image description here

А также это было показано на лазурном портале, снимок экрана ниже: enter image description here

0 голосов
/ 06 августа 2019

LoggerFactory.AddApplicationInsights устарело. Добавьте ссылку на Microsoft.Extensions.Logging.ApplicationInsights и используйте следующий код. Вы можете найти полный пример от Microsoft здесь .

    static void Main(string[] args)
    {
        IServiceCollection services = new ServiceCollection();

        // Channel is explicitly configured to do flush on it later.
        var channel = new InMemoryChannel();
        services.Configure<TelemetryConfiguration>(
            (config) =>
            {
                config.TelemetryChannel = channel;
            }
        );

        services.AddLogging(builder =>
        {
            builder.AddConsole();
            builder.AddApplicationInsights("[AI Instrumentation Key here]");
        });

        var provider = services.BuildServiceProvider();
        var logger = provider.GetService<ILogger<Program>>();

        logger.LogInformation("This will show up in Application Insights"); 

        // Explicitly call Flush() followed by sleep is required in Console Apps.
        // This is to ensure that even if application terminates, telemetry is sent to the back-end.
        channel.Flush();
        Thread.Sleep(1000);
    }

Вы можете добавить пользовательские измерения для реализации структурированного ведения журнала, используя шаблоны сообщений журнала .

public void DoTheThings()
{ 
    var id = 12345;
    var duration = 300;

    logger.LogInformation(
        "Did the things for Id: {actionId} in {durationMs}ms. Params: {p2}, {p1}", 
        id, duration, "param1", "param2");
}

Это приведет к трассировке в Application Insights с сообщением:

"Did the things for Id: 12345 in 300ms.  Params: param1, param2"

и нестандартные размеры, в том числе:

{ 
    "actionId": "12345",
    "durationMS": "300",
    "p2" : "param1",
    "p1" : "param2"
}

Обратите внимание, что:

  1. Шаблон сообщения не интерполированная строка.
  2. Имя свойства в customDimensions основывается на шаблоне сообщения не аргумент.
  3. Свойства шаблона связаны с аргументами в последовательности, а не по имени.
0 голосов
/ 07 сентября 2018

У меня был тот же вопрос несколько месяцев назад, и в итоге я создал собственного провайдера журналов, который управляет TelemetryClient для отправки журнала в AI.

Между тем, я думаю, что Microsoft создала пакет именно для этого:

Проверьте это здесь: https://github.com/Microsoft/ApplicationInsights-aspnetcore.

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