Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Замена Log4Net для Core

636  1 2 все
AlexNek патриот23.05.21 10:17
AlexNek
23.05.21 10:17 

Что пользуете вместо? Уже пару штук попробовал никак не получается вывести имя потока, класса и функции.

С классом и функцией может еще и получится, но вот с потоком никак ничего не могу найти.

#1 
AlexNek патриот23.05.21 13:01
AlexNek
NEW 23.05.21 13:01 
в ответ AlexNek 23.05.21 10:17

Пока подался 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*** 
#2 
  yurka_ffm знакомое лицо23.05.21 19:50
NEW 23.05.21 19:50 
в ответ AlexNek 23.05.21 13:01

Я б JSON использовал. Парсить проще.

#3 
AlexNek патриот23.05.21 20:00
AlexNek
NEW 23.05.21 20:00 
в ответ yurka_ffm 23.05.21 19:50
Я б JSON использовал

Зачем? В параллель еще CSV можно закинуть.

Лог мне надо видеть, а не парсить. Если надо парсить так лучше сразу в ДБ.

#4 
  yurka_ffm знакомое лицо24.05.21 08:01
NEW 24.05.21 08:01 
в ответ AlexNek 23.05.21 20:00

Для "домашнего" использования JSON может и не нужен. Но когда логов идет 30 тыс записей в секунду, то без JSON уже сложно.

#5 
uscheswoi_82 свой человек24.05.21 08:28
NEW 24.05.21 08:28 
в ответ AlexNek 23.05.21 10:17
Что пользуете вместо? Уже пару штук попробовал никак не получается вывести имя потока, класса и функции. С классом и функцией может еще и получится, но вот с потоком никак ничего не могу найти.

Раньше в БД Microsoft Access логи запихивал, т.е. OleDB, так можно искать по SQL запросу. Потом по умолчанию что с .NET шло то и использовал, т.е. EventLog/запись в журнал см. EventLog. Одна немецкая IT компания помойму в своих продуктах использует FireBird для логов, но это примерно. А сейчас я бы использовал бы для логов SQLite.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#6 
AlexNek патриот24.05.21 10:22
AlexNek
NEW 24.05.21 10:22 
в ответ uscheswoi_82 24.05.21 08:28

Кто не понял. Речь не идёт о том куда записывать или в каком формате записывать.

Интересует, что применяете для .NET Core и выше и как там сделать дополнительные поля, что меня интересуют.

В Serilog, мне например, не удалось найти возможности добавить имя потока, класса, функции.

#7 
AlexNek патриот24.05.21 10:25
AlexNek
NEW 24.05.21 10:25 
в ответ yurka_ffm 24.05.21 08:01
Но когда логов идет 30 тыс записей в секунду

много было проектов, но до такого еще никогда не додумывался смущ

#8 
koder патриот24.05.21 12:06
koder
NEW 24.05.21 12:06 
в ответ yurka_ffm 24.05.21 08:01
. Но когда логов идет 30 тыс записей в секунду, то без JSON уже сложно.


Это как то странно. JSON это всего лишь форматированный текст и от обычного он отличается лишь форматированием. 30 тыс в секунду это сколько получается в неделю? Как найти сообщение в логе недельной давности?

#9 
  yurka_ffm знакомое лицо24.05.21 12:21
NEW 24.05.21 12:21 
в ответ koder 24.05.21 12:06

JSON проще процессить без предварительной обработки при помощи специальных тулзов.

А плоский текст ещё нужно распарсить.

#10 
koder патриот24.05.21 14:31
koder
NEW 24.05.21 14:31 
в ответ yurka_ffm 24.05.21 12:21

зачем парсить лог? Имхо в лог смотрят, когда проблемы и пытаются понять, анализируя записи непосредственно перед проблемой. Если перед проблемой 30 тыс. записей и это за секунду, то не сильно понятно, что можно в таком логе найти. Или я что то не понимаю...

#11 
AlexNek патриот24.05.21 14:54
AlexNek
NEW 24.05.21 14:54 
в ответ koder 24.05.21 14:31
то не сильно понятно

да вообще непонятно зачем это логом называть? Если по 50 символов на строку/запись, то это поток 1.5 Мб/с

#12 
  yurka_ffm знакомое лицо24.05.21 16:06
NEW 24.05.21 16:06 
в ответ koder 24.05.21 14:31

Ну представь себе с двадцать K8s кластеров из сотен виртуальных машин, сотни приложений на всём этом. Тысячи контейнеров, многие из которых живут минуты или часы.

Всё это генерит те самые 30 тыс сообщений. У каждого лога свой формат. И теперь тебе нужно найти сообщения о неудачных попытках логина юзера, например. Нужно понять где, когда, что делал.

