Замена Log4Net для Core
Что пользуете вместо? Уже пару штук попробовал никак не получается вывести имя потока, класса и функции.
С классом и функцией может еще и получится, но вот с потоком никак ничего не могу найти.
Пока подался NLog. Нужно только умолчания изменить
layout="${longdate} ${uppercase:${level}} [${threadname}] ${callsite:className=false:fileName=true:includeSourcePath=false} ${message} ${onexception:${newline}${exception:format=tostring}}"
Выводится
- Thread Name
- Function Name
- File Name
- File line number
2021-05-23 12:56:33.6074 TRACE [GuiMain] OnStartup(App.xaml.cs:47) ***Start application*** 2021-05-23 12:56:33.6669 DEBUG [GuiMain] OnStartup(App.xaml.cs:50) Test 2021-05-23 12:56:36.2837 TRACE [GuiMain] OnExit(App.xaml.cs:58) ***End application***
Что пользуете вместо? Уже пару штук попробовал никак не получается вывести имя потока, класса и функции. С классом и функцией может еще и получится, но вот с потоком никак ничего не могу найти.
Раньше в БД Microsoft Access логи запихивал, т.е. OleDB, так можно искать по SQL запросу. Потом по умолчанию что с .NET шло то и использовал, т.е. EventLog/запись в журнал см. EventLog. Одна немецкая IT компания помойму в своих продуктах использует FireBird для логов, но это примерно. А сейчас я бы использовал бы для логов SQLite.
Кто не понял. Речь не идёт о том куда записывать или в каком формате записывать.
Интересует, что применяете для .NET Core и выше и как там сделать дополнительные поля, что меня интересуют.
В Serilog, мне например, не удалось найти возможности добавить имя потока, класса, функции.
. Но когда логов идет 30 тыс записей в секунду, то без JSON уже сложно.
Это как то странно. JSON это всего лишь форматированный текст и от обычного он отличается лишь форматированием. 30 тыс в секунду это сколько получается в неделю? Как найти сообщение в логе недельной давности?
зачем парсить лог? Имхо в лог смотрят, когда проблемы и пытаются понять, анализируя записи непосредственно перед проблемой. Если перед проблемой 30 тыс. записей и это за секунду, то не сильно понятно, что можно в таком логе найти. Или я что то не понимаю...
Ну представь себе с двадцать K8s кластеров из сотен виртуальных машин, сотни приложений на всём этом. Тысячи контейнеров, многие из которых живут минуты или часы.
Всё это генерит те самые 30 тыс сообщений. У каждого лога свой формат. И теперь тебе нужно найти сообщения о неудачных попытках логина юзера, например. Нужно понять где, когда, что делал.
Будете в Эксель выгружать?
Всякое бывает, у нас логи не по 30тыс записей в секунду, но около 2 гиг за 3 дня набегает.
Сейчас у нас есть программка, которая парсит логи и собирает статистику. В случае проблем я загружаю логи в эту программку и вижу когда стала расти очередь, могу увидеть было ли в это время увеличение количества сообщений, сколько времени тратилось на обработку сообщений и на каком шаге начинаются тормоза.
Сделано все довольно просто - у нас есть около 20 строк, которые мы ищем регулярными выражениями, т.е. каждая строка лога прогоняется через 20 регулярок. В этом смысле, однозначно было бы удобнее сохранять логи в JSON. Но нам надо human readable лог :)
В C# можно добавить события, а в параметрах Event передавать от кого итд. итп. см. https://metanit.com/sharp/tutorial/3.14.php
в параметрах Event передавать от кого итд. итп
Зачем мне делать свою систему логгирования?
Насколько удобнее написать
_log.Debug("Start");
И получить что то типа этого
24.05.2021 12:07:17.3456 Debug [MainThread] Processing.cs, line 57, function Run() : Start
Зачем мне делать свою систему логгирования?
Ну может потому-что там лицензия не подходит. Раньше тоже чужие компоненты брали, потом из-за неподходящей лицензии, или из-за того что разработчик компонентов перешёл на платную допустим CKEditor, или из-за того что многие компоненты устанавливаются через композер допустим Twig, а обычный хостинг может и не поддерживать композер, поэтому переделали всё на свои компоненты.
для чего "для этого"? Вы ничего не путаете?
Проверяете на ошибки, там тоже в лог файлы вроде пишутся.
А что, нет?
Я не нашел этого
https://logging.apache.org/log4net/release/framework-suppo...
Да это и в log4net есть
Специально не искал.
Хотите сказать, что можно сказать что выводить только "Serialization.*" с уровня Error
И есть CSV appender? И можно впаралель на несколько аппендеров выводить? И Structured logging есть?
Я не нашел этого
.NET Core 1.0 providing .NET Standard 1.3 (ограничения описаны ниже). Update: в архиве с бинарниками есть версия и для .NET Standard 2.0.
выводить только "Serialization.*" с уровня Error
Да.
есть CSV appender?
И Structured logging есть?
Нет, но есть возможность реализовывать собственные appender'ы, которые будут писáть CSV и структурированные данныe (тот же JSON).
И можно впаралель на несколько аппендеров выводить?
Да.
Вообще странно, что ты это спрашиваешь.
Вообще странно, что ты это спрашиваешь.
Согласен, выводил то даже на несколько, но что то казалось, что на один
Но вот что можно CSV appender сделать где в конфиге самому колонки определять, не знаю как.
Да и Structured logging с Fluent-API
https://github.com/NLog/NLog/wiki/How-to-use-structured-lo...
тоже как то сомневаюсь
Всегда полезно заглянуть назад
Ну и статьи оказались не правы где сказано что обнов нет фиг знает сколько. Хотя нет 6.0 точно уж не будет.
Не знаю в общем, понравился мне NLog надо еще погонять.
Сейчас у нас есть программка, которая парсит логи и собирает статистику.
Тогда это костыли. Это не лог, а отчет. Именно потому что когда потребуется ручной анализ лога, сделать это будет трудно. В результате компромисса и вручную читать сложно и автоматически анализировать проблемно.
Я ничего не имею против джесона, меня удивило количество записей, просто какое то чудовищное количество.
Это не лог, а отчет.
Ну тогда надо определить, что такое лог :)
Мы с лог пишем принимаемые и отправляемые сообщения + профайлинг. А сообщений у нас приходит где-то 200-300 в минуту.
Именно потому что когда потребуется ручной анализ лога, сделать это будет трудно.
Руками тоже анализирую наши логи. Не то, чтобы это было как-то супер сложно. Просто для анализа использую Notepad++. В Notepad'е или в Far'е анализировать лог практически невозжможно.
Ну тогда надо определить, что такое лог
Сохранение информации о текущей работе проги с целью установления состояния проги на момент ошибки. Например клиент жалуется, что прога вчера часов в 9 послала его на йух. Админ поднимает логи(О!)и смотрит, не было ли чего подозрительного в 9 часов или около того.