Я недавно делал некоторую работу, которая была вполне подробно, я задавался вопросом, что Вы думаете, лучше для входа. Лучше.
A. Каждый раз я хочу записать в свой журнал, открыть файл, записать в него, тогда закрывают его немедленно так он, там не реальный шанс проигрывающей информации в случае критического отказа или катастрофического отказа.
B. Сохраняйте периодически, возможно после того, как каждый главный раздел был закончен, означая, что я могу сузить холмы, где ошибки.
Какие-либо другие предложения?? Я не хочу открывать и сохранять весь день с большим объемом текста, который я должен записать, но я не хочу терять свою гранулярность информации. Я пишу в C++, жаль о том, что не было упомянуто это предшествующий.
Насколько мне известно, довольно распространено (по требованию?), что флеш-поток эквивалентен сбережению.
То есть, когда вы говорите:
file.flush();
Все, что ждет написания, написано. Обратите внимание, что std::endl;
также вызывает flush
. Итак, оставьте его открытым и просто промойте после сброса информации.
Лучшее решение - использовать существующую библиотеку для этого. Там есть много хороших, хорошо проверенных и популярных библиотек. Они обычно дают вам всю универсальность, вам нужно и сэкономить головную боль в управлении файлами. Более того, они позволяют вам сохранить ваши журналы различным целям и не обязательно файлам. Я использовал библиотеку журнала Google и ACE:
ACE - большая библиотека, а регистрация - это лишь небольшая часть этого, поэтому, если вам нужна только журнал, может быть, это не хороший вариант. Во всяком случае, не пытайтесь реализовать вход в систему, сохранить усилия для чего-то более полезного; Если, конечно, у вас есть определенный интерес к журнальным двигателям.
Я рекомендую журнал для C ++ (LOG4CPP) , которые имеют хорошие инструменты.
А. Каждый раз, когда я хочу написать журнал, открыть файл, записать в него, а затем закрыть его сразу, чтобы он был нет реальных шансов потерять информацию в случае критического отказа или авария.
B. Периодически экономить, возможно, после все основные разделы завершены значение я могу сужать места, где ошибки.
Есть еще какие-нибудь предложения?
Просто подстегните свой мозг немного дольше - вы придумаете десятки других идей. Проблема в том, что написание регистратора может быть сделано настолько сложным, насколько вы хотите - регистраторы могут сами стать полноценными частями программного обеспечения.
Вот статья , которая мне очень понравилась по дизайну классов лесозаготовителей. Взгляните.
Если вы не хотите/не хотите иметь пропускную способность для поддержки создания нового модуля для ведения журнала, перейдите к существующей библиотеке, как уже предлагали другие.
Как выбрать нужную библиотеку? То, что вы действительно должны беспокоиться о том, какие журналы вы хотите и на какой стадии развития вы находитесь. Отсортируйте сообщения и проверьте, поддерживает ли библиотека их классификацию четким и последовательным способом. Требуется ли несколько приемников для сообщений? Ваша библиотека это поддерживает? Если ваш код в производстве, вам придется беспокоиться немного больше. Нужна ли система регистрации транзакций? Нужна ли атомарность операций (и, следовательно, журналов)? Нужна ли возможность отката сообщений?
Надеюсь, это поможет.
На системах Unix у вас есть что называется syslog (который кстати, как библиотечный вызов, вместе с OpenLog и CloseLog, а также службой). В Windows я верю, что есть журнал событий, не знаю API для этого, хотя.
В любом случае, поскольку Syslog (и журнал событий в Windows) зарегистрирован в IPC (иногда даже удаленно через сеть), процесс развязан и не будет затронут сбой программы. Таким образом, вы также выбросите ответственность за сохранение файла в сервис Syslog. Обратите внимание, что это включает в себя такие вещи, как Loogrotation и сжатие логотипов, а также предоставляя вам возможность использовать стандартизированные инструменты для оценки указанных логов (например, IDS).
Теперь, что сказал, что сбой системы (сбой питания или что-то еще) - это совершенно другая история, я не знаю, если это ваша забота, хотя, если вы хотите, чтобы уточнить немного, какую систему Вы работаете над, может быть легче предложить что-то более примерку.