powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / принципы логирования кода
28 сообщений из 28, показаны все 2 страниц
принципы логирования кода
    #35576442
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем привет.
мне тут вдруг интересно стало - а существуют ли какие-то стандарты, соглашения, общепринятые практики по тому, как над правильно выводить логи в разрабатываемом коде. меня в данном вопросе интересуют не столько инструменты, сколько именно методики.
есть ведь соглашения по коду, стандарты написания комментариев, тестов, и т.д. наверняка и про логи уже давно кто-то сел и продумал этот вопрос :)
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576616
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Linux используется демон syslogd. Он формирует текстовые файлы событий. Обычно они падают в каталог /var/log. Почитай в этом направлении.

В Windows тоже есть некий API который фиксирует события. Для их просмотра испольуют eventvwr.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576682
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, я немножко не об этом.

вот есть, допустим, проект, который со временем превращается в нечто очень большое программное изделие. над ним работают много людей, которые в своем коде в процессе отладки выводят на консоль всякие разные полезные и не очень сообщения. если этот процесс никак не регламентировать, то консоль работающего приложения превращается в бессвязный генератор непонятных строчек в очень большом количестве. а хотелось бы, в идеале, так - включить для логгера уровень debug, запустить прогамму, и смотря в вывод программы сразу понять что в ней происходит и как она работает. по идее это средство для понимания работы кода может быть куда полезнее комментариев и тестов. в первую очередь из-за наглядности и скорости. неужели этим никто не заморачивался?

зы: как пользоваться инструментами для логирования(в техническом смысле) я знаю :)
а как их использовать с максимальной выгодой - вот вопрос.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576696
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой библиотекой (инструментом) вы пользуетесь?
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576698
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так как основной мой инструмент это java, то использую log4j.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576700
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так как основной мой инструмент это java, то использую log4j.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576701
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс, забоянил случайно...
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576709
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
untitledтак как основной мой инструмент это java, то использую log4j.

И в чём трудность? Вы не знаете как "включить для логгера уровень debug" ? Или вам нужны рекомендации по пользованию "с максимальной выгодой" ?
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576714
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в чём трудность? Вы не знаете как "включить для логгера уровень debug" ? Или вам нужны рекомендации по пользованию "с максимальной выгодой" ?

второе, ага :)
вот вы в своих проектах, когда что-то выводите логгерами на консоль, какими соображениями руководствуетесь?
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576727
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
untitled
вот вы в своих проектах, когда что-то выводите логгерами на консоль, какими соображениями руководствуетесь?
Выводить в консоль на сервере - дурной тон. Её там просто некому читать. Я вывожу - в текстовые файлы. Для удобства - с суточной ротацией. Всё это делается средствами log4j.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576730
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выводить в консоль на сервере - дурной тон. Её там просто некому читать. Я вывожу - в текстовые файлы. Для удобства - с суточной ротацией. Всё это делается средствами log4j.

это понятно :) для удобства я еще и на почту администратору ерроры отсылаю. но на сервере уровень сообщений ниже error не ставится почти никогда.

с ошибками то все более-менее понятно - а как насчет сообщений уровня info и ниже? как вы их пишете? они ведь в первую очередь ориентированы на разработчиков и на сервере их никто не будет смотреть.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576736
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
untitledс ошибками то все более-менее понятно - а как насчет сообщений уровня info и ниже? как вы их пишете? они ведь в первую очередь ориентированы на разработчиков и на сервере их никто не будет смотреть.
В нормальном режиме следует выводить уровни ERROR и FATAL. Если c приложением какая-то проблема, можно включить все уровни вплоть до DEBUG.

Если вы хотите выводить ERROR но в то-же время не выводить уровень INFO то вам просто надо создать еще один логгер. И читать его должны будут не сисадмины а технологи задач и приложений.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576739
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот например:
источник
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.
	public static void removeInstance(String uid, String name, Properties properties) {
		//TODO: theoretically non-threadsafe...

		if (name!=null) {
			log.info("Unbinding factory from JNDI name: " + name);

			try {
				Context ctx = NamingHelper.getInitialContext(properties);
				ctx.unbind(name);
				log.info("Unbound factory from JNDI name: " + name);
			}
			catch (InvalidNameException ine) {
				log.error("Invalid JNDI name: " + name, ine);
			}
			catch (NamingException ne) {
				log.warn("Could not unbind factory from JNDI", ne);
			}

			NAMED_INSTANCES.remove(name);

		}

		INSTANCES.remove(uid);

	}

	public static Object getNamedInstance(String name) {
		log.debug("lookup: name=" + name);
		Object result = NAMED_INSTANCES.get(name);
		if (result==null) {
			log.debug("Not found: " + name);
			log.debug( NAMED_INSTANCES.toString() );
		}
		return result;
	}