Будете в Эксель выгружать?

#13 
Срыв покровов коренной житель24.05.21 17:04
NEW 24.05.21 17:04 
в ответ yurka_ffm 24.05.21 16:06

и эти все сотни виртуальных машин пишут каждая в свой файл?

#14 
Срыв покровов коренной житель24.05.21 17:05
NEW 24.05.21 17:05 
в ответ AlexNek 23.05.21 10:17

я пытался настроить лог4нет, но что-то не срослось, уже не помню подробностей.
поэтому остановился на Setrilog, надо посмотреть, вывожу ли я имя класса/метода

#15 
  yurka_ffm знакомое лицо24.05.21 17:09
NEW 24.05.21 17:09 
в ответ Срыв покровов 24.05.21 17:04

Пишут приложения, контейнеры, виртуальные машины, оборудование. Каждый во много файлов.

#16 
Программист коренной житель24.05.21 17:55
NEW 24.05.21 17:55 
в ответ koder 24.05.21 14:31

Всякое бывает, у нас логи не по 30тыс записей в секунду, но около 2 гиг за 3 дня набегает.

Сейчас у нас есть программка, которая парсит логи и собирает статистику. В случае проблем я загружаю логи в эту программку и вижу когда стала расти очередь, могу увидеть было ли в это время увеличение количества сообщений, сколько времени тратилось на обработку сообщений и на каком шаге начинаются тормоза.

Сделано все довольно просто - у нас есть около 20 строк, которые мы ищем регулярными выражениями, т.е. каждая строка лога прогоняется через 20 регулярок. В этом смысле, однозначно было бы удобнее сохранять логи в JSON. Но нам надо human readable лог :)

#17 
  yurka_ffm знакомое лицо24.05.21 18:16
NEW 24.05.21 18:16 
в ответ Программист 24.05.21 17:55
однозначно было бы удобнее сохранять логи в JSON. Но нам надо human readable лог :)

JSON нужен для системы лог-аггрегации и аналитики, которая уже делает содержимое удобным для людей.

#18 
NightWatch коренной житель24.05.21 18:21
NightWatch
NEW 24.05.21 18:21 
в ответ AlexNek 23.05.21 10:17

А в чем причина замены log4net?

#19 
Срыв покровов коренной житель24.05.21 19:01
NEW 24.05.21 19:01 
в ответ yurka_ffm 24.05.21 17:09
Каждый во много файлов.

ну тогда формат файлов это одна из последних проблем.

#20 
uscheswoi_82 свой человек24.05.21 19:18
NEW 24.05.21 19:18 
в ответ AlexNek 24.05.21 10:22

В C# можно добавить события, а в параметрах Event передавать от кого итд. итп. см. https://metanit.com/sharp/tutorial/3.14.php

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#21 
uscheswoi_82 свой человек24.05.21 19:20
NEW 24.05.21 19:20 
в ответ uscheswoi_82 24.05.21 19:18

А вообще для этого вроде есть юнит тесты.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#22 
AlexNek патриот24.05.21 19:22
AlexNek
NEW 24.05.21 19:22 
в ответ NightWatch 24.05.21 18:21
А в чем причина замены log4net?

А что он поддерживает .NET 5? Это было основной причиной.


Да и NLog по фунционалу получше будет, могу ограничить логгирование уровнем и классом(и)

#23 
AlexNek патриот24.05.21 19:31
AlexNek
NEW 24.05.21 19:31 
в ответ uscheswoi_82 24.05.21 19:18
в параметрах Event передавать от кого итд. итп

Зачем мне делать свою систему логгирования?

Насколько удобнее написать

_log.Debug("Start");

И получить что то типа этого

24.05.2021 12:07:17.3456 Debug [MainThread] Processing.cs, line 57, function Run() : Start

#24 
AlexNek патриот24.05.21 19:32
AlexNek
NEW 24.05.21 19:32 
в ответ uscheswoi_82 24.05.21 19:20
А вообще для этого вроде есть юнит тесты.

для чего "для этого"? Вы ничего не путаете?

#25 
NightWatch коренной житель24.05.21 19:35
NightWatch
NEW 24.05.21 19:35 
в ответ AlexNek 24.05.21 19:22
А что он поддерживает .NET 5?

А что, нет?

могу ограничить логгирование уровнем и классом(и)

Да это и в log4net есть (если я правильно понимаю, что такое "уровень" и "класс").

#26 
uscheswoi_82 свой человек24.05.21 20:03
NEW 24.05.21 20:03 
в ответ AlexNek 24.05.21 19:32
Зачем мне делать свою систему логгирования?

