Рекомендации по созданию журнала для ошибок
Недавно я делал некоторую работу, которая была довольно подробно,
Мне было интересно, что вы думаете лучше для регистрации.
Это лучше.
а. Каждый раз, когда я хочу писать в свой журнал, откройте файл, напишите ему затем сразу же закройте его, чтобы не было реальных шансов проиграть информации в случае критического сбоя или сбоя.
В. Периодически сохраняйте, возможно, после завершения каждого основного раздела это означает, что я могу сузить места, где есть ошибки.
Любые другие предложения?
Я не хочу открывать и экономить весь день с большим объемом текста
Мне нужно записывать, но я не хочу потерять свою детализацию информации.
Я пишу на С++, извините за то, что не упоминал об этом раньше.
Ответы
Ответ 1
Насколько мне известно, он довольно распространен (задан?), чтобы поток был ровным, эквивалентным сохранению.
То есть, когда вы говорите:
file.flush();
Все, что нужно написать, написано. Обратите внимание, что std::endl;
также вызывает flush
. Итак, оставьте его открытым и просто промойте после сброса информации.
Ответ 2
Лучшее решение - использовать для этого существующую библиотеку. Есть много хороших, хорошо протестированных и популярных библиотек. Они обычно дают вам всю гибкость, необходимую вам, и избавляют вас от головной боли при управлении файлами. Кроме того, они позволяют сохранять ваши журналы на разные цели, а не на файлы. Я использовал Google Log Library и ACE:
ACE - это большая библиотека, и регистрация - это лишь небольшая часть, поэтому, если вам нужен только журнал, возможно, это не очень хороший вариант. Во всяком случае, не пытайтесь внедрять ведение журнала самостоятельно, сохраняйте усилия для чего-то более полезного; если, конечно, у вас нет особого интереса к механизмам ведения журнала.
Ответ 3
Я рекомендую журнал для С++ (log4cpp), в котором есть хорошие инструменты.
Ответ 4
а. Каждый раз, когда я хочу писать в свой log, откройте файл, напишите ему, затем немедленно закройте его, чтобы он нет реальной возможности потерять информацию в случае критического сбоя или авария.
В. Сохранять периодически, может быть, после все основные разделы завершены это означает, что я могу сузить ошибки.
Любые другие предложения
Просто подтяните мозг немного дольше - вы придумаете десятки других идей. Проблема заключается в том, что запись регистратора может быть выполнена настолько сложной, насколько вы хотите - регистраторы могут сами стать полноценными компонентами программного обеспечения.
Здесь мне очень понравилась статья по дизайну классов регистратора. Посмотрите.
Если вы не хотите/не имеете пропускную способность для поддержки создания нового модуля для ведения журнала, перейдите к существующей библиотеке, как уже указывали другие.
Как вы выбираете нужную библиотеку? Вещь, о которой вы действительно должны беспокоиться, - это то, что вы хотите, и стадию развития, в которой вы находитесь. Сортируйте свои сообщения и посмотрите, поддерживает ли библиотека их классификацию ясным и последовательным образом. Вам нужны несколько приемников для ваших сообщений? Поддерживает ли ваша библиотека это? Если ваш код находится в процессе производства, вам придется немного волноваться. Вам нужна система транзакционных журналов? Вам нужна атомарность операций (и, следовательно, журналы)? Вам нужна возможность отката сообщений?
Надеюсь, что это поможет.
Ответ 5
В Unix-системах у вас есть что-то, называемое syslog (кстати, как вызов библиотеки, так и openlog и closelog, и служба). В Windows я считаю, что там журнал событий, не знаю API для этого.
В любом случае, поскольку syslog (и журнал событий в Windows) регистрируется через IPC (иногда даже удаленно по сети), процесс развязан и не будет затронут сбой вашей программы. Таким образом вы также сбросите ответственность за сохранение файла в службе syslog. Обратите внимание, что это включает в себя такие вещи, как логротация и сжатие лог файлов, а также дает вам возможность использовать стандартизированные инструменты для оценки указанных лог файлов (например, IDS).
Теперь, сказав, что сбой системы (сбой питания или что-то еще) - это совершенно другая история, я не знаю, была ли эта ваша забота, если вы хотите немного разобраться в какой системе вы работаете, может быть проще предложить что-то более подходящее.