как определить что в первом методе стоит писать на уровень info, а во втором только debug, и что стоит писать именно-это. точнее я подозреваю что в 90% случаев такое пишется от балды, но потом это приводит к полной каше в логах рабочего приложения. всякие аццы в умных книгах посвещают целые главы вопросам о том, стоит ли переносить фигурную скобку после метода на новую строку, а вот про логи я как то толковых статей еще не встречал.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576741
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В нормальном режиме следует выводить уровни ERROR и FATAL. Если c приложением какая-то проблема, можно включить все уровни вплоть до DEBUG.

Если вы хотите выводить ERROR но в то-же время не выводить уровень INFO то вам просто надо создать еще один логгер. И читать его должны будут не сисадмины а технологи задач и приложений.


да, а как определить, что следует писать в инфо и тем более в дебаг?
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576746
untitled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
** а как насчет сообщений уровня info и ниже? как вы их пишете?

я имел в виду не запись их на диск, если что, а написание кода :)
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
untitledкак определить что в первом методе стоит писать на уровень info, а во втором только debug, и что стоит писать именно-это.
Потому что так решил автор.

точнее я подозреваю что в 90% случаев такое пишется от балды, но потом это приводит к полной каше в логах рабочего приложения.
Приведите пример вашей "каши" и я вам скажу что следует убрать из событий.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35576951
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
untitledнад ним работают много людей, которые в своем коде в процессе отладки выводят на консоль всякие разные полезные и не очень сообщения
Во вменяемых командах таких людей убивают. Правда, бывают не очень вменяемые люди.. один раз в жизни мне пришлось произнести фразу "еще раз увижу в vcs-е строку system.out.println - будет увольнение".

untitledесли этот процесс никак не регламентировать, .... . а хотелось бы,
Регламентировать этот процесс - примерно то же самое, что регламентировать качественное программирование. Можно назвать некоторые признаки хорошего и плохого кода, но в целом процесс слишком неформализуемый, чтобы его можно было описать в регламенте.

untitledпо идее это средство для понимания работы кода может быть куда полезнее комментариев и тестов.
"Тесты как средство понимания" - бред пьяного ежика. Да, я знаю, что это не Ваша идея. Лог как средство понимания - очень немногим лучше.

untitledа как их использовать с максимальной выгодой - вот вопрос.
Ответ банален - записывать все существенное, четко его категоризируя
...
Рейтинг: 0 / 0
принципы логирования кода
    #35577020
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВо вменяемых командах таких людей убивают. Правда, бывают не очень вменяемые люди.. один раз в жизни мне пришлось произнести фразу "еще раз увижу в vcs-е строку system.out.println - будет увольнение".
Просто надо в особо крупных проектах определить "правила игры". Писать в логгер на сервере (если это компонент). Или в таблицу в базе.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35577052
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПросто надо в особо крупных проектах определить "правила игры".
Само собой. "Невменяемые" - это те, кто несмотря на правила игры.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35577055
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
untitled
как определить что в первом методе стоит писать на уровень info, а во втором только debug

Я уровнем INFO логировал то, что в принципе может быть адресовано пользователю, а уровнем дебаг - то, что может интересовать только раразработчика.

Например, при расчете зарплаты ИНФОм писались внутренние всякие переменные рачета (средняя сумма зарпаты за период, которая использовалась при расчете болничного), уровнем ДЕБАГОм SQL запросы.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35577067
softwarer
...
"Тесты как средство понимания" - бред пьяного ежика. Да, я знаю, что это не Ваша идея. Лог как средство понимания - очень немногим лучше.
...


Занятно.
Очень был бы благодарен за высказывание развернутоно мнения - каким средствами правильно должно достигаться понимание (в предположении, что тесты и логи запрещены) и, может быть вы поделитесь примерами использования этих средств.

ЗЫ
В настоящее время сопровождаю очень компактную задачу - весь код в районе 2мегабайт в компилированного з-кода. Возраст задачи - около 7 лет. В настоящий момент контора не роасполагает ни одним сотрудником, исторически причастным к разввитию этой задачи.

В задаче около десятка расчетных функций. Размер функций - от 1000 до 5000 строк (от 30 до 120-130 страниц печатного текста).

Честно признаю, что сопровождать эту компактную задачу без логов не умею.
Поэтому искренне заинтересован в содержательном и развернутом ответе.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35577071
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
untitledкак определить что в первом методе стоит писать на уровень info, а во втором только debug,
Никак. Хочется назвать это явной ошибкой, но на всякий случай скажу мягче - очень спорное решение.

