Самый простой способ решить эту проблему, возможно, использовать python и модуль ведения журнала , который был разработан для этой цели.Создайте сценарий, который читает из stdin
и записывает в stdout
и реализует ротацию журналов, описанную ниже.
Модуль «протоколирования» предоставляет
class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0,
backupCount=0, encoding=None, delay=0)
, который в точности соответствует тому, о чем вы спрашиваете.
Вы можете использовать значения maxBytes и backupCount, чтобы разрешить ролловеру файла заданный размер.
From docs.python.org
Иногда вы хотите увеличить размер файла журнала до определенного размера, а затем открыть новый файл и войти в него.Возможно, вы захотите сохранить определенное количество этих файлов, и когда столько файлов будет создано, поверните их так, чтобы количество файлов и размер файлов оставались ограниченными.Для этого шаблона использования пакет ведения журнала предоставляет RotatingFileHandler:
import glob
import logging
import logging.handlers
LOG_FILENAME = 'logging_rotatingfile_example.out'
# Set up a specific logger with our desired output level
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
LOG_FILENAME, maxBytes=20, backupCount=5)
my_logger.addHandler(handler)
# Log some messages
for i in range(20):
my_logger.debug('i = %d' % i)
# See what files are created
logfiles = glob.glob('%s*' % LOG_FILENAME)
for filename in logfiles:
print(filename)
В результате должно быть 6 отдельных файлов, каждый с частью истории журнала для приложения:
logging_rotatingfile_example.out
logging_rotatingfile_example.out.1
logging_rotatingfile_example.out.2
logging_rotatingfile_example.out.3
logging_rotatingfile_example.out.4
logging_rotatingfile_example.out.5
Самый последний файл всегда logging_rotatingfile_example.out, и каждый раз, когда он достигает предела размера, он переименовывается с суффиксом .1.Каждый из существующих файлов резервных копий переименовывается для увеличения суффикса (.1 становится .2 и т. Д.), А файл .6 стирается.
Очевидно, что в этом примере длина журнала слишком мала как крайняяпример.Вы хотели бы установить maxBytes на соответствующее значение.