[Python-checkins] [3.10] Provided better example for logging cookbook (GH-101164) (GH-101183)
vsajip
webhook-mailer at python.org
Fri Jan 20 12:42:47 EST 2023
https://github.com/python/cpython/commit/2fe0404deb96999e56b205a72fa6e6056a048935
commit: 2fe0404deb96999e56b205a72fa6e6056a048935
branch: 3.10
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: vsajip <vinay_sajip at yahoo.co.uk>
date: 2023-01-20T17:42:40Z
summary:
[3.10] Provided better example for logging cookbook (GH-101164) (GH-101183)
Co-authored-by: Vladimir Malinovskii <galqiwi at galqiwi.ru>
Co-authored-by: Vinay Sajip <vinay_sajip at yahoo.co.uk>
files:
M Doc/howto/logging-cookbook.rst
diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst
index 1fa8dc10ad3c..66945bdf63eb 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
----------------------------------------
More information about the Python-checkins
mailing list