2016-12-25 10 views
0

Сценарий: веб-приложение ASP.NET MVC 6.Serilog: не удалось получить файл катящегося файла

Вот пакет импортирован в project.json:

"Serilog": "2.3.0", 
"Serilog.Extensions.Logging": "1.3.1", 
"Serilog.Sinks.RollingFile": "3.2.0", 
"Serilog.Settings.Configuration": "2.2.0" 

Вот appsettings конфигурация

"Serilog": { 
    "Using": [ "Serilog.Sinks.RollingFile" ], 
    "MinimumLevel": { 
     "Default": "Verbose", 
     "Override": { 
      "Microsoft": "Warning", 
      "Microsoft.AspNetCore.Identity": "Debug", 
      "System": "Warning" 
     } 
    }, 
    "WriteTo": [ 
     { 
      "Name": "RollingFile", 
      "Args": { 
       "path": "logger-{Date}.log", 
       "outputTemplate": "{Timestamp:o} [{Level:u3}] ({Application}/{MachineName}/{ThreadId}) {Message}{NewLine}{Exception}", 
       "fileSizeLimitBytes": 16384 
      } 
     } 
    ], 
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ], 
    "Properties": { 
     "Application": "Sample" 
    } 
}, 

Вот Startup конструктор

var builder = new ConfigurationBuilder() 
        .SetBasePath(_environment.ContentRootPath) 
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
        .AddJsonFile($"appsettings.{_environment.EnvironmentName}.json", optional: true); 

Configuration = builder.Build(); 

var logger = new LoggerConfiguration() 
       .ReadFrom.Configuration(Configuration) 
       .CreateLogger(); 

В методе конфигурирования меня

loggerFactory.AddConsole(); 
loggerFactory.AddSerilog(); 

Где должен быть записан файл? Может быть проблема, связанная с разрешением на запись?

EDIT

предложения Круги @Sanket, но по-прежнему не работает. Я также переключился на пустельгу, чтобы посмотреть, работает ли она на консоли, но все равно не повезло. Вот что я вижу:

Now listening on: http://localhost:5000 
Application started. Press Ctrl+C to shut down. 
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1] 
     Request starting HTTP/1.1 GET http://localhost:5000/ 
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1] 
     Executing action method MyCompany.MyProject.Host.Controllers.HomeController.Index MyCompany.MyProject.Host) with arguments (
(null)) - ModelState is Valid 
info: Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor[1] 
     Executing ViewResult, running view at path /Views/Home/Index.cshtml. 
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2] 
     Executed action MyCompany.MyProject.Host.Controllers.HomeController.Index (MyCompany.MyProject.Host) in 2614.9118ms 

Это очень странно для меня, как и в главном контроллере в индексные акции я просто

public IActionResult Index() { 
    _logger.LogDebug("Index in HomeController called!"); 
    return View(); 
} 

ответ

3

В запуске, можно указать путь подвижного файла как this-

Log.Logger = new LoggerConfiguration() 
    .MinimumLevel.Debug() 
    .WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "Serilog-{Date}.txt")) 
    .CreateLogger(); 

UPDATE:

В appsettings.json, изменить путь аргумент pathFormat

"path": "logger-{Date}.log", 

в

"pathFormat": "logger-{Date}.log", 

и файл будет создан на месте проекта.

См этот link


UPDATE2:

В конструкторе Автозагрузка изменить serilog регистратор как this-

От

var logger = new LoggerConfiguration() 
       .ReadFrom.Configuration(Configuration) 
       .CreateLogger(); 

Для

Log.Logger = new LoggerConfiguration() 
       .ReadFrom.Configuration(Configuration) 
       .CreateLogger(); 
+0

Да. Я прочитал его. Я хочу использовать регистратор, основанный на конфигурации. У меня кажется, что все правильно, но не вижу файл журнала – Lorenzo

+0

@Lorenzo: Проверьте мой обновленный ответ.Измените 'path' на' pathformat'. – Sanket

+0

следил за вашими предложениями, но не повезло. Пожалуйста, взгляните на мое редактирование – Lorenzo