Сортировка и резервное копирование файлов log4j

Прошу прощения за длину этого вопроса. Трудно объяснить, хотя я свободно говорил по-английски, чего я не делаю;)
Не совсем уверен, где разместить этот вопрос, потому что он имеет java, библиотеку log4j и linux.

Сценарий:

У меня есть несколько файлов журнала (созданных log4j с помощью RollingFileAppender ). Именованные файлы file.log и file.log.1 в file.log.10
Все файлы перезаписываются более одного раза в день. Я имею в виду, если я получаю заболевание, я почти уверен, что у меня нет журналов, чтобы узнать, что произошло, потому что оно будет перезаписано.

Цель:

Моя цель – периодически создавать резервные копии этих файлов с некоторыми условиями

  • Во-первых, не пропустите данные (достаточно часто выполняйте работу)
  • Не повторяйте информацию. (это было бы решено, если бы информация была отсортирована)
  • Данные должны быть отсортированы. (Проблема !!)

Соображения:

  • Каждый отдельный файл сортируется, но не все вместе, потому что есть два экземпляра сервера, которые им пишут.
    Я имею в виду, что один экземпляр можно записать в * .log.1, а другой * .log.2 сразу. Поэтому я не могу объединить их всех и ожидать, чтобы они отсортировали их.
  • Я не могу увеличить пространство в файловой системе.

Формат регистра журнала:

Каждая строка выглядит так:

2014-11-28 14: 33: 10,015 главная ca.cpy.net.txc.batch.SendEER INFO – информация

Попытки:

  1. Перейдите из RollingFileAppender в DailyRollingFileAppender как тип приложения. К сожалению, в документации Apache

    «Наблюдается, что DailyRollingFileAppender обнаруживает проблемы синхронизации и потери данных».

    Поэтому я не могу использовать его.

  2. Используйте библиотеки apache log4j extras, но мне не разрешено это делать. Это не зависит от меня.
  3. Делайте все вещи самостоятельно. Он состоит из:

    • объединить все файлы
    • сортировать их
    • отбросить все сохраненные данные в предыдущих резервных копиях.
    • компресс

    Проблема – это шаг сортировки. Вот что я пробовал:

     for ((i=10; i >= 1; i--)); do cat file.log.$i >> $FILE_OUT; ## put all files in one (as much sorted as possible) done; cat file.log >> $FILE_OUT; ## append last sort -s -t ' ' -k 1.1,1.4n -k 1.6,1.7n -k 1.9,1.10n -k 2.1,2.2n -k 2.4,2.5n -k 2.7,2.8n -k 2.10,2.12n -3k $FILE_OUT -o $FILE_SORTED # Sort by date/time 

    Ну, это будет работать, если каждый зарегистрированный к журналу регистр имеет одну единственную строку (то есть: no end-of-line character \ n). Например, такая команда сортировки выровняла бы такой регистр:

     2014-11-28 14:33:10,015 main ca.cpy.net.txc.batch.SendEER INFO - ***** RESULTATS ENVIAMENT EXPEDIENT ***** Total documents a tractar en DB: 86 ***************************************** 

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

Есть ли способ сортировать объединенные файлы, не разбивая каждый регистр, содержащий более одной строки? Любая другая идея будет очень желанной.

One Solution collect form web for “Сортировка и резервное копирование файлов log4j”

Вот один из способов:

Сделайте файлы журнала NUL -delimited. То есть, каждый конец записи должен иметь NUL ( \0 ). Затем вы можете воспользоваться поддержкой NUL -пределенного текста, найденного в нескольких инструментах ( sed , sort , xargs , find и т. Д.). Один из способов:

 perl -pe 's/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/\0$1/' file.log.2 > file.log.2.NULL 
  • Подготовьте каждую временную метку с помощью \0 (это наоборот – запись начинается с NUL , но по сути …)

Тогда вы можете сделать:

 sort -szt ' ' -k1,2 file.log{.{10..1},}.NULL -o $FILE_SORTED 
  • -s для стабильного сортировки (так что привязанные записи сортируются по порядку появления)
  • -z включает поддержку NUL разрешенной текстовой поддержки
  • Я изменил ключи, поскольку, как я заметил в комментариях, временные метки формы YYYY-MM-DD HH:MM:SS,UUU лексикографически сортируются. Вам не нужна цифровая сортировка для них.

Или вы можете полностью избежать всех этих временных файлов:

 perl -pe 's/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/\0$1/' file.log{.{10..1},} | \ sort -szt ' ' -k1,2 -o $FILE_SORTED 
  • Команда Sort -u не работает
  • Группировать по функциональности на Mac-адресе
  • Как сортировать данные в файле с помощью скрипта?
  • Проблема сортировки нескольких столбцов Unix
  • пятерка времени задержки с файлом журнала со сценарием оболочки
  • Сортировка текстового файла в соответствии с символом в поле
  • Сортировка по регулярным выражениям
  • сортировать каждое поле численно, меняя количество полей
  • Сортировка файла с целым числом в круглых скобках без пробела
  • Команда вроде «paste - -», но отсортированная в алфавитном порядке
  • Сортировка блоков линий
  • Сортировка строк по количеству слов на строку
  • Linux и Unix - лучшая ОС в мире.