mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Added support to rotate the pgadmin log file on the basis of Size and Age. Fixes #6395
This commit is contained in:
committed by
Akshay Joshi
parent
3ddf941cd7
commit
faa49687be
59
web/pgadmin/utils/enhanced_log_rotation.py
Normal file
59
web/pgadmin/utils/enhanced_log_rotation.py
Normal file
@@ -0,0 +1,59 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2021, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
import re
|
||||
import logging.handlers as handlers
|
||||
|
||||
|
||||
class EnhancedRotatingFileHandler(handlers.TimedRotatingFileHandler,
|
||||
handlers.RotatingFileHandler):
|
||||
"""
|
||||
Handler for logging to a set of files, which switches from one file
|
||||
to the next when the current file reaches a certain size, or at certain
|
||||
timed intervals
|
||||
@filename - log file name
|
||||
@max_bytes - file size in bytes to rotate file
|
||||
@interval - Duration to rotate file
|
||||
@backup_count - Maximum number of files to retain
|
||||
@encoding - file encoding
|
||||
@when - 'when' events supported:
|
||||
# S - Seconds
|
||||
# M - Minutes
|
||||
# H - Hours
|
||||
# D - Days
|
||||
# midnight - roll over at midnight
|
||||
# W{0-6} - roll over on a certain day; 0 - Monday
|
||||
Here we are defaulting rotation with minutes interval
|
||||
"""
|
||||
def __init__(self, filename, max_bytes=1, interval=60, backup_count=0,
|
||||
encoding=None, when='M'):
|
||||
max_bytes = max_bytes * 1024 * 1024
|
||||
handlers.TimedRotatingFileHandler.__init__(self, filename=filename,
|
||||
when=when,
|
||||
interval=interval,
|
||||
backupCount=backup_count,
|
||||
encoding=encoding)
|
||||
|
||||
handlers.RotatingFileHandler.__init__(self, filename=filename,
|
||||
mode='a',
|
||||
maxBytes=max_bytes,
|
||||
backupCount=backup_count,
|
||||
encoding=encoding)
|
||||
|
||||
# Time & Size combined rollover
|
||||
def shouldRollover(self, record):
|
||||
return handlers.TimedRotatingFileHandler.shouldRollover(self, record) \
|
||||
or handlers.RotatingFileHandler.shouldRollover(self, record)
|
||||
|
||||
# Roll overs current file
|
||||
def doRollover(self):
|
||||
self.suffix = "%Y-%m-%d_%H-%M-%S"
|
||||
self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}(\.\w+)?$"
|
||||
self.extMatch = re.compile(self.extMatch, re.ASCII)
|
||||
handlers.TimedRotatingFileHandler.doRollover(self)
|
||||
Reference in New Issue
Block a user