我如何在linux上的特定文件中记录来自asp.net核心应用程序的消息?

时间:2018-05-23 08:19:49

标签: linux asp.net-core .net-core

我将asp.net核心应用程序安装为linux守护进程。默认情况下,dotnet将日志写入/var/log/message。但我希望应用程序将其日志写入特定文件并永久存储它。我怎么能这样做?应用程序使用 Microsoft.Extensions.Logging

1 个答案:

答案 0 :(得分:3)

日志会转到您告诉他们去的地方,而不是特定的位置。 /var/log/message仅是Debug Provider使用的位置。

您需要指定要在项目的日志记录配置中使用哪些日志记录提供程序,如Logging in .NET Core文章中所示。

没有built-in文件提供商,而且ongoing discussion是否应该有一个listed in .NET Core's documentation。记录文件并不像最初听起来那么简单 - 如何格式化消息?滚动文件怎么样?文件名?也许您希望将错误和详细消息写入不同的文件?或者在您的应用程序中为每个子系统/区域/记录器/业务使用不同的文件,例如,一个日志用于销售服务,另一个用于记录外部服务呼叫?

有一个很好的开源日志库的很多,比如Serilog和NLog,可以解决这些问题。一些最受欢迎的是Serilog file target。可以将.NET Core的日志记录配置为轻松使用这些库。

例如,您可以使用相应的package添加Extensions.Logging

要使用它,您需要添加对包的引用,例如在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中搜索Serilog.Sinks.Fluentd找到许多日志记录提供程序。

您还可以在应用程序中集成Serilog等其他库,并使用其记录器。例如,您可以使用https://bugs.launchpad.net/ubuntu/+source/unity/+bug/1584885包来定位Fluentd