如何配置ILogger将日志输出到特定文件?

时间:2018-08-16 22:52:32

标签: logging asp.net-core asp.net-core-2.0

我有一个要部署到生产环境中的ASP.NET Core 2 Web应用程序,并且需要启用日志来解决错误。我在文档中找不到关于appsettings.json的logger部分中的架构的任何地方。这是我在那里的东西:

"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },"Console": {
      "IncludeScopes": "true"
    }
  }

当我从控制台运行exe时,日志信息会显示在控制台中,但是实体框架也在记录日志,因此由于显示的输出数量有限,所以我看不到自己的消息。因此,我需要将日志输出到一个文件,例如C:\ temp \ my.log。如何配置ASP.NET Core 2来做到这一点?

先谢谢了。

3 个答案:

答案 0 :(得分:1)

  

因此,我需要将日志输出到一个文件,例如C:\ temp \ my.log。如何配置ASP.NET Core 2来做到这一点?

Serilog有a package for that

dotnet add package Serilog.Extensions.Logging.File

我们这样配置它。

public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging();
}

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) 
{
    loggerFactory.AddFile("C:\\temp\\my.log");
}

另请参阅:https://nblumhardt.com/2016/10/aspnet-core-file-logger/

答案 1 :(得分:1)

This issue似乎与您的要求相同。

您还可以尝试使用NLog将日志输出到文件中,也可以确定其配置文件中日志的布局。

installing之后,在startup.cs中,设置日志文件夹:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        GlobalDiagnosticsContext.Set("configDir", "C:\\git\\damienbod\\AspNetCoreNlog\\Logs");
        GlobalDiagnosticsContext.Set("connectionString", Configuration.GetConnectionString("NLogDb"));

        loggerFactory.AddNLog();

        app.UseMvc();
    }

然后在nlog.config中,设置文件名:

 <target xsi:type="File" name="allfile" fileName="${gdc:item=configDir}\nlog-all.log"/>

以下是您可以参考的示例: https://github.com/damienbod/AspNetCoreNlog

答案 2 :(得分:1)

使用中间件的另一种方式

https://gist.github.com/elanderson/c50b2107de8ee2ed856353dfed9168a2

(请阅读注释,因为在代码中遇到一些麻烦,有关身体寻找位置的注释)

并设置web.config参数stdout,如stdoutLogEnabled =“ true” stdoutLogFile =“。\ logs \ stdout”

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\ReportViewer.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>

您应该在项目目录中创建两个文件夹logslogs\stdout