Рекомендации по созданию журнала для ошибок

Недавно я делал некоторую работу, которая была довольно подробно, Мне было интересно, что вы думаете лучше для регистрации. Это лучше.

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

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

Любые другие предложения? Я не хочу открывать и экономить весь день с большим объемом текста Мне нужно записывать, но я не хочу потерять свою детализацию информации. Я пишу на С++, извините за то, что не упоминал об этом раньше.

Ответ 1

Насколько мне известно, он довольно распространен (задан?), чтобы поток был ровным, эквивалентным сохранению.

То есть, когда вы говорите:

file.flush();

Все, что нужно написать, написано. Обратите внимание, что std::endl; также вызывает flush. Итак, оставьте его открытым и просто промойте после сброса информации.

Ответ 2

Лучшее решение - использовать для этого существующую библиотеку. Есть много хороших, хорошо протестированных и популярных библиотек. Они обычно дают вам всю гибкость, необходимую вам, и избавляют вас от головной боли при управлении файлами. Кроме того, они позволяют сохранять ваши журналы на разные цели, а не на файлы. Я использовал Google Log Library и ACE:

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

Ответ 4

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

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

Любые другие предложения

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

Здесь мне очень понравилась статья по дизайну классов регистратора. Посмотрите.

Если вы не хотите/не имеете пропускную способность для поддержки создания нового модуля для ведения журнала, перейдите к существующей библиотеке, как уже указывали другие.

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

Надеюсь, что это поможет.

Ответ 5

В Unix-системах у вас есть что-то, называемое syslog (кстати, как вызов библиотеки, так и openlog и closelog, и служба). В Windows я считаю, что там журнал событий, не знаю API для этого.

В любом случае, поскольку syslog (и журнал событий в Windows) регистрируется через IPC (иногда даже удаленно по сети), процесс развязан и не будет затронут сбой вашей программы. Таким образом вы также сбросите ответственность за сохранение файла в службе syslog. Обратите внимание, что это включает в себя такие вещи, как логротация и сжатие лог файлов, а также дает вам возможность использовать стандартизированные инструменты для оценки указанных лог файлов (например, IDS).

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