powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / свой LoggerProvider в ASP.Net Core приложении
28 сообщений из 28, показаны все 2 страниц
свой LoggerProvider в ASP.Net Core приложении
    #39904199
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги!

Хочу дополнить логгирование в проекте возможностью отсылки некоторых сообщений в канал Slack.
Сервис отсылки в Slack работает. Я могу отослать сообщение в Slack.

Создаю класс логгера и проавайдера вот так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
    /// <summary>
    /// Slack Logger
    /// </summary>
    public class SlackLogger : ILogger
    {
        readonly ISlackService _slackService;

        public SlackLogger([FromServices] ISlackService slackService)
        {
            _slackService = slackService;
        }


        public async void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
        {
            if (IsEnabled(logLevel))
            {
                var msg = formatter(state, exception);

                 await _slackService.SendMessageAsync(msg);
            }
        }

        public IDisposable BeginScope<TState>(TState state)
        {
            return null;
        }

        public bool IsEnabled(LogLevel logLevel)
        {
            switch (logLevel)
            {
                case LogLevel.Trace:
                    break;
                case LogLevel.Debug:
                    break;
                case LogLevel.Information:
                    break;
                case LogLevel.Warning:
                    break;
                case LogLevel.Error:
                    break;
                case LogLevel.Critical:
                    break;
                case LogLevel.None:
                    break;
                default:
                    break;
            }
            return true;
        }


    }




    /// <summary>
    /// Logger Provider
    /// </summary>
    public class LoggerSlackProvider : ILoggerProvider
    {
        readonly ISlackService _slackService;

        public LoggerSlackProvider(ISlackService slackService)
        {
            _slackService = slackService;
        }

        public ILogger CreateLogger(string categoryName)
        {
            return new SlackLogger(_slackService);
        }

        public void Dispose()
        {
            //throw new NotImplementedException();
        }
    }



В Startup добавляю провайдер так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    public class Startup
    {
      .....

        public void Configure(IApplicationBuilder app, ILogger<Startup> logger,
            IServiceProvider serviceProvider, ILoggerFactory loggerFactory, ISlackService slackService)
        {
              ......................

            // add Slack Logger
            loggerFactory.AddProvider(new LoggerSlackProvider(slackService));
        }

     }



После этого ВСЕ логи начинают валиться в Slack,
а я хочу, чтобы ТОЛЬКО ТЕ, что мне НУЖНЫ были там, а все остальное осталось без изменений.


Что я сделал неправильно?
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904230
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интерсный подход в функции IsEnabled
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904236
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Интерсный подход в функции IsEnabled
Вероятно, автор думает, что break прерывает метод, а не switch, и возвращает default(bool)
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904240
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
Ролг Хупин
Интерсный подход в функции IsEnabled
Вероятно, автор думает, что break прерывает метод, а не switch, и возвращает default(bool)


автор ничего не думает.
это пока заглушка.
не обращайте на IsEnabled внимание.
там всегда будет true и этого пока достаточно
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904269
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем пока картина такая:
- по умолчанию логи обрабатывает последний зарегистрированный в LoggerFactory провайдер (и это мой провайдер)
- а мне бы хотелось, чтобы ничего не ломая, что было написано ранее,
просто добавить еще одну возможность логгирования.

так возможно?
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904270
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser
ТОЛЬКО ТЕ, что мне НУЖНЫ были
RegisteredUser
это пока заглушка.
там всегда будет true
RegisteredUser
Что я сделал неправильно?
Не понимаю тогда, а что ты сделал для того, чтобы фильтровать?

Вообще, фильтрация по LogLevel делается на уровне настройки провайдера, а не внутри логгера.
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904273
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser
по умолчанию логи обрабатывает последний зарегистрированный в LoggerFactory провайдер
?

https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904505
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904519
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
RegisteredUser
ТОЛЬКО ТЕ, что мне НУЖНЫ были
RegisteredUser
это пока заглушка.
там всегда будет true
RegisteredUser
Что я сделал неправильно?
Не понимаю тогда, а что ты сделал для того, чтобы фильтровать?

Вообще, фильтрация по LogLevel делается на уровне настройки провайдера, а не внутри логгера.


Предлагаю считать, что IsEnabled имеет вот такое наполнение
Код: c#
1.
2.
3.
4.
        public bool IsEnabled(LogLevel logLevel)
        {
              return true;
        }
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904532
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вопрос-то тогда какой?
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904545
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
А вопрос-то тогда какой?


