powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / принципы логирования кода
25 сообщений из 28, страница 1 из 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
25 сообщений из 28, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / принципы логирования кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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