Как правильно писать логи (?)
Комментарии (11)
19 мая 2017 в 08:36
0↑
↓
[4] pry(main)> log = Logger.new STDERR, level: :info; [5] pry(main)> log.debug "МанаМана#{ print 'Нелениво'; 1+2 }" Нелениво=> true [6] pry(main)> log.debug { "МанаМана#{ print 'Нелениво'; 1+2 }" } => true
Спасибо. Не знал.
19 мая 2017 в 08:38
0↑
↓
Немного не в контексте статьи, но тем не менее есть еще один пункт к выводам:
- думайте, куда вы пишете
При использовании накопителей на флэш-памяти особо удачливый логгер может протереть в памяти дырку за время, намного меньшее ожидаемого времени жизни системы
19 мая 2017 в 12:00
–1↑
↓
Пишите логи в АНБ, там места хватит
19 мая 2017 в 08:50
0↑
↓
Логируйте с избытком. Никогда заранее не известно сколько и какой информации в логах понадобиться в критический момент.
А потом копайтесь несколько часов в логах в попытках найти нужное. Мне кажется, лучше все-таки соблюдать баланс.
19 мая 2017 в 09:40
0↑
↓
Вот потому и есть уровни логирования (например, 5), когда всё ок — можно настроить чуть не минимум, когда нужно разобраться — включаем mode=DEBUG в конфиге и он пишет всё, включая содержимое запросов и поток данных с устройств, разбираться придётся часы, но без этого — недели.
19 мая 2017 в 11:08
+1↑
↓
Возможно, зависит от проекта, но у меня есть для таких случаев дебаг.
А для случаев, где один сбой за месяц, то копать такие логи нужно будет ооооочень долго.
19 мая 2017 в 09:56
+1↑
↓
найти что-то в большом логе когда оно там есть и в маленьком когда его там нет немного разные вещи19 мая 2017 в 13:09
0↑
↓
Лучше иметь такую возможность, чем остаться с сообщением про баг/сбой и невозможностью по логам понять, что было.
19 мая 2017 в 10:13
0↑
↓
Можно использовать инструменты сбора и анализа логов, искать станет проще.19 мая 2017 в 12:19
+1↑
↓
Восемь уровней логирования — вам действительно столько надо?
Может и не надо. Но для себя давно придумал дополнительную фичу: вкл/выкл вывода в лог определённых строк независимо от log_level. Выглядит это так (использую как навесной фильтр для Log: Any: Adapter, думаю, для других языков/библиотек можно что-то аналогичное придумать):# конфиг: log_comments => 0 $log->info( '//Что-то что-то что-то что-то, что-то есть у бегемота' ); # В лог не запишется ничего даже при log_level => trace # конфиг: log_comments => 1 $log->debug( '#Слонёнок ужасно умный. И попугай тоже ужасно умный.' ); # Сейчас - запишется (признак комментария будет вырезан), если log_level => debug и дальше # конфиг: log_comments => 0 $log->debug( ';Они оба ужасно умные. Просто один другого умней…' ); # А сейчас, при том же log_level - нет.
Зачем это надо? Ну, есть такие юзкейсы, где мне это бывает полезно :)
19 мая 2017 в 13:09
0↑
↓
Похоже это аналог log4j, а там можно создавать отдельные экземпляры логеров со своими настройками для каждого класса. Что действительно очень удобно.