Вопрос такой:
- сейчас в проекте работает логгирование и я хочу оставить его так, как оно сейчас работает
- я хочу добавить в проект свое логгирование в Slack
- эти логгирования должны работать одновременно.
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904555
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я дал ссылку на документацию по логированию в Core
Что сделано в соответствии с этой документацией, что работает не так, как ожидалось?
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904591
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего автор имеет ввиду оставить дефолтный коровский логгер, а в контроллере дополнительно логировать определенные события в дополнительный логгер. Например info-сообщения логируем в один текстовый файл, errors- в другой. Но при этом, по дефолту настроенный ASP Core логгер также пишет сообщения в консоль.
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904604
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Скорее всего автор имеет ввиду оставить дефолтный коровский логгер, а в контроллере дополнительно логировать определенные события в дополнительный логгер. Например info-сообщения логируем в один текстовый файл, errors- в другой. Но при этом, по дефолту настроенный ASP Core логгер также пишет сообщения в консоль.
тогда AddProvider нафиг не нужен, только и всего.

Но пока автор не расшифровал, что он понимает под
RegisteredUser
ТЕ, что мне НУЖНЫ
можно долго гадать.
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904755
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub
Скорее всего автор имеет ввиду оставить дефолтный коровский логгер, а в контроллере дополнительно логировать определенные события в дополнительный логгер.

именно так!

А мой логгер должен писать в Slack. Всё!
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904758
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда зачем тебе вообще нужна реализация ILogger? Для универсальности только.
Просто добавляешь свой сервис логирования и пробрасываешь в нужные контроллеры параллельно с штатным логгером


P.S. vb_sub, тебе орден хрустального шара!
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904822
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Скорее всего автор имеет ввиду оставить дефолтный коровский логгер, а в контроллере дополнительно логировать определенные события в дополнительный логгер. Например info-сообщения логируем в один текстовый файл, errors- в другой. Но при этом, по дефолту настроенный ASP Core логгер также пишет сообщения в консоль.

Это абсолютно неправильный подход. Сама суть использования всевозможных провайдеров в том, что ты всегда и все пишешь в один и тот же единственный ILogger, а на уровне конфигурации разруливаешь что конкретно куда писать.
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904832
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Это абсолютно неправильный подход. Сама суть использования всевозможных провайдеров в том, что ты всегда и все пишешь в один и тот же единственный ILogger, а на уровне конфигурации разруливаешь что конкретно куда писать.
В принципе, можно фильтрацию использовать.... но ссылку я уже давал
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39904845
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Ну тогда зачем тебе вообще нужна реализация ILogger? Для универсальности только.
Просто добавляешь свой сервис логирования и пробрасываешь в нужные контроллеры параллельно с штатным логгером


P.S. vb_sub, тебе орден хрустального шара!


Пробрасывать два логгера в контроллер как-то зашкварно, отловить бы в какой логгер кидать сообщения на более высоком уровне.
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39905103
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser
Что я сделал неправильно?


Неправильно поставили задачу.

Ваша задача сводится к фильтрации.
Вместо этого вы _заменили_ дефолтный логгер.
Непонятно зачем вы это сделали.

Вам нужно добавить провайдер слака, вот этот например https://github.com/imperugo/Microsoft.Extensions.Logging.Slack

и настроить фильтрацию, как описано здесь https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1#log-filtering

можете в слак писать только сообщения определённой категории
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39905104
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Shocker.Pro
Ну тогда зачем тебе вообще нужна реализация ILogger? Для универсальности только.
Просто добавляешь свой сервис логирования и пробрасываешь в нужные контроллеры параллельно с штатным логгером


P.S. vb_sub, тебе орден хрустального шара!


Пробрасывать два логгера в контроллер как-то зашкварно, отловить бы в какой логгер кидать сообщения на более высоком уровне.


хернёй страдаете.
из коробки есть гибкая фильтрация по уровню журнала, по категории
пишите чё хотите, куда хотите, всё через один единственный логгер
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39906475
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем я сделал так (ILogger Extension):

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
    
using MyGlobal.Extensions
{
public static class CommonExtensions
{
        public async static void LogSlack(this ILogger logger, string message, ISlackService slackService, LogLevel logLevel = LogLevel.Information)
        {

            if (slackService != null)
            {
                var msg = $"{DateTime.Now} ( {Enum.GetName(typeof(LogLevel), logLevel)} ): {message}";

                try
                {
                    var result = await slackService.SendMessageAsync(msg);
                }
                catch (Exception ex)
                {
                    ...
                }
            }

        }

}
}



