Как правильно писать логи (?)

Комментарии (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, а там можно создавать отдельные экземпляры логеров со своими настройками для каждого класса. Что действительно очень удобно.

© Habrahabr.ru