日志未写入 Azure Application Insights

问题描述 投票:0回答:1

我正在使用 3.4.0 版本的 Serilog.Settings.Configuration 和 Serilog.Sinks.ApplicationInsights 版本:4.0.0

下面是我的 appsettings.json.

  "Serilog": {
    "Using": [
      "Serilog.Sinks.ApplicationInsights"
    ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "restrictedToMinimumLevel": "Information"
        }
      },
      {
        "Name": "ApplicationInsights",
        "Args": {
          "restrictedToMinimumLevel": "Information",
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ]
  }

这是我的 Program.cs.

public class Program
    {
        public static void Main(string[] args)
        {
            ConfigureLogger();

            try
            {
                Log.Information("MyApp: Application Starting Up");
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "MyApp: The applicaion failed to start correctly.");
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args)
                .UseSerilog()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
        }

        private static void ConfigureLogger()
        {
            var configuration = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", false, true)
                .Build();

            var configureLogger = new Action<IConfiguration, bool>((configuration, update) =>
            {
                try
                {
                    Log.Logger = new LoggerConfiguration()
                        .ReadFrom.Configuration(configuration, "Serilog")
                        .CreateLogger();

                    if (update)
                    {
                        Log.Logger.Information("MyApp: Updated logger configuration.");
                    }
                }
                catch (Exception ex)
                {
                    Log.Logger.Error(ex, "MyApp: Failed to update logger configuration.");
                }
            });

            var updateLoggerTimer = new Timer((state) =>
            {
                configureLogger(configuration, true);
            }, null, Timeout.Infinite, Timeout.Infinite);

            ChangeToken.OnChange(() => configuration.GetReloadToken(), () =>
            {
                // Use timer to debounce onchange, it fires twice when configuration changes
                updateLoggerTimer.Change(TimeSpan.FromSeconds(1), Timeout.InfiniteTimeSpan);
            });

            configureLogger(configuration, false);
        }
    }

在 Startup.cs ConfigureServices 方法中添加以下行。

services.AddApplicationInsightsTelemetry();

我的应用程序具有以下配置。

没有日志:

azure-application-insights serilog serilog-aspnetcore
1个回答
0
投票

从你之前的帖子我知道你正在使用

ASP.NetCore 6.0
,所以这里不需要
Startup.cs
文件。 所有代码都可以在
Program.cs
文件中配置。

感谢@Roman Marusyk 的评论。

是的,您需要在

appsettings.json
文件中添加 Application Insights 连接字符串。

我的

appsettings.json
档案:

{ 
    "Logging": {
      "ApplicationInsights": {
        "LogLevel": {
          "Default": "Debug",
          "Microsoft": "Error"
        }
      },
      "LogLevel": {
        "Default": "Information",
        "Microsoft.AspNetCore": "Warning"
      }
    },

    "AllowedHosts": "*",
    "ApplicationInsights": {
      "ConnectionString": "InstrumentationKey=**********;IngestionEndpoint=https://westus2-2.in.applicationinsights.azure.com/;LiveEndpoint=https://****.livediagnostics.monitor.azure.com/"
    },

    "WriteTo": [
      {
        "Name": "ApplicationInsights",
        "Args": {
          "restrictedToMinimumLevel": "Information",
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights",
          "InstrumentationKey": "****"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
    "Properties": {
      "Application": "Application Insights using Serilog"
    }
  }

感谢@SimonCropp 我参考了 GitHub 链接。

我的

Program.cs
档案:

using Serilog;
using Serilog.Sinks.ApplicationInsights.TelemetryConverters;
using static System.Net.Mime.MediaTypeNames;
using System;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();

var ConnStr = builder.Configuration.GetSection("ApplicationInsights").GetValue<string>("ConnectionString");

var log = new LoggerConfiguration()
    .Enrich.FromLogContext()
 .WriteTo.ApplicationInsights(ConnStr, new TraceTelemetryConverter())
 .CreateLogger();


builder.Logging.AddSerilog(log);
var app = builder.Build();

app.Logger.LogInformation("Log from App");
try
{
    app.Logger.LogDebug("Debug Message");   
    app.Logger.LogWarning("Warning Message");
}
catch (Exception ex)
{
    Log.Fatal(ex, "MyApp: The applicaion failed to start correctly.");
}
finally
{
    Log.CloseAndFlush();
}
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.UseAuthorization();
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

痕迹:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.