Как автоматически удалять логи в ASP.NET 5?

У меня есть веб-приложение, использующее ASP.NET 5. Я только знакомлюсь с новыми встроенными механизмами регистрации (Microsoft.Extensions.Logging).

До этого я использовал NLog в других приложениях, и в NLog есть механизм автоматического удаления файлов журнала по истечении определенного периода времени. Можно ли вообще воспроизвести это поведение в ASP.NET, встроенном в журналирование? Например, удалить файлы журнала старше 7 дней?

Я не смог найти документацию по этому вопросу в другом месте...

1 ответ

Решение

Мы все еще можем использовать NLog. Репозиторий журналирования ASP.NET сообщает:

Проекты сообщества адаптируют Microsoft.Extensions.Logging для использования с различными бэкэндами.

Это включает в себя NLog. Вот NLog-провайдер для библиотеки NLog, а ниже приведена упрощенная демонстрация. Вы можете настроить его для своих целей.

Структура каталогов

MyProject
  nlog.config
  project.json
  Startup.cs

Startup.cs

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.Extensions.Logging;
using NLog.Web;
using NLog.Extensions.Logging;

public class Startup
{
    public void Configure(
        IApplicationBuilder app, 
        IHostingEnvironment env, 
        ILoggerFactory loggerFactory)
    {
        //add NLog to aspnet5
        loggerFactory.AddNLog();

        //add NLog.Web (only needed if NLog.Web.ASPNET5 is needed)
        app.AddNLogWeb();

        //configure nlog.config in your project root
        env.ConfigureNLog("./MyProject/nlog.config");

        // we can also do this from a controller
        // if we inject ILoggerFactory
        var logger = loggerFactory.CreateLogger("NLog Demo"); 
        logger.LogInformation("Hello from NLog");
    }    
}

project.json

{
    "dependencies": {
        "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
        "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
        "NLog.Extensions.Logging": "1.0.0-rc1-final-2016-02-06",
        "NLog.Web.ASPNET5": "4.2.1"
    },
    "frameworks": {
        "dnx451": {}
    },
    "commands": {
        "web": "Microsoft.AspNet.Server.Kestrel"
    }
}

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"
      archiveEvery="Minute"
      archiveNumbering="Rolling"
      maxArchiveFiles="1">

  <extensions>
    <add assembly="NLog.Web.ASPNET5"/>
  </extensions>

  <targets>
    <target xsi:type="File" name="demo-file" 
         fileName="c:\temp\demo-file-${shortdate}.txt" 
         layout="${message}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="demo-file" />
  </rules>
</nlog>
Другие вопросы по тегам