linux - 我如何在 Linux 上的特定文件中记录来自 asp.net 核心应用程序的消息?
问题描述
我将 asp.net 核心应用程序安装为 linux 守护进程。默认情况下,dotnet 将日志写入/var/log/message
. 但我希望应用程序将其日志写入特定文件并永久存储。我该怎么做?应用程序使用Microsoft.Extensions.Logging。
解决方案
日志去你告诉他们去的地方,而不是一个特定的位置。/var/log/message
是仅由调试提供程序使用的位置。
您需要指定要在项目的日志记录配置中使用的日志记录提供程序,如.NET Core 中的日志记录一文中所示。
没有内置的文件提供程序,并且正在讨论是否应该有一个。记录到文件并不像一开始听起来那么简单——应该如何格式化消息?滚动文件呢?文件名?也许您希望将错误和详细消息写入不同的文件?或者在您的应用程序中为每个子系统/区域/记录器/业务使用不同的文件,例如一个用于销售服务的日志,另一个用于记录外部服务调用?
有很多很好的开源日志库,比如 Serilog 和 NLog 可以解决这些问题。.NET Core 的文档中列出了一些最流行的。.NET Core 的日志记录可以配置为轻松使用这些库。
例如,您可以使用适当的package添加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
推荐阅读
- twitter-bootstrap - Firefox 表问题,使用 react 和 bootstrap
- svelte - 延迟加载图像(svelte/sapper)
- c# - 将 Json actionresult 和 HttpStatusCodeResult 作为可能的结果,但只有一个返回
- swift - 使用日期信息对自定义结构进行排序
- android - 数据绑定重定向到 xml 在 android studio 3.1.2 中不起作用
- python - OpenCV video not getting saved
- scala - 如何在另一个内部命令(不是外部命令)的 sbt 中获取返回码?
- variables - “...不是内部或外部命令、可运行程序或批处理文件。”
- c++ - OpenCV predict() 与 detectMultiScale()
- android - 拍照后如何不预览照片?