untitledточнее я подозреваю что в 90% случаев такое пишется от балды,
Уровни log4j - очень небесспорны и сомнительны. По-хорошему, нужна стратегия уровня команды - что логируется и на каких уровнях, фактически "что именно значат цифры от 0 до N".

untitledно потом это приводит к полной каше в логах рабочего приложения.
Не совсем так. Реальная практика в моем представлении примерно такова: обычно приложение крутится с высоким level-ом логируемости (warn или может быть info), соответственно что в них пишется - команда понимает достаточно четко. В случае наличия проблем отдельные модули запускаются с level=all, и соответственно до бардака в уровнях особо нет никакого дела. А для отладки level=all для всех логгеров проще вообще не убирать.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35577080
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сосед. был акцессникОчень был бы благодарен за высказывание развернутоно мнения - каким средствами правильно должно достигаться понимание
Смотря что Вы называете пониманием.

сосед. был акцессник(в предположении, что тесты и логи запрещены)
В смысле "запрещены"? Они просто не являются лучшими инструментами решения этой задачи. Более четко: я не представляю себе задачи на "понимание кода", для которой не существует инструмента удачнее, чем эти.

сосед. был акцессники, может быть вы поделитесь примерами использования этих средств.
Если хочется понять "как работает нечто в конкретном случае", то лучшим инструментом является отладчик. Почему:

- можно на ходу подсмотреть куда угодно, туда, куда запись в лог не стоит
- можно тонко фильтровать просматриваемую информацию (скажем, отдельные элементы массива)
- видны и можно на ходу реагировать на неожиданности (скажем, уход в ветку, куда не должен был идти)
- и так далее.

Если же хочется глобально врубиться, врасти в код, то лучшим решением является чтение хорошо написанного и прокомментированного кода и рефакторинг плохо написанного.

сосед. был акцессникЧестно признаю, что сопровождать эту компактную задачу без логов не умею. Поэтому искренне заинтересован в содержательном и развернутом ответе.
У нас немного разное восприятие слов. У меня есть подобный опыт, и я пользовался логами, но не для "понимания", а для "исправления ошибки без понимания". То есть - к функции мы относимся как к темно-серому ящику, просто регистрируем нехорошие симптомы, ищем и исправляем их причину.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35577115
авторСмотря что Вы называете пониманием.
Пониманием я называю состояние, которое можно минимально характеризовать так:
1) при фиксации (функционально) ошибочного поведения сопровождающий "быстро" и "адекватно" локализует проблемные места.
2) при внесении любых изменений в код (как связанных с исправлением ошибок, так и с развитием задачи) сопровождающий не вносит побочных эффектов. ( т.е. ранее правильное поведение не ломается, и вновь реализованное работает как ожидается заказчиком).

автор. У меня есть подобный опыт, и я пользовался логами, но не для "понимания", а для "исправления ошибки без понимания".
я на голубом глазу считаю, что это само по себе есть существенная часть того, что можно было бы назвать пониманием. Как минимум тем предварительным условием, без которого настоящего понимания не достичь.

В общем-то, думаю, что я понимаю ваш посыл.
еще только одно замечание.
По поводу отладчика. В общем да - это локально полезная штука.
К сожалению, в моем случае исходный код - это единственное средство постижения особенностей реализации задачи.
информационные логи дают картинку ее фактического развертывания во времени.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35577116
AlifeSoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
untitledвсем привет.
мне тут вдруг интересно стало - а существуют ли какие-то стандарты, соглашения, общепринятые практики по тому, как над правильно выводить логи в разрабатываемом коде. меня в данном вопросе интересуют не столько инструменты, сколько именно методики.
есть ведь соглашения по коду, стандарты написания комментариев, тестов, и т.д. наверняка и про логи уже давно кто-то сел и продумал этот вопрос :)

Я делал для Delphi, логгер свой собственный учитывающий многопоточность приложения и опциональности источников данных в которые идет сохранение. Использовалось только сохранение в файл.

В целом сводится к использованию в программе таких вот конструкций
Код: plaintext
1.
2.
3.
4.
5.
type
  TLogger = class (TObject)
    //логирование ошибки
    procedure ErrorLog(Module, Error: WideString);
    //логирование отладочных данных
    procedure DebugLog(pUnit, pMethod, PLogString: WideString);