единственное, что мне тут не нравится, так это необходимость передачи параметром ISlackService slackService.
т.к. DI в static метод, судя по ответам гугла, это какой-то гимор/антипаттерн/фу-фу-фу .
ладно, буду пока его передавать, а дальше посмотрим.


использую в контроллере так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
using MyGlobal.Extensions;

        readonly ILogger<DevController> _logger;

        public DevController(ILogger<DevController> logger)
        {
            _logger = logger;
        }
        [HttpPost]
        public async Task<PipeResponse> GetImages(string token, string alias, [FromServices] ISlackService slackService)
        {
            _logger.LogSlack("Test msg", slackService);
            _logger.LogSlack("Test msg Critical", slackService, LogLevel.Critical);
            _logger.LogSlack("Test msg Error", slackService, LogLevel.Error);
            _logger.LogSlack("Test msg Warning", slackService, LogLevel.Warning);
           ...
           _logger.LogWarning($"warning");
            return resp;
        }
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39906584
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser,

чёт это какой-то полный пи...ц

написал же как сделать по уму.
что за чудовище вы изобрели? зачем? ))
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39906831
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тебе hVostt написал как сделать
я по привычки когда скинул ссылки забыл что логер от мс тоже стал приличным
у тебя точка входа для логов не должна знать куда и что идет. это разруливается на уровне конфигурирования логера
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39906952
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt
RegisteredUser
Что я сделал неправильно?


...

и настроить фильтрацию, как описано здесь https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1#log-filtering

можете в слак писать только сообщения определённой категории


- я хочу в слак писать сообщения ЛЮБОЙ категории, как захочу. так можно?
- я хочу чтобы в слак летели НЕ все сообщения определенной категории из всего приложения,
а только из тех мест кода, откуда я бы хотел получать информацию в слак. так можно?
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39907327
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser
- я хочу в слак писать сообщения ЛЮБОЙ категории, как захочу. так можно?
- я хочу чтобы в слак летели НЕ все сообщения определенной категории из всего приложения,
а только из тех мест кода, откуда я бы хотел получать информацию в слак. так можно?


вы резко изменили свои требования, изначально они звучали так

RegisteredUser
Хочу дополнить логгирование в проекте возможностью отсылки некоторых сообщений в канал Slack.
Сервис отсылки в Slack работает. Я могу отослать сообщение в Slack.


теперь вам уже не нужно _дополнить_, а вы хотите независимо от настроек журналирования слать чего-то там в слак.

ну шлите ради бога отдельно, сделайте отдельный слак-сервис и шлите, че вы мозги нам тут колупаете?
...
Рейтинг: 0 / 0
свой LoggerProvider в ASP.Net Core приложении
    #39907332
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser,

если вас не устраивают возможности фильтрации коробочного решения, вы можете подключить другой логгер, с расширенными возможностями.
например, Serilog, который отлично интегрируется с ILogger от Microsoft,
в котором вы можете добавить фильтрацию какой угодно сложности:

https://github.com/serilog/serilog/wiki/Configuration-Basics#filters

для Serilog-а имеются и совсем продвинутые фильтры, на основе DSL

но, боюсь, с вашими постановками, это только всё ещё больше усложнит ))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
свой LoggerProvider в ASP.Net Core приложении
    #40032062
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser,
у меня получилось сделать решение на троечку, но рабочее. В дальнейшем подумаю, как его допилить покрасивее, может комьюнити подскажет.
Опишу ситуацию, с которой столкнулся, по описанию она совпадет с твоей по моему мнению
В приложении нужно иметь логера-любимчика, который будет использоваться в конкретных случаях, которые будут явно указываться автором приложения.
У меня создается отдельный текстовый файл логов(slacklog.txt), куда я пишу эти конкретные вызовы логгера.
Есть текстовый файл для общего лога (log2.txt).
Есть текстовый файл логов, где я хочу видеть логи, которые произошли только в контроллерах(log.txt).
1)Создаем текстовые логгеры
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
 //логгер для Slack-случаев
 public class SlackTextLogger : ILogger
    {
        public IDisposable BeginScope<TState>(TState state)
        {
            return null;
        }

        public bool IsEnabled(LogLevel logLevel)
        {
            return logLevel != LogLevel.None;
        }

        public async void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
        {
            if (!IsEnabled(logLevel))
            {
                return;
            }

            var logRecord = string.Format("{0} [{1}] {2} {3}", 
"[" + DateTimeOffset.UtcNow.ToString("yyyy-MM-dd HH:mm:ss+00:00") + "]", logLevel.ToString(), formatter(state, exception), exception != null ? exception.StackTrace : "");
            using (var streamWriter = new StreamWriter("slacklog.txt", true))
            {
             await   streamWriter.WriteLineAsync(logRecord);
            }
        }
    }

