linux - Azure Linux WebApp 网络核心日志记录到磁盘工作示例
问题描述
有人可以提供一个工作示例,说明如何在运行简单控制台 webapi 项目的 linux azure webapp 上登录到磁盘。
我想将以下内容记录到磁盘。
控制台、调试、ILogger
我找不到任何显示 CreateHostBuilder、appsettings.json 和 azure Blade 设置中所需内容的示例。
我读过的所有东西似乎都适用于 Windows,不适用于 Linux。
我尝试了以下方法:
public static IHostBuilder CreateHostBuilder(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging => logging.AddAzureWebAppDiagnostics())
.ConfigureServices(serviceCollection => serviceCollection
.Configure<AzureFileLoggerOptions>(options =>
{
options.FileName = "azure-diagnostics-";
options.FileSizeLimit = 50 * 1024;
options.RetainedFileCountLimit = 5;
})
.Configure<AzureBlobLoggerOptions>(options =>
{
options.BlobName = "log.txt";
}))
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
appsettings.json 是否需要 FilePath?路径格式是什么?
{
"Logging": {
"FilePath": "LogFiles",
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
site/diagnostics/settings.json 这会覆盖 appsettings.json 吗?反之亦然?什么是什么?
"AzureDriveEnabled":false,
"AzureDriveTraceLevel":"Verbose",
"AzureTableEnabled":false,
"AzureTableTraceLevel":"Error",
"AzureBlobEnabled":true,
"AzureBlobTraceLevel":"Verbose"
}
然而,当我检查我的 FTP 日志位置时,我只看到以下关于 docker 部署和其他无用的内容。
我很高兴使用 serilog 或任何有效的东西。我目前什至无法通过 azure app 刀片上的日志流查看日志。
解决方案
我们将 nlog 用于在 linux 容器上运行的应用程序。希望这对您有所帮助。
<?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="/fluentd/etc/log/internal/internal-nlog.log">
<variable name="logFolderName" value="log" />
<variable name="logBaseDirectory" value="/fluentd/etc/" />
<variable name="logDirectory" value="${logBaseDirectory}${logFolderName}"/>
<variable name="appname" value="Docker utility"/>
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- for dev debug purposes -->
<target xsi:type="ColoredConsole" name="console" />
<!-- write to file -->
<target xsi:type="File" name="allData" fileName="${logDirectory}/all/${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
<!-- another file log. Uses some ASP.NET core renderers -->
<target xsi:type="File" name="ownData" fileName="${logDirectory}/info/${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allData" />
<logger name="*" minlevel="Trace" writeTo="console" />
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Info" final="true" />
<!-- BlackHole without writeTo -->
<logger name="*" minlevel="Trace" writeTo="ownData" />
</rules>
</nlog>
然后在Program.cs中配置nlog
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NLog.Web;
using System;
var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
logger.Debug("init main");
Host.CreateDefaultBuilder()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentConnections = 100;
})
.UseStartup<Startup>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
})
.UseNLog()
.Build()
.Run();
}
catch (Exception exception)
{
//NLog: catch setup errors
logger.Error(exception, "Stopped program because of exception");
throw;
}
finally
{
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
NLog.LogManager.Shutdown();
}
结果会是这样
2021-07-08 14:09:52.6206||DEBUG| test.Api.Program|init main
推荐阅读
- jquery - 子 ajax 函数稍后执行
- r - 使特定列成为 r 中的标题(重塑/转置)
- javascript - 插入数据库的 Ajax 调用不起作用
- python-3.x - 从字节串伪造 scapy 数据包
- ios - 具有 2 个数据集的多折线图
- java - ArrayList 构造函数错误
- django - 如何记录 Django REST Framework 文档的响应模式?
- php - 使用 !empty 检查变量是否为空的区别
- javascript - 地图中两点之间的距离
- influxdb - InfluxDB:从零开始cumulative_sum()/对cumulative_sum和non_negative_difference所需的聚合分组