Skip to content

Commit

Permalink
[3.11] Provided better example for logging cookbook (GH-101164) (GH-1…
Browse files Browse the repository at this point in the history
…01184)

Co-authored-by: Vladimir Malinovskii <[email protected]>
Co-authored-by: Vinay Sajip <[email protected]>
  • Loading branch information
3 people authored Jan 20, 2023
1 parent efe3a38 commit 5e1c4ac
Showing 1 changed file with 31 additions and 10 deletions.
41 changes: 31 additions & 10 deletions Doc/howto/logging-cookbook.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
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):
return name + ".gz"

def rotator(source, dest):
with open(source, "rb") as sf:
data = sf.read()
compressed = zlib.compress(data, 9)
with open(dest, "wb") as df:
df.write(compressed)
with open(source, 'rb') as f_in:
with gzip.open(dest, 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
os.remove(source)

rh = logging.handlers.RotatingFileHandler(...)

rh = logging.handlers.RotatingFileHandler('rotated.log', maxBytes=128, backupCount=5)
rh.rotator = rotator
rh.namer = namer

These are not "true" .gz files, as they are bare compressed data, with no
"container" such as you’d find in an actual gzip file. This snippet is just
for illustration purposes.
root = logging.getLogger()
root.setLevel(logging.INFO)
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
----------------------------------------
Expand Down

0 comments on commit 5e1c4ac

Please sign in to comment.