//Логгер для общих логов
 public class TextLogger2 : ILogger
    {
        public IDisposable BeginScope<TState>(TState state)
        {
            return null;
        }

        public bool IsEnabled(LogLevel logLevel)
        {
            return logLevel != LogLevel.None;
        }

        public async void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
        {
            if (!IsEnabled(logLevel))
            {
                return;
            }

            var logRecord = string.Format("{0} [{1}] {2} {3}", 
"[" + DateTimeOffset.UtcNow.ToString("yyyy-MM-dd HH:mm:ss+00:00") + "]", logLevel.ToString(), formatter(state, exception), exception != null ? exception.StackTrace : "");

            using (var streamWriter = new StreamWriter("log2.txt", true))
            {
             await   streamWriter.WriteLineAsync(logRecord);
            }
        }
    }

//Логирование информации, произошедшей в контроллерах
public class TextLogger : ILogger
    {
        public IDisposable BeginScope<TState>(TState state)
        {
            return null;
        }

        public bool IsEnabled(LogLevel logLevel)
        {
            return logLevel != LogLevel.None;
        }

        public async void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
        {
            if (!IsEnabled(logLevel))
            {
                return;
            }

            var logRecord = string.Format("{0} [{1}] {2} {3}",
 "[" + DateTimeOffset.UtcNow.ToString("yyyy-MM-dd HH:mm:ss+00:00") + "]", logLevel.ToString(), formatter(state, exception), exception != null ? exception.StackTrace : "");

            using (var streamWriter = new StreamWriter("log.txt", true))
            {
             await   streamWriter.WriteLineAsync(logRecord);
            }
        }
    }


Делаем логгер-провайдер, который будет выбирать, какой из них использовать в зависимости от значения категории
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 public class TextLoggerProvider : ILoggerProvider
    {
        public TextLoggerProvider()
        {
           
        }
        public ILogger CreateLogger(string categoryName)
        {
            if (categoryName.ToUpper().Contains("CONTROLLERS"))
            {
                return new TextLogger();
            }

            if (categoryName.ToUpper().Contains("SLACK"))
            {
                return new SlackTextLogger();
            }

            return new TextLogger2();//здесь бы использовать дефолтный логгер для приложения, 
//но как я понял такового понятия для приложения не существует, или же вообще ничего не возвращать, но так не прокатывает
         
        }

        public void Dispose(){}
    }



Регистрируем логгеры в сервисах(ConfigureServices)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 services.AddLogging(logging=> 
            {
                logging
                .ClearProviders()
                .AddConsole() //добавляем дефолтный логгер
                .AddProvider(new TextLoggerProvider())
                .AddFilter((provider, category, logLevel) =>
                {
                    //запрещаем дефолтному логгеру(консольному) принимать сообщения 
                    if (provider == "Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider"
                    && (category.ToUpper().Contains("CONTROLLER") || category.ToUpper().Contains("SLACK")))
                        return false;

                    if (category.ToUpper().Contains("CONTROLLER") || category.ToUpper().Contains("SLACK"))
                        return true;
                    return false;
                });             
            });


Не знаю почему, но когда вызываем Logger.LogInformation("..."), то и ConsoleLogger их публикует и TextLoggerProvider, поэтому приходится ставить жесткую заглушку- хотелось бы переделать этот момент, если кто в курсе как подскажите плиз.
Создаем пустой класс-заглушку для категории, потому что просто строку использовать нельзя
Код: c#
1.
  public class SlackCategory{ }


В контроллере, где хотим использовать логгеры инжектим их.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        private readonly ILogger<CommitController> _logger;
        private readonly ILogger<SlackCategory> _slackLogger;

        public CommitController(
            ILogger<CommitController> logger,
            ILogger<SlackCategory> slackLogger)
        {
            _logger = logger;
            _slackLogger = slackLogger;
        }



В том месте, где хотим кинуть лог в конкретный файл вызываем их
Код: c#
1.
2.
 _slackLogger.LogInformation("im from SlackLogger"); //лог запишется в slacklog.txt
 _logger.LogInformation("default controller Logger"); //лог запишется в log.txt
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / свой LoggerProvider в ASP.Net Core приложении
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]