4 совета, которые сделают логирование лучше, а жизнь проще
Грамотное логирование — залог того, что логи принесут пользу не только тому, кто их писал, но и другим разработчикам, а при работе над сложными проектами это жизненно важно. Один из наших разработчиков поделился заповедями грамотного логирования, о которых мы и расскажем.
Название лог-файла
Начинается логирование с названия лог-файла. Например, если мы имеем в миграторе два одноимённых класса импорта и экспорта для, допустим, пользователей, то не стоит и там, и там вести запись в файл с названием "users_log.txt". Умение пользоваться поиском по тексту это, конечно, хорошо, но, согласитесь, намного удобнее, когда импорт пользователей лежит в "import_users_log.txt", а экспорт, соответственно, в "export_users_log.txt".
Иногда встречаются поделки, в которых все экспортируемые сущности: пользователи, задачи, проекты и т.д. просто логируются в файл с названием "export_log.txt". Разбираться в таких логах это отдельная головоломка, которую можно было бы не решать, если бы с самого начала все делалось грамотно.
Имена, пароли, явки — лучше четко и понятно
Сообщение, которое мы пишем в лог, должно быть максимально информативным с первой строки. В библиотеках bx24 и bx24m в конце каждого лога присутствует бэктрейс, по которому можно отследить, с какой строки и из какого файла был вызван процесс записи, но, согласитесь, намного удобнее, когда тебе не нужно пролистывать целую простынку текста, чтобы узнать, откуда она родом, и можно просто сразу прочитать, что
className methodName() $blahBlahBlahArray: array(blah-blah-blah на тысячу строк)
В принципе, имя класса можно пропустить, если оно достаточно очевидно из названия самого лог-файла. Но вот указывать метод и имя переменной нужно. Причём, обратите внимание, что вот так делать - плохо:
Bx24\Util::log('methodName() res: ' . print_r($answer, true), 'logname');
а вот так - хорошо:
Bx24\Util::log('methodName() $answer: ' . print_r($answer, true), 'logname');
Во втором случае разработчику, который пойдёт в код после прочтения вашего лога, не нужно будет производить лишнюю работу по сопоставлению некоего res и безымянного array(...), возвращённого функцией print_r(), он будет сразу искать переменную с именем $answer и в этом мире, возможно, станет чуть больше добра и гармонии.
Не нужно лишней информации
Логируйте только то, что вам действительно нужно. Не стоит распечатывать весь массив, если вам нужно проверить наличие одного единственного ключа.
Оформление тоже важно
Если вам нужно залогировать несколько небольших переменных, которые связаны какой-то общей логикой, не стесняйтесь использовать простой советский:
"\n---------------------\n"
Это не сильно отличается от того случая, когда мы используем несколько вызовов Bx24\Util::log() внутри одного блока if ($DEBUG), но если нужно залогировать несколько коротеньких строковых переменных, такая форма записи намного лучше читается - не нужно каждый раз проматывать бектрейсы в конце каждой лог-записи, да и в коде оно выглядит аккуратнее.
Если вы работаете с кодом, то эти простые советы помогут вам сделать этот код понятнее, а мир чуточку лучше.