(Windows) Exception Handling: к журналу событий или к базе данных?

Вы не пишете нижний колонтитул gzip, содержащий CRC и длину данных:

std::streamoff size = source.tellg();
int totalSize = size;
int tcrc = 0;
...
  n = source.rdbuf()->sgetn( in, CHUNK );
  strm.avail_in = (uInt)n;
  tcrc = crc32( tcrc, (uint8_t*)in, n );
...
(void)deflateEnd( &strm );
dest.write( (char*)&tcrc, sizeof( tcrc ) );
dest.write( (char*)&totalSize, sizeof( totalSize ) );
return write_len;

Ваш метод __write_magic_header также неверен, поскольку он выделяет только 10 байтов, но затем записывает 10 символов с помощью sprintf который фактически напишет 11 байтов, переполняющих ваш буфер.

В окнах вы не можете отправлять двоичные данные через std::cout, у вас та же проблема, что и при открытии файла с ofstream без указания binary. Чтобы исправить эту проблему, перед использованием std::cout:

_setmode( _fileno( stdout ), _O_BINARY );

необходимо указать следующее:

  1. не заключайте в свои включения #ifdef, Макросы, которые вы используете, являются подробностями реализации и не должны давать / незначительной разницы в производительности современного компилятора.
  2. не используйте «__» в начале имен методов или других идентификаторов, эти имена (вместе с «_» и заглавной буквой) зарезервированы для использования компилятором.
6
задан pearcewg 26 October 2008 в 20:42
поделиться

4 ответа

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

Трассировка - то, чем интересуется разработчик. Отслеживания стека, параметры метода, что веб-сервер возвратил Состояние HTTP 401,3 и т.д. Они являются действительно шумными, и могут произвести много данных в короткий срок. Обычно у нас есть разные уровни трассировки, для урезания шума.

Для входа в систему клиентского приложения я думаю, что журналы событий являются способом пойти (я должен был бы проверить дважды, но я думаю, что медицинский Контроль ASP.NET может записать в журнал событий также). У обычных пользователей есть полномочия записать в журнал событий, пока у Вас есть Установка (который установлен администратором так или иначе), создают источник события.

Большинство Ваших преимуществ для входа Sql, в то время как верный, не применимо к регистрации событий:

  • Может обработать большие объемы данных: у Вас действительно есть большие объемы необработанных исключений или других отказов высокого уровня?
  • Может обработать быстрый объем, вставляет исключений: единственное необработанное исключение должно снизить Ваше приложение - это - по сути ограниченный уровень. Другие интересные события к не разработчики должны быть так же агрегированы.
  • Очень настраиваемый: сообщение в журнале событий является в значительной степени произвольным текстом. Если Вы нуждаетесь в большем количестве информации, просто указываете на текст или структурированный XML или журнал двоичного файла
  • Немного легче создать создание отчетов/уведомление прочь устройства хранения данных SQL: Создание отчетов встроено со Средством просмотра журнала событий, и системы уведомления, или свойственный - из-за сбоя приложения - или смешаны в с другими действительно критическими уведомлениями - существует мало оправдания за пропавших без вести сообщения журнала событий. Для корпоративных или других сетевых приложений существует тысяча и 1 различное приложение, которые уже отбирают из журналов событий для ошибок... возможности являются Вашим системным администратором, уже использует тот.

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

90% времени, Вам не нужны они, и они установлены ПРЕДУПРЕДИТЬ или ОШИБКА. Но при установке их на ИНФОРМАЦИЮ или ОТЛАДКУ Вы генерируете тонну данных. RDBMS имеет много издержек - для производительности (ACID, параллелизм, и т.д.), устройство хранения данных (журналы транзакций, диски SCSI RAID-5, и т.д.), и администрирование (резервные копии, обслуживание сервера, и т.д.) - все из которых являются ненужными для журналов трассировки.

4
ответ дан 10 December 2019 в 00:46
поделиться

Я не зарегистрировался бы прямо к базе данных. Как Вы говорите, проблемы базы данных становятся хитрыми для входа :)

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

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

Для простоты входа я использовал бы платформу как log4net, который вынимает большое усилие из него и является проверенным на практике решением. Кроме чего-либо еще, которое означает, можно изменить выходную стратегию без изменений кода. Вы могли даже зарегистрироваться и к журналу событий и к базе данных при необходимости, или отправить некоторые журналы в одно место и некоторых к другому. (Я принял.NET здесь, но существуют подобные платформы журналирования для многих платформ.)

3
ответ дан 10 December 2019 в 00:46
поделиться

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

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

1
ответ дан 10 December 2019 в 00:46
поделиться

Одна вещь, которая нуждается в рассмотрении о регистрации событий, состоит в том, что существуют продукты там, которые могут контролировать журналы событий Ваших серверов (как Microsoft Operations Manager) и разумно сделать уведомление и собрать статистику по их содержанию.

"Минус" основанного на SQL входа то, что он добавляет другой слой зависимостей к Вашему приложению, которое может или не может всегда быть приемлемым. Я сделал обоих в своей карьере. Я несколько раз даже использовал базирующуюся очередь сообщений MSMQ, чтобы поставить события журнала в очередь и освободить очередь в базу данных MSSQL, чтобы избавить от необходимости мое клиентское программное обеспечение иметь соединение с DB.

2
ответ дан 10 December 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: