summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Malinovskii <galqiwi@galqiwi.ru>2023-01-20 08:54:48 (GMT)
committerGitHub <noreply@github.com>2023-01-20 08:54:48 (GMT)
commit8cdbc4609022c9c8dfb66da328a149c2bea75f89 (patch)
tree69da85b2a29c1f1370a7bd585675cbbc41a5a8f3
parent3fa8fe7177bb941aa60ecaf14d1fa1750a26f674 (diff)
downloadcpython-8cdbc4609022c9c8dfb66da328a149c2bea75f89.zip
cpython-8cdbc4609022c9c8dfb66da328a149c2bea75f89.tar.gz
cpython-8cdbc4609022c9c8dfb66da328a149c2bea75f89.tar.bz2
Provided better example for logging cookbook (GH-101164)
Co-authored-by: Vinay Sajip <vinay_sajip@yahoo.co.uk>
-rw-r--r--Doc/howto/logging-cookbook.rst41
1 files changed, 31 insertions, 10 deletions
diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst
index 8aec8e5..2ba5b5c 100644
--- a/Doc/howto/logging-cookbook.rst
+++ b/Doc/howto/logging-cookbook.rst
@@ -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
----------------------------------------