Как отображать только пользовательские логи в Asp.Net Core - PullRequest
0 голосов
/ 28 мая 2019

Я создал свой собственный провайдер логеров FileLogerProviderr для сохранения логов в файл.

Я добавил собственный FileLoggerProvider в program.cs:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureLogging((hostingContext, logging) => 
                {

                    logging.AddProvider(new FileLoggerProvider(Path.Combine(Directory.GetCurrentDirectory(), "logger.txt")));
                    logging.SetMinimumLevel(LogLevel.None);

                })
                .UseStartup<Startup>();

Для тестирования я добавил лог в контроллер:

public class HomeController : Controller
    {
        private ILogger<HomeController> logger;

        public HomeController(ILogger<HomeController> log)
        {
            logger = log;
        }
        public IActionResult Index()
        {
            logger.LogDebug($"test index path!!!");
            return View();
        }
}

Работает, но в файле кроме путь индекса теста Я вижу много дополнительной информации.Мне не нужна эта информация.Мне нужно только сохранить в файл мой журнал с контроллера.

Request starting HTTP/1.1 GET http://localhost:44339/  
Route matched with {action = "Index", controller = "Home", page = "", area = ""}. Executing action LoggingTest.Controllers.HomeController.Index (LoggingTest)
Executing action method LoggingTest.Controllers.HomeController.Index (LoggingTest) - Validation state: Valid
test index path!!!
Executed action method LoggingTest.Controllers.HomeController.Index (LoggingTest), returned result Microsoft.AspNetCore.Mvc.ViewResult in 11.8159ms.
Executing ViewResult, running view Index.
Executed ViewResult - view Index executed in 43.4928ms.
Executed action LoggingTest.Controllers.HomeController.Index (LoggingTest) in 224.1184ms
Request finished in 400.2906ms 200 text/html; charset=utf-8
Request starting HTTP/1.1 GET http://localhost:44339/favicon.ico  
Sending file. Request path: '/favicon.ico'. Physical path: 'C:\Users\dborovsky\projects\LoggingTest\LoggingTest\wwwroot\favicon.ico'
Request finished in 39.8394ms 200 image/x-icon

Как я могу решить это?Спасибо

ОБНОВЛЕНИЕ appsettings.json

{
  "ConnectionStrings": {
    "DefaultConnection": "CONSTRING"
  },
  "Logging": {
    "LogLevel": {
      "Default": "None",
      "System": "None",
      "Microsoft": "None"
    }
  },
  "AllowedHosts": "*"
}

1 Ответ

1 голос
/ 28 мая 2019

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

Я рекомендую вам добавить регистратор в ConfigureServices (.ConfigureLogging из Program.cs, по крайней мере, вы хотите регистрировать события веб-хостинга):

public void ConfigureServices(IServiceCollection services)
        {

            services.AddLogging(loggers=> 
            {
                loggers.AddConsole();
                loggers.AddDebug();
                loggers.AddProvider(new FileLoggerProvider(Path.Combine(Directory.GetCurrentDirectory(), "logger.txt")));
            });


            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

Затем вы можете настроить следующим образом (убедитесь, что у вас правильно сконфигурирован вариант среды):

{
  "ConnectionStrings": {
    "DefaultConnection": "CONSTRING"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "None",
      "Microsoft": "None"
    }
  },
  "AllowedHosts": "*"
}

И реализация:

public class HomeController : Controller
    {
        private ILogger<HomeController> logger;

        public HomeController(ILogger<HomeController> log)
        {
            logger = log;
        }
        public IActionResult Index()
        {
            logger.LogDebug($"test index path!!!");
            return View();
        }
}

Вот такая замечательная статья Microsoft о регистрации:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...