diff options
author | Vladimir Malinovskii <galqiwi@galqiwi.ru> | 2023-01-20 08:54:48 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-20 08:54:48 (GMT) |
commit | 8cdbc4609022c9c8dfb66da328a149c2bea75f89 (patch) | |
tree | 69da85b2a29c1f1370a7bd585675cbbc41a5a8f3 | |
parent | 3fa8fe7177bb941aa60ecaf14d1fa1750a26f674 (diff) | |
download | cpython-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.rst | 41 |
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 ---------------------------------------- |