gpt4 book ai didi

c# - Asp .net core webapi 记录到 Dev 中的文件,一旦部署在 azure 中就写入应用程序洞察

转载 作者:行者123 更新时间:2023-12-02 08:14:33 25 4
gpt4 key购买 nike

我正在使用 .net7 和 asp.net core 创建一个新的 WebApi 我之前使用过 NLog 并且知道如何设置日志记录,但由于我正在部署到 azure 并将使用 Application Insights 在那里进行日志记录,但我不知道不想在 DEV 中使用它。

它如何配置我的应用程序,以便在部署后记录到 dev 和 APPI 中的文件?

最佳答案

检查以下步骤,以便在开发环境中访问应用程序时将跟踪记录到文本文件,并在部署到 Azure 应用服务时将跟踪记录到 Application Insights。

感谢 @Jignesh Trivedi 提供的 nlog.config 文件。

配置将日志发送到文本文件。

  • 安装 NuGet 包 NLog.Web.AspNetCore
  • 创建一个新的配置文件并将其命名为 nlog.config。在该文件中添加以下设置。
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="info"
internalLogFile="C:\Users\YourPath\NLogs\internallog.txt">
<extensions>
<add assembly="NLog.Web.AspNetCore" />
</extensions>
<targets>
<target name="logfile" xsi:type="File"
fileName="C:\Users\YourPath\NLogs\internallog.txt"
layout="${longdate} ${level:uppercase=true} ${message}"/>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="logfile" />
<logger name="*" minlevel="Trace" writeTo="alldata" />
<logger name="Microsoft.*" maxLevel="Info" final="true" />
<loggername name="*" minlevel="Trace" writeTo="otherFile-web" />
</rules>
</nlog>
  • Program.cs 文件中,添加以下代码行。
using NLog.Web;

var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();

builder.Logging.ClearProviders();
builder.Host.UseNLog();

WeatherForecastController.cs中,添加日志

[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
_logger.LogInformation("Log Information from Weatherforecast.");
_logger.LogDebug("Debug Message from the Controller Action.");
_logger.LogWarning("Iam Log Warning.");
_logger.LogError("Hello, this is Log Error.");

return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}

当我在本地运行应用程序并执行 GET 方法时,会在我在 nlog.config 中提到的路径中创建一个新的文本文件 - internalLogFiletarget 路径。

本地输出: enter image description here

配置 Application Insights 日志记录

  • 在 Azure 门户中创建 Application Insights,复制连接字符串并将其粘贴到 appsetting.json 文件中。
{
"Logging": {
"ApplicationInsights": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Error"
}
},
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ApplicationInsights": {
"ConnectionString": "Connection String from Application Insights"
}
}

右键单击解决方案资源管理器 => 添加 Application Insights 遥测 => Azure Application Insights

  • Program.cs 文件中添加以下代码。
builder.Services.AddApplicationInsightsTelemetry(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]);

我的 Program.cs 文件

using NLog;
using NLog.Web;

using Microsoft.Extensions.Logging;
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;

var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var isDevelopment = environment == Environments.Development;
var logger =(dynamic) null;

#region DevLog
if (isDevelopment)
{
logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
#endregion
}

try
{
var builder = WebApplication.CreateBuilder(args);


#region ApplicationInsights
if (!isDevelopment)
{
builder.Services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel());
builder.Services.AddApplicationInsightsTelemetry();
}
else
{
builder.Logging.ClearProviders();
builder.Host.UseNLog();
}
#endregion

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
}
catch (Exception ex)
{
logger.Error(ex, "Error in init");
throw;
}
finally
{
NLog.LogManager.Shutdown();
}

.csproj 文件

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<ApplicationInsightsResourceId>/subscriptions/****/resourceGroups/****/providers/microsoft.insights/components/11-40vscode</ApplicationInsightsResourceId>
<UserSecretsId>****</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" />
<PackageReference Include="Microsoft.ApplicationInsights.Profiler.AspNetCore" Version="2.4.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.1.5" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>
</Project>

将应用部署到 Azure 并启用 Application Insights

enter image description here

  • 运行应用程序并在 Application Insights 中检查交易搜索日志

enter image description here

enter image description here

引用资料取自MSDoc

关于c# - Asp .net core webapi 记录到 Dev 中的文件,一旦部署在 azure 中就写入应用程序洞察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74391499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com