我将ASP.NET Core应用程序安装为Linux守护进程。默认情况下,.NET将日志写入
我该如何做?该应用程序使用
/var/log/message
,但我希望该应用程序将其日志写入特定文件并永久存储。我该如何做?该应用程序使用
Microsoft.Extensions.Logging
。/var/log/message
,但我希望该应用程序将其日志写入特定文件并永久存储。Microsoft.Extensions.Logging
。/var/log/message
位置。没有内置的文件提供程序,关于是否应该有一个正在进行讨论。将日志记录到文件并不像听起来那么简单-消息应该如何格式化?滚动文件怎么办?文件名呢?也许您希望错误和详细消息被写入不同的文件?或者在应用程序中使用每个子系统/区域/记录器/业务的不同文件,例如为销售服务记录一条日志,为外部服务调用记录另一条日志?
有很多好的开源日志记录库,如Serilog和NLog,可以解决这些问题。其中一些最受欢迎的列在.NET Core的文档中。.NET Core的日志记录可以配置为轻松使用这些库。
例如,您可以添加适当的软件包和Serilog文件目标。csproj
文件中添加对软件包的引用:<PackageReference Include="Serilog.Extensions.Logging.File" Version="2.0.0" />
然后使用 AddFile
调用将其添加到日志配置中:
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddFile("path/to/Logs/myapp-{Date}.txt");
})
.UseStartup<Startup>()
.Build();
{Date}
参数用于按日期创建滚动日志文件。
您可以结合多个记录器,例如您可以使用logging.AddConsole()
将日志写入控制台,或者在开发过程中继续将日志写入/var/log/message
使用logging.AddDebug();
如果在NuGet中搜索Extensions.Logging,可以找到许多日志提供程序。
您还可以集成其他库,如Serilog,并使用它们的记录器。例如,您可以使用Serilog.Sinks.Fluentd包来定位Fluentd。
/var/log/syslog
的文件,但是其中不存在.NET 6日志。有什么想法吗? - variableSyslog.Write(Syslog.Level.Warning, "MyAwesomeApp", "something went wrong");
这是要点 https://github.com/jitbit/SyslogCore
P.S. 这并不是直接回答问题,但当我搜索在 .NET 5 下记录 Linux 日志的方法时,这个页面一直弹出。所以我决定发表另一个答案。
/var/log/syslog
的文件,但是其中不存在 .net 6 日志。有什么想法吗? - variabledotnet -d app.dll
时打印出来,以便找出为什么我的应用程序在每秒 20 个请求时会挂起。你能对此进行澄清吗? - Khurshid Alam
/var/log/message
甚至不被文件日志提供程序使用,它只被debug日志提供程序使用。另一个提供程序可以将目标定位到聚合器以及其他目标。 - Panagiotis Kanavos