Сортировка и резервное копирование файлов 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 не работает
  • Как сортировать строку, которая в сочетании с строкой + число с использованием сценария bash?
  • добавить строку, в которой она принадлежит в отсортированном файле
  • Положение r до и после k в Sort
  • Числовая сортировка файлов
  • Удаление строк с одним общим полем
  • Сортировка строки datetime в 12-часовом формате
  • другой вопрос с сортировкой в ​​bash
  • Проблема сортировки нескольких столбцов Unix
  • Unix сортирует по нескольким столбцам
  • Interesting Posts

    Многокомпонентный инструмент в духе более «параллельной» модели?

    Нет java-команды после sudo apt-get install default-jdk

    Как связать USB-устройство под статическим именем?

    Как я могу запускать команду периодически и неограниченно, пока она не отключится?

    CUPS: добавление сбой принтера с помощью «Не удалось получить список драйверов принтера:« Успех »

    После установки CentOS и перезагрузки не отображается новая загрузочная запись

    Почему я не могу отправлять сообщения с помощью команды на стене?

    Какую команду следует использовать для перемещения этих конкретных элементов?

    Продолжается ли pkill (и его родительские процессы)?

    nm-апплет openvpn подключается только как root

    Crontab удаляет мои работы или возвращается к предыдущему состоянию?

    Как ядро ​​Linux узнает, какой процесс просыпаться во время обработки прерываний?

    сортировать и uniq в awk

    CentOS не может использовать новое пространство на системном диске

    Что такое .in файлы?

    Linux и Unix - лучшая ОС в мире.