NLog不记录(Asp.net核心.net 4.6.2)

时间:2017-05-03 05:14:06

标签: .net asp.net-core nlog

我正在使用带有NLog.Web.AspNetCore(4.3.1)nuget包的完整.net框架4.6.2的asp.net核心项目。以下是我的配置。

nlog.config

<?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="Warn"
  internalLogFile="c:\Logs\internal-nlog.txt">
  <!-- define various log targets -->
<targets>
  <!-- write logs to file -->
    <target xsi:type="File" name="allfile" fileName="c:\Logs\nlog-all-${shortdate}.log"
        layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception:format=stacktrace}"
        maxArchiveFiles="100"
        archiveFileName="c:\LogsBackup\nlog-all-${shortdate}.{##}.log"
        archiveNumbering="DateAndSequence"
        archiveAboveSize="10000000"
        archiveDateFormat="yyyyMMdd" />
    <target xsi:type="File" name="ownFile-web" fileName="c:\Logs\nlog-own-${shortdate}.log"
         layout="${longdate}|${logger}|${uppercase:${level}}|  ${message} ${exception:format=stacktrace}" />
    <target xsi:type="Null" name="blackhole" />
</targets>
<rules>
  <!--All logs, including from Microsoft-->
  <logger name="*" minlevel="Trace" writeTo="allfile" />
  <!--Skip Microsoft logs and so log only own logs-->
  <!--<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />-->
  <!--<logger name="*" minlevel="Trace" writeTo="ownFile-web" />-->
</rules>
</nlog>

Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        //add nlog
        //env.ConfigureNLog("nlog.config");
        //loggerFactory.ConfigureNLog("nlog.config");
        //loggerFactory.AddNLog();
        app.AddNLogWeb();

        //add identity server authentication
        //app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
        //{
        //    Authority = "http://localhost:5000",
        //    RequireHttpsMetadata = false,
        //    ApiName = "prismapi"
        //});

        app.UseMvcWithDefaultRoute();

        app.UseSwagger();
        app.UseSwaggerUI(options =>
        {
            options.SwaggerEndpoint("/swagger/v1.0/swagger.json", "Prism api version 1");
        });
  }

由于某种原因,它不会发出日志。 Nlog甚至没有创建其内部日志文件。有趣的是,如果我取消注释env.ConfigureNLog("nlog.config");,它开始创建至少其内部日志文件,但仍然没有成功使用实际的日志文件。

1 个答案:

答案 0 :(得分:1)

您可能需要在loggerFactory.AddNLog();方法app.AddNLogWeb();之前取消注释Configure

根据文档中的示例,

env.ConfigureNLog("nlog.config");应该在构造函数中。

另请参阅https://github.com/NLog/NLog.Extensions.Logging

中的How to use部分

我还想建议从示例中的相同代码行开始。如果这样可以根据您的需要改变它们。

希望这有帮助。