1 - сделать один журнал, со стандартным форматом. Не имеет большого значения, что это, но убедитесь, что когда-либо запись имеет те же основные поля. Просто вызов «printf», вероятно, не обрезает его (замените System.err.println или что-то еще, в зависимости от ситуации)
2 - разрешить хотя бы одно поле в качестве произвольной строки ... разработчик будет лучше вас знать, что должно быть там.
3 - Включите отметку времени с высоким разрешением в каждой записи. В конце концов тебе это понадобится, поверь мне.
4 - Если возможно, укажите файл и номер строки источника ошибки. Это легко в C, и немного боли в Java. Но это невероятно полезно позже, особенно когда люди начинают вырезать + вставлять код, включая сообщения об ошибках.
5 - Убедитесь, что журнал находится в том месте, где его может использовать любой уровень кода.
6 - Я часто использовал теги ошибок «Primary» и «Secondary», где «Primary» означает «Я парень, который обнаружил проблему», а «Secondary» означает «Я вызвал функцию, которая сообщил об ошибке ". Это позволяет легко найти источник проблемы («Основной: файл не найден») и по-прежнему сообщать о значении ошибки («Вторичный: невозможно загрузить таблицу калибровки»).
7 - включает некоторые возможности для регистрации ошибок и ошибок.
Самое сложное, что я нахожу, это когда ошибка не обязательно является ошибкой. Если вы вызываете функцию с файлом, а файл не существует, это ошибка, которая должна быть зарегистрирована или нет? Иногда это критический сбой, а иногда и ожидаемый. Это в значительной степени зависит от API функции; если у функции есть способ вернуть ошибку, я обычно делаю это без регистрации; тогда задача кода более высокого уровня состоит в том, чтобы решить, нужно ли сообщать об этой ошибке или ожидаемо.