...
Рейтинг: 0 / 0
принципы логирования кода
    #35577346
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сосед. был акцессник
1) при фиксации (функционально) ошибочного поведения сопровождающий "быстро" и "адекватно" локализует проблемные места.
2) при внесении любых изменений в код (как связанных с исправлением ошибок, так и с развитием задачи) сопровождающий не вносит побочных эффектов. ( т.е. ранее правильное поведение не ломается, и вновь реализованное работает как ожидается заказчиком).

ИМХО в вашем случае следует больше внимания уделять модульным тестам,
нежели логированию. Вы думали об этом?
...
Рейтинг: 0 / 0
принципы логирования кода
    #35579241
2 mayton

Вообще-то это несколько уводит тему, на которую я среагировал - от "понимания" к стратегиям "рефакторинга". Что предполагает достижение элементов понимания, достаточных для начала планомерного размышления о модульном тестировании.

Не сказать, что я совсем на эту тему не думал.
Скажем так – думал пока недостаточно интенсивно, чтобы эта дума сумела превратиться в технологию моей работы. Конечно, тут есть тема, но в целом она следующая по порядку происходящих событий – сначала понять, потом тестировать.
Иначе это не тест – а научный эксперимент по изучению поведения программы, детали которого и раскрывают … логи.


Просто напомню вам, что при работе с унаследованным кодом проблема модульного тестирования формулируется как проблема первичности яйца перед курицей: прежде чем изменить (унаследованный) код, необходимо подготовить модульный тест. А прежде чем изготавливать модульные тесты – необходимо подготовить к этому унаследованный код - элиминировать зависимости между взаимодействующими модулями. Т.е. – провести рефакторинг этого самого унаследованного кода. (чего мы не должны, строго говоря, делать, не приготовив предварительно соответствующего случаю модульного теста).

Кроме того – как-то не поворачивается язык с разбегу называть тестирование модульным, применительно к модулям размером в несколько тысяч ( хоть бы даже и сотен) строк.
Хотя в содержательной части темы это отменить не может.

Вообще-то все мои проблемы как сопровожденца кода - совершенно классические и давно и точно описаны в литературе. Просто перечислю те из них, которые в набольшей степени касаются персонально меня:
- недостаточное понимание кода, для того, чтобы вообще приступить хоть к каким-то изменениям
- недостаточное представление о предметной области для составления хотя бы промежуточного, близкого к функциональному, набора тестов.
- отсутствие времени на изменение и необходимость совершить его
- слабая структурированность и монстроидальность кода.
- сторонние эффекты при внесении изменений, пропагируемые даже не столько через глобальные переменные, сколько через одновременную запись в множество таблиц БД.
- проект не объектно-ориентированный, поэтому большинство методик рефакторинга, пришедших от объектно-ориентированного анализа не применимо к нему "в лоб".
- (поганая) тенденция к внесению множества изменений в одном месте при реализации почти любой затребованной модификации поведения кода.

Все вышесказанное не означает, что у меня нет общего представления о направлениях борьбы со своими проблемами.

Возвращаясь к модульному тестированию – мне известен общий алгоритм модификации унаследованного кода, основанный на методике модульного тестирования – идентификация точек изменения -> отыскание точек тестирования -> разрушение межмодульных зависимостей -> написание тестов -> производство изменений.

Однако на текущий момент мне все еще недоступна эта техника в своей практической части и я остаюсь на уровне классического «внимательного отсматривания кода» и «максимально осторожного внесения изменений».
Мне кажется, что главным образом это происходит потому, что 1) не завершена в настоящий момент (несколько уже растянувшаяся) фаза получения общего чувства "понимания" доставшегося мне кода и, соответственно не произведено 2) первичное разделение монстроидальных функций.
(Впрочем пусть об лучше судят люди, которым по штату положено об этом судить.)

Собственно по незавершенности указанных предварительных фаз "вхождения в код" логи и представляют для меня существенный костыль. Видимо, еще некоторое существенное время и буду представлять один из самых рабочих элементов в моих инструментах.

Откровенно говоря, в рамках данного топика считаю затронутую мной тему о логах, как возможном вспомогательном средстве достижения понимания кода исчерпанной.
По крайней мере - нет чувства, что хочу ее продолжения.
...
Рейтинг: 0 / 0
принципы логирования кода
    #35579753
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по сабжу. читаю сейчас книжку "наука отладки" мэтта тэллеса и юань хсиха. авторы вот что говорят про: книжкоАбсолютный минимум полезной информации, которую должен содержать файл протокола, это:
* дата и время события;
* название функции, метода или процесса в системе, сгенерировавшего событие;
* уровень серьёзности события;
* описание протоколируемой проблемы;
* относящиеся к делу значения переменных в момент события.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / принципы логирования кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]