Provided better example for logging cookbook (GH-101164)

Co-authored-by: Vinay Sajip <vinay_sajip@yahoo.co.uk>
This commit is contained in:
Vladimir Malinovskii 2023-01-20 11:54:48 +03:00 committed by GitHub
parent 3fa8fe7177
commit 8cdbc46090
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1982,26 +1982,47 @@ Using a rotator and namer to customize log rotation processing
-------------------------------------------------------------- --------------------------------------------------------------
An example of how you can define a namer and rotator is given in the following An example of how you can define a namer and rotator is given in the following
snippet, which shows zlib-based compression of the log file:: runnable script, which shows gzip compression of the log file::
import gzip
import logging
import logging.handlers
import os
import shutil
def namer(name): def namer(name):
return name + ".gz" return name + ".gz"
def rotator(source, dest): def rotator(source, dest):
with open(source, "rb") as sf: with open(source, 'rb') as f_in:
data = sf.read() with gzip.open(dest, 'wb') as f_out:
compressed = zlib.compress(data, 9) shutil.copyfileobj(f_in, f_out)
with open(dest, "wb") as df:
df.write(compressed)
os.remove(source) os.remove(source)
rh = logging.handlers.RotatingFileHandler(...)
rh = logging.handlers.RotatingFileHandler('rotated.log', maxBytes=128, backupCount=5)
rh.rotator = rotator rh.rotator = rotator
rh.namer = namer rh.namer = namer
These are not "true" .gz files, as they are bare compressed data, with no root = logging.getLogger()
"container" such as youd find in an actual gzip file. This snippet is just root.setLevel(logging.INFO)
for illustration purposes. root.addHandler(rh)
f = logging.Formatter('%(asctime)s %(message)s')
rh.setFormatter(f)
for i in range(1000):
root.info(f'Message no. {i + 1}')
After running this, you will see six new files, five of which are compressed:
.. code-block:: shell-session
$ ls rotated.log*
rotated.log rotated.log.2.gz rotated.log.4.gz
rotated.log.1.gz rotated.log.3.gz rotated.log.5.gz
$ zcat rotated.log.1.gz
2023-01-20 02:28:17,767 Message no. 996
2023-01-20 02:28:17,767 Message no. 997
2023-01-20 02:28:17,767 Message no. 998
A more elaborate multiprocessing example A more elaborate multiprocessing example
---------------------------------------- ----------------------------------------