|
|
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
всем привет. мне тут вдруг интересно стало - а существуют ли какие-то стандарты, соглашения, общепринятые практики по тому, как над правильно выводить логи в разрабатываемом коде. меня в данном вопросе интересуют не столько инструменты, сколько именно методики. есть ведь соглашения по коду, стандарты написания комментариев, тестов, и т.д. наверняка и про логи уже давно кто-то сел и продумал этот вопрос :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2008, 21:21 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
В Linux используется демон syslogd. Он формирует текстовые файлы событий. Обычно они падают в каталог /var/log. Почитай в этом направлении. В Windows тоже есть некий API который фиксирует события. Для их просмотра испольуют eventvwr. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 11:22 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
нет, я немножко не об этом. вот есть, допустим, проект, который со временем превращается в нечто очень большое программное изделие. над ним работают много людей, которые в своем коде в процессе отладки выводят на консоль всякие разные полезные и не очень сообщения. если этот процесс никак не регламентировать, то консоль работающего приложения превращается в бессвязный генератор непонятных строчек в очень большом количестве. а хотелось бы, в идеале, так - включить для логгера уровень debug, запустить прогамму, и смотря в вывод программы сразу понять что в ней происходит и как она работает. по идее это средство для понимания работы кода может быть куда полезнее комментариев и тестов. в первую очередь из-за наглядности и скорости. неужели этим никто не заморачивался? зы: как пользоваться инструментами для логирования(в техническом смысле) я знаю :) а как их использовать с максимальной выгодой - вот вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 12:59 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
А какой библиотекой (инструментом) вы пользуетесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 13:21 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
так как основной мой инструмент это java, то использую log4j. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 13:24 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
так как основной мой инструмент это java, то использую log4j. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 13:28 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
упс, забоянил случайно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 13:29 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
untitledтак как основной мой инструмент это java, то использую log4j. И в чём трудность? Вы не знаете как "включить для логгера уровень debug" ? Или вам нужны рекомендации по пользованию "с максимальной выгодой" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 13:39 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
И в чём трудность? Вы не знаете как "включить для логгера уровень debug" ? Или вам нужны рекомендации по пользованию "с максимальной выгодой" ? второе, ага :) вот вы в своих проектах, когда что-то выводите логгерами на консоль, какими соображениями руководствуетесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 13:52 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
untitled вот вы в своих проектах, когда что-то выводите логгерами на консоль, какими соображениями руководствуетесь? Выводить в консоль на сервере - дурной тон. Её там просто некому читать. Я вывожу - в текстовые файлы. Для удобства - с суточной ротацией. Всё это делается средствами log4j. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 14:09 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
Выводить в консоль на сервере - дурной тон. Её там просто некому читать. Я вывожу - в текстовые файлы. Для удобства - с суточной ротацией. Всё это делается средствами log4j. это понятно :) для удобства я еще и на почту администратору ерроры отсылаю. но на сервере уровень сообщений ниже error не ставится почти никогда. с ошибками то все более-менее понятно - а как насчет сообщений уровня info и ниже? как вы их пишете? они ведь в первую очередь ориентированы на разработчиков и на сервере их никто не будет смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 14:19 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
untitledс ошибками то все более-менее понятно - а как насчет сообщений уровня info и ниже? как вы их пишете? они ведь в первую очередь ориентированы на разработчиков и на сервере их никто не будет смотреть. В нормальном режиме следует выводить уровни ERROR и FATAL. Если c приложением какая-то проблема, можно включить все уровни вплоть до DEBUG. Если вы хотите выводить ERROR но в то-же время не выводить уровень INFO то вам просто надо создать еще один логгер. И читать его должны будут не сисадмины а технологи задач и приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 14:36 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
ну вот например: источник http://anonsvn.jboss.org/repos/hibernate/core/branches/Branch_3_3/core/src/main/java/org/hibernate/impl/SessionFactoryObjectFactory.java Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. как определить что в первом методе стоит писать на уровень info, а во втором только debug, и что стоит писать именно-это. точнее я подозреваю что в 90% случаев такое пишется от балды, но потом это приводит к полной каше в логах рабочего приложения. всякие аццы в умных книгах посвещают целые главы вопросам о том, стоит ли переносить фигурную скобку после метода на новую строку, а вот про логи я как то толковых статей еще не встречал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 14:37 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
В нормальном режиме следует выводить уровни ERROR и FATAL. Если c приложением какая-то проблема, можно включить все уровни вплоть до DEBUG. Если вы хотите выводить ERROR но в то-же время не выводить уровень INFO то вам просто надо создать еще один логгер. И читать его должны будут не сисадмины а технологи задач и приложений. да, а как определить, что следует писать в инфо и тем более в дебаг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 14:39 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
** а как насчет сообщений уровня info и ниже? как вы их пишете? я имел в виду не запись их на диск, если что, а написание кода :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 14:46 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
untitledкак определить что в первом методе стоит писать на уровень info, а во втором только debug, и что стоит писать именно-это. Потому что так решил автор. точнее я подозреваю что в 90% случаев такое пишется от балды, но потом это приводит к полной каше в логах рабочего приложения. Приведите пример вашей "каши" и я вам скажу что следует убрать из событий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 14:53 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
untitledнад ним работают много людей, которые в своем коде в процессе отладки выводят на консоль всякие разные полезные и не очень сообщения Во вменяемых командах таких людей убивают. Правда, бывают не очень вменяемые люди.. один раз в жизни мне пришлось произнести фразу "еще раз увижу в vcs-е строку system.out.println - будет увольнение". untitledесли этот процесс никак не регламентировать, .... . а хотелось бы, Регламентировать этот процесс - примерно то же самое, что регламентировать качественное программирование. Можно назвать некоторые признаки хорошего и плохого кода, но в целом процесс слишком неформализуемый, чтобы его можно было описать в регламенте. untitledпо идее это средство для понимания работы кода может быть куда полезнее комментариев и тестов. "Тесты как средство понимания" - бред пьяного ежика. Да, я знаю, что это не Ваша идея. Лог как средство понимания - очень немногим лучше. untitledа как их использовать с максимальной выгодой - вот вопрос. Ответ банален - записывать все существенное, четко его категоризируя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 20:38 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
softwarerВо вменяемых командах таких людей убивают. Правда, бывают не очень вменяемые люди.. один раз в жизни мне пришлось произнести фразу "еще раз увижу в vcs-е строку system.out.println - будет увольнение". Просто надо в особо крупных проектах определить "правила игры". Писать в логгер на сервере (если это компонент). Или в таблицу в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 22:06 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
maytonПросто надо в особо крупных проектах определить "правила игры". Само собой. "Невменяемые" - это те, кто несмотря на правила игры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 23:06 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
untitled как определить что в первом методе стоит писать на уровень info, а во втором только debug Я уровнем INFO логировал то, что в принципе может быть адресовано пользователю, а уровнем дебаг - то, что может интересовать только раразработчика. Например, при расчете зарплаты ИНФОм писались внутренние всякие переменные рачета (средняя сумма зарпаты за период, которая использовалась при расчете болничного), уровнем ДЕБАГОм SQL запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 23:07 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
softwarer ... "Тесты как средство понимания" - бред пьяного ежика. Да, я знаю, что это не Ваша идея. Лог как средство понимания - очень немногим лучше. ... Занятно. Очень был бы благодарен за высказывание развернутоно мнения - каким средствами правильно должно достигаться понимание (в предположении, что тесты и логи запрещены) и, может быть вы поделитесь примерами использования этих средств. ЗЫ В настоящее время сопровождаю очень компактную задачу - весь код в районе 2мегабайт в компилированного з-кода. Возраст задачи - около 7 лет. В настоящий момент контора не роасполагает ни одним сотрудником, исторически причастным к разввитию этой задачи. В задаче около десятка расчетных функций. Размер функций - от 1000 до 5000 строк (от 30 до 120-130 страниц печатного текста). Честно признаю, что сопровождать эту компактную задачу без логов не умею. Поэтому искренне заинтересован в содержательном и развернутом ответе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 23:30 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
untitledкак определить что в первом методе стоит писать на уровень info, а во втором только debug, Никак. Хочется назвать это явной ошибкой, но на всякий случай скажу мягче - очень спорное решение. untitledточнее я подозреваю что в 90% случаев такое пишется от балды, Уровни log4j - очень небесспорны и сомнительны. По-хорошему, нужна стратегия уровня команды - что логируется и на каких уровнях, фактически "что именно значат цифры от 0 до N". untitledно потом это приводит к полной каше в логах рабочего приложения. Не совсем так. Реальная практика в моем представлении примерно такова: обычно приложение крутится с высоким level-ом логируемости (warn или может быть info), соответственно что в них пишется - команда понимает достаточно четко. В случае наличия проблем отдельные модули запускаются с level=all, и соответственно до бардака в уровнях особо нет никакого дела. А для отладки level=all для всех логгеров проще вообще не убирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 23:38 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
сосед. был акцессникОчень был бы благодарен за высказывание развернутоно мнения - каким средствами правильно должно достигаться понимание Смотря что Вы называете пониманием. сосед. был акцессник(в предположении, что тесты и логи запрещены) В смысле "запрещены"? Они просто не являются лучшими инструментами решения этой задачи. Более четко: я не представляю себе задачи на "понимание кода", для которой не существует инструмента удачнее, чем эти. сосед. был акцессники, может быть вы поделитесь примерами использования этих средств. Если хочется понять "как работает нечто в конкретном случае", то лучшим инструментом является отладчик. Почему: - можно на ходу подсмотреть куда угодно, туда, куда запись в лог не стоит - можно тонко фильтровать просматриваемую информацию (скажем, отдельные элементы массива) - видны и можно на ходу реагировать на неожиданности (скажем, уход в ветку, куда не должен был идти) - и так далее. Если же хочется глобально врубиться, врасти в код, то лучшим решением является чтение хорошо написанного и прокомментированного кода и рефакторинг плохо написанного. сосед. был акцессникЧестно признаю, что сопровождать эту компактную задачу без логов не умею. Поэтому искренне заинтересован в содержательном и развернутом ответе. У нас немного разное восприятие слов. У меня есть подобный опыт, и я пользовался логами, но не для "понимания", а для "исправления ошибки без понимания". То есть - к функции мы относимся как к темно-серому ящику, просто регистрируем нехорошие симптомы, ищем и исправляем их причину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 23:57 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
авторСмотря что Вы называете пониманием. Пониманием я называю состояние, которое можно минимально характеризовать так: 1) при фиксации (функционально) ошибочного поведения сопровождающий "быстро" и "адекватно" локализует проблемные места. 2) при внесении любых изменений в код (как связанных с исправлением ошибок, так и с развитием задачи) сопровождающий не вносит побочных эффектов. ( т.е. ранее правильное поведение не ломается, и вновь реализованное работает как ожидается заказчиком). автор. У меня есть подобный опыт, и я пользовался логами, но не для "понимания", а для "исправления ошибки без понимания". я на голубом глазу считаю, что это само по себе есть существенная часть того, что можно было бы назвать пониманием. Как минимум тем предварительным условием, без которого настоящего понимания не достичь. В общем-то, думаю, что я понимаю ваш посыл. еще только одно замечание. По поводу отладчика. В общем да - это локально полезная штука. К сожалению, в моем случае исходный код - это единственное средство постижения особенностей реализации задачи. информационные логи дают картинку ее фактического развертывания во времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2008, 00:43 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
untitledвсем привет. мне тут вдруг интересно стало - а существуют ли какие-то стандарты, соглашения, общепринятые практики по тому, как над правильно выводить логи в разрабатываемом коде. меня в данном вопросе интересуют не столько инструменты, сколько именно методики. есть ведь соглашения по коду, стандарты написания комментариев, тестов, и т.д. наверняка и про логи уже давно кто-то сел и продумал этот вопрос :) Я делал для Delphi, логгер свой собственный учитывающий многопоточность приложения и опциональности источников данных в которые идет сохранение. Использовалось только сохранение в файл. В целом сводится к использованию в программе таких вот конструкций Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2008, 00:44 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
сосед. был акцессник 1) при фиксации (функционально) ошибочного поведения сопровождающий "быстро" и "адекватно" локализует проблемные места. 2) при внесении любых изменений в код (как связанных с исправлением ошибок, так и с развитием задачи) сопровождающий не вносит побочных эффектов. ( т.е. ранее правильное поведение не ломается, и вновь реализованное работает как ожидается заказчиком). ИМХО в вашем случае следует больше внимания уделять модульным тестам, нежели логированию. Вы думали об этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2008, 10:15 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
2 mayton Вообще-то это несколько уводит тему, на которую я среагировал - от "понимания" к стратегиям "рефакторинга". Что предполагает достижение элементов понимания, достаточных для начала планомерного размышления о модульном тестировании. Не сказать, что я совсем на эту тему не думал. Скажем так – думал пока недостаточно интенсивно, чтобы эта дума сумела превратиться в технологию моей работы. Конечно, тут есть тема, но в целом она следующая по порядку происходящих событий – сначала понять, потом тестировать. Иначе это не тест – а научный эксперимент по изучению поведения программы, детали которого и раскрывают … логи. Просто напомню вам, что при работе с унаследованным кодом проблема модульного тестирования формулируется как проблема первичности яйца перед курицей: прежде чем изменить (унаследованный) код, необходимо подготовить модульный тест. А прежде чем изготавливать модульные тесты – необходимо подготовить к этому унаследованный код - элиминировать зависимости между взаимодействующими модулями. Т.е. – провести рефакторинг этого самого унаследованного кода. (чего мы не должны, строго говоря, делать, не приготовив предварительно соответствующего случаю модульного теста). Кроме того – как-то не поворачивается язык с разбегу называть тестирование модульным, применительно к модулям размером в несколько тысяч ( хоть бы даже и сотен) строк. Хотя в содержательной части темы это отменить не может. Вообще-то все мои проблемы как сопровожденца кода - совершенно классические и давно и точно описаны в литературе. Просто перечислю те из них, которые в набольшей степени касаются персонально меня: - недостаточное понимание кода, для того, чтобы вообще приступить хоть к каким-то изменениям - недостаточное представление о предметной области для составления хотя бы промежуточного, близкого к функциональному, набора тестов. - отсутствие времени на изменение и необходимость совершить его - слабая структурированность и монстроидальность кода. - сторонние эффекты при внесении изменений, пропагируемые даже не столько через глобальные переменные, сколько через одновременную запись в множество таблиц БД. - проект не объектно-ориентированный, поэтому большинство методик рефакторинга, пришедших от объектно-ориентированного анализа не применимо к нему "в лоб". - (поганая) тенденция к внесению множества изменений в одном месте при реализации почти любой затребованной модификации поведения кода. Все вышесказанное не означает, что у меня нет общего представления о направлениях борьбы со своими проблемами. Возвращаясь к модульному тестированию – мне известен общий алгоритм модификации унаследованного кода, основанный на методике модульного тестирования – идентификация точек изменения -> отыскание точек тестирования -> разрушение межмодульных зависимостей -> написание тестов -> производство изменений. Однако на текущий момент мне все еще недоступна эта техника в своей практической части и я остаюсь на уровне классического «внимательного отсматривания кода» и «максимально осторожного внесения изменений». Мне кажется, что главным образом это происходит потому, что 1) не завершена в настоящий момент (несколько уже растянувшаяся) фаза получения общего чувства "понимания" доставшегося мне кода и, соответственно не произведено 2) первичное разделение монстроидальных функций. (Впрочем пусть об лучше судят люди, которым по штату положено об этом судить.) Собственно по незавершенности указанных предварительных фаз "вхождения в код" логи и представляют для меня существенный костыль. Видимо, еще некоторое существенное время и буду представлять один из самых рабочих элементов в моих инструментах. Откровенно говоря, в рамках данного топика считаю затронутую мной тему о логах, как возможном вспомогательном средстве достижения понимания кода исчерпанной. По крайней мере - нет чувства, что хочу ее продолжения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2008, 22:58 |
|
||
|
принципы логирования кода
|
|||
|---|---|---|---|
|
#18+
по сабжу. читаю сейчас книжку "наука отладки" мэтта тэллеса и юань хсиха. авторы вот что говорят про: книжкоАбсолютный минимум полезной информации, которую должен содержать файл протокола, это: * дата и время события; * название функции, метода или процесса в системе, сгенерировавшего событие; * уровень серьёзности события; * описание протоколируемой проблемы; * относящиеся к делу значения переменных в момент события. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2008, 11:10 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1344972]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 490ms |

| 0 / 0 |
