Что такое хороший способ для форматирования журналов? - PullRequest
4 голосов
/ 09 сентября 2008

Я разрабатываю приложение, которое включает в себя необходимость регистрировать все входящие сообщения, которые я получаю по соединению Telnet. Текст в основном простой, хотя может включать в себя теги ANSI, которые обеспечивают цвет текста и форматирование (16 цветов, жирный шрифт, подчеркивание и т. Д.).

Я хотел бы отформатировать свои журналы, чтобы позже сохранить текст с форматированием, датой / временем и, возможно, другими метаданными. Мои первые мысли были полностью посвящены XML, но это могло повлиять на мою способность позже написать инструмент быстрого поиска. Моя текущая идея - дата / время + текст в одном файле с метаданными, хранящимися в другом файле XML, на которые ссылается номер строки.

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

Дополнительно: Благодаря некоторым ответам до сих пор, хотя я должен упомянуть, что большую часть времени сообщения будут сообщениями от человека к человеку, а не системными сообщениями. Более примитивный тип IRC. Мой пользователь сам решит позже (добавив метаданные), какие сообщения были важны. Это необработанный файл журнала записей, из которого могут быть получены отфильтрованные или отредактированные журналы.

Ответы [ 5 ]

2 голосов
/ 09 сентября 2008

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

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

1 голос
/ 09 сентября 2008

G'day,

Обязательно зайдите в простой файл и добавьте сценарии munge, чтобы позже превратить его в XMl.

Первым предложением было бы убедиться, что все строки даты / времени имеют формат ISO 8601, а именно ГГГГ-ММ-ДД чч: мм: сс.

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

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

На самом деле не так уж сложно взять один из стандартных файлов синтаксиса и изменить его для обработки строк журнала.

НТН.

ура

Rob

0 голосов
/ 09 сентября 2008

Я не совсем уверен, чего вы пытаетесь достичь. Telnet обычно рассматривается как символьный протокол, поэтому, когда вы говорите «входящие сообщения», вы подразумеваете, что каждый символ является сообщением? Или весь сеанс пользователя это сообщение?

Я сделаю некоторые предположения. У вас есть пользователи, которые входят в систему через telnet, и вы хотите захватить все, что они делают, когда они вошли в систему. Позже вы захотите связать то, что они сделали с этим пользователем, а также время и дату, когда они это сделали. Вы должны будете иметь возможность искать позже, чтобы узнать, «кто сделал rm * 'как root?»

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

например. 2008_09_08_14_52_07_nidonocu

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

, например

ls
cd www
ls
vi index.html
/copyright 2007
llllllllllllr8:wq
exit

Также записать в файл 8-битные символы ANSI. Вы должны иметь возможность использовать текстовый редактор и grep для выполнения базовых проверок и поисков. Вы можете использовать средство просмотра двоичных файлов или использовать его позже, если вам действительно нужно прочитать 8-битные данные.

Резервное копирование, архивирование, очистка и т. Д. Могут выполняться с помощью обычных инструментов файловой системы и сценариев.

Приношу свои извинения, если мои предположения неверны.

-
Bruce

0 голосов
/ 09 сентября 2008

Я собираюсь «разделить ограждение» и сказать, использовать базу данных для всех ваших записей анализа / архивирования журналов (таких как ваши сообщения Telnet). Это даст вам преимущества полнотекстового поиска, столбцов и простых способов поиска данных.

Используйте плоский файл (или формат XML, поскольку файл не должен быть слишком большим) для любого из ваших журналов типов отладки / критических ошибок.

Если у вас разорвано соединение с базой данных или что-то пошло не так с вашей структурой таблиц, запись в БД будет бессмысленной.

Если задуматься, если вы ищете немного более «легковесное» решение, вы можете использовать SQLite для регистрации всего вашего трафика telnet, чтобы вы могли использовать преимущества структуры БД, но также иметь доступность файл.

С помощью другого поклона log4net вы можете легко сделать это с помощью имеющегося у них ADO-приложения.

0 голосов
/ 09 сентября 2008

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

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

...