Ну может потому-что там лицензия не подходит. Раньше тоже чужие компоненты брали, потом из-за неподходящей лицензии, или из-за того что разработчик компонентов перешёл на платную допустим CKEditor, или из-за того что многие компоненты устанавливаются через композер допустим Twig, а обычный хостинг может и не поддерживать композер, поэтому переделали всё на свои компоненты.


для чего "для этого"? Вы ничего не путаете?

Проверяете на ошибки, там тоже в лог файлы вроде пишутся.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#27 
AlexNek патриот24.05.21 20:29
AlexNek
NEW 24.05.21 20:29 
в ответ NightWatch 24.05.21 19:35
А что, нет?

Я не нашел этого

https://logging.apache.org/log4net/release/framework-suppo...

Да это и в log4net есть

Специально не искал.

Хотите сказать, что можно сказать что выводить только "Serialization.*" с уровня Error

И есть CSV appender? И можно впаралель на несколько аппендеров выводить? И Structured logging есть?


#28 
AlexNek патриот24.05.21 20:31
AlexNek
NEW 24.05.21 20:31 
в ответ uscheswoi_82 24.05.21 20:03
лог файлы вроде пишутся

https://tproger.ru/translations/unit-tests-purposes/

#29 
NightWatch коренной житель24.05.21 20:57
NightWatch
NEW 24.05.21 20:57 
в ответ AlexNek 24.05.21 20:29, Последний раз изменено 24.05.21 21:26 (NightWatch)
Я не нашел этого

.NET Core 1.0 providing .NET Standard 1.3 (ограничения описаны ниже). Update: в архиве с бинарниками есть версия и для .NET Standard 2.0.

выводить только "Serialization.*" с уровня Error

Да.

есть CSV appender?
И Structured logging есть?

Нет, но есть возможность реализовывать собственные appender'ы, которые будут писáть CSV и структурированные данныe (тот же JSON).

И можно впаралель на несколько аппендеров выводить?

Да.

Вообще странно, что ты это спрашиваешь.

#30 
AlexNek патриот24.05.21 21:55
AlexNek
NEW 24.05.21 21:55 
в ответ NightWatch 24.05.21 20:57
Вообще странно, что ты это спрашиваешь.

Согласен, выводил то даже на несколько, но что то казалось, что на один смущ


Но вот что можно CSV appender сделать где в конфиге самому колонки определять, не знаю как.

Да и Structured logging с Fluent-API

https://github.com/NLog/NLog/wiki/How-to-use-structured-lo...

тоже как то сомневаюсь

Всегда полезно заглянуть назад спок

Ну и статьи оказались не правы где сказано что обнов нет фиг знает сколько. Хотя нет 6.0 точно уж не будет.

Не знаю в общем, понравился мне NLog надо еще погонять.

#31 
koder патриот25.05.21 07:36
koder
NEW 25.05.21 07:36 
в ответ yurka_ffm 24.05.21 16:06
сотни приложений на всём этом. Тысячи контейнеров

И ВСЕ это в один лог? В один единственный файл?

#32 
koder патриот25.05.21 07:41
koder
NEW 25.05.21 07:41 
в ответ Программист 24.05.21 17:55
Сейчас у нас есть программка, которая парсит логи и собирает статистику.

Тогда это костыли. Это не лог, а отчет. Именно потому что когда потребуется ручной анализ лога, сделать это будет трудно. В результате компромисса и вручную читать сложно и автоматически анализировать проблемно.


Я ничего не имею против джесона, меня удивило количество записей, просто какое то чудовищное количество.

#33 
Программист коренной житель25.05.21 07:51
NEW 25.05.21 07:51 
в ответ koder 25.05.21 07:41
Это не лог, а отчет.

Ну тогда надо определить, что такое лог :)

Мы с лог пишем принимаемые и отправляемые сообщения + профайлинг. А сообщений у нас приходит где-то 200-300 в минуту.


Именно потому что когда потребуется ручной анализ лога, сделать это будет трудно.

Руками тоже анализирую наши логи. Не то, чтобы это было как-то супер сложно. Просто для анализа использую Notepad++. В Notepad'е или в Far'е анализировать лог практически невозжможно.

#34 
koder патриот25.05.21 08:33
koder
NEW 25.05.21 08:33 
в ответ Программист 25.05.21 07:51, Последний раз изменено 25.05.21 08:34 (koder)
Ну тогда надо определить, что такое лог

Сохранение информации о текущей работе проги с целью установления состояния проги на момент ошибкиулыб. Например клиент жалуется, что прога вчера часов в 9 послала его на йух. Админ поднимает логи(О!)и смотрит, не было ли чего подозрительного в 9 часов или около того.

#35 
Программист коренной житель25.05.21 09:24
NEW 25.05.21 09:24 
в ответ koder 25.05.21 08:33

Ну значит мы пишем логи :)

#36 
1 2 все