annotate Lib/logging/__init__.py @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents 344b4737d2fe
children d7660ccd8470 ef060b833183
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
75211
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
1 # Copyright 2001-2012 by Vinay Sajip. All Rights Reserved.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # Permission to use, copy, modify, and distribute this software and its
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 # documentation for any purpose and without fee is hereby granted,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # provided that the above copyright notice appear in all copies and that
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 # both that copyright notice and this permission notice appear in
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 # supporting documentation, and that the name of Vinay Sajip
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 # not be used in advertising or publicity pertaining to distribution
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 # of the software without specific, written prior permission.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 # VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 # VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 # IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 Logging package for Python. Based on PEP 282 and comments thereto in
75211
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
19 comp.lang.python.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
75211
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
21 Copyright (C) 2001-2012 Vinay Sajip. All Rights Reserved.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 To use, simply 'import logging' and log away!
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
26 import sys, os, time, io, traceback, warnings, weakref
65647
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
27 from string import Template
50074
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
28
45377
1872bd6cf4b4 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60789,60793,60796,60799-60809,60812-60813,60815-60821,60823-60826,60828-60829,60831-60834,60836,60838-60839,60846-60873 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44914
diff changeset
29 __all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR',
53505
17540a164797 Issue #5854: Updated __all__ to include some missing names and remove some names which should not be exported.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51740
diff changeset
30 'FATAL', 'FileHandler', 'Filter', 'Formatter', 'Handler', 'INFO',
17540a164797 Issue #5854: Updated __all__ to include some missing names and remove some names which should not be exported.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51740
diff changeset
31 'LogRecord', 'Logger', 'LoggerAdapter', 'NOTSET', 'NullHandler',
17540a164797 Issue #5854: Updated __all__ to include some missing names and remove some names which should not be exported.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51740
diff changeset
32 'StreamHandler', 'WARN', 'WARNING', 'addLevelName', 'basicConfig',
17540a164797 Issue #5854: Updated __all__ to include some missing names and remove some names which should not be exported.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51740
diff changeset
33 'captureWarnings', 'critical', 'debug', 'disable', 'error',
17540a164797 Issue #5854: Updated __all__ to include some missing names and remove some names which should not be exported.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51740
diff changeset
34 'exception', 'fatal', 'getLevelName', 'getLogger', 'getLoggerClass',
65541
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
35 'info', 'log', 'makeLogRecord', 'setLoggerClass', 'warn', 'warning',
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
36 'getLogRecordFactory', 'setLogRecordFactory', 'lastResort']
34744
3d97eb3b7cec Added optional encoding argument to file handlers. Made traceback import unconditional, to avoid lock contention problems which occur when logging from custom importers (SF patch #1158052)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34612
diff changeset
37
3d97eb3b7cec Added optional encoding argument to file handlers. Made traceback import unconditional, to avoid lock contention problems which occur when logging from custom importers (SF patch #1158052)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34612
diff changeset
38 try:
3d97eb3b7cec Added optional encoding argument to file handlers. Made traceback import unconditional, to avoid lock contention problems which occur when logging from custom importers (SF patch #1158052)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34612
diff changeset
39 import codecs
3d97eb3b7cec Added optional encoding argument to file handlers. Made traceback import unconditional, to avoid lock contention problems which occur when logging from custom importers (SF patch #1158052)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34612
diff changeset
40 except ImportError:
3d97eb3b7cec Added optional encoding argument to file handlers. Made traceback import unconditional, to avoid lock contention problems which occur when logging from custom importers (SF patch #1158052)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34612
diff changeset
41 codecs = None
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 try:
47266
7fe3a8648ce2 Rename thread to _thread and dummy_thread to _dummy_thread. Issue #2875.
Georg Brandl <georg@python.org>
parents: 45377
diff changeset
44 import _thread as thread
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 import threading
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 except ImportError:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 thread = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 __author__ = "Vinay Sajip <vinay_sajip@red-dove.com>"
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
50 __status__ = "production"
59142
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
51 __version__ = "0.5.1.2"
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
52 __date__ = "07 February 2010"
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 # Miscellaneous module data
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
57
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 #
34612
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
59 # _srcfile is used when walking the stack to check when we've got the first
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 # caller stack frame.
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
61 #
35512
9516ba54b9df Changed _srcfile determination to support py2exe.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34858
diff changeset
62 if hasattr(sys, 'frozen'): #support for py2exe
9516ba54b9df Changed _srcfile determination to support py2exe.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34858
diff changeset
63 _srcfile = "logging%s__init__%s" % (os.sep, __file__[-4:])
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 else:
26184
3e59d674b8c3 Get rid of #! lines, references to usage as __main__, README.txt, and
Guido van Rossum <guido@python.org>
parents: 26183
diff changeset
65 _srcfile = __file__
3e59d674b8c3 Get rid of #! lines, references to usage as __main__, README.txt, and
Guido van Rossum <guido@python.org>
parents: 26183
diff changeset
66 _srcfile = os.path.normcase(_srcfile)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
67
34612
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
68 # next bit filched from 1.5.2's inspect.py
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
69 def currentframe():
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
70 """Return the frame object for the caller's stack frame."""
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
71 try:
35749
17828a00a454 Don't use a string exception since it's deprecated
Neal Norwitz <nnorwitz@gmail.com>
parents: 35721
diff changeset
72 raise Exception
34612
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
73 except:
41969
9d02a4adf574 Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41480
diff changeset
74 return sys.exc_info()[2].tb_frame.f_back
34612
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
75
40893
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
76 if hasattr(sys, '_getframe'): currentframe = lambda: sys._getframe(3)
34612
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
77 # done filching
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
78
27349
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
79 # _srcfile is only used in conjunction with sys._getframe().
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
80 # To provide compatibility with older versions of Python, set _srcfile
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
81 # to None if _getframe() is not available; this value will prevent
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
82 # findCaller() from being called.
34612
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
83 #if not hasattr(sys, "_getframe"):
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
84 # _srcfile = None
27349
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
85
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 #_startTime is used as the base when calculating the relative time of events
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 _startTime = time.time()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
90
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 #raiseExceptions is used to see if exceptions during handling should be
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 #propagated
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 raiseExceptions = 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
96
36974
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
97 #
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
98 # If you don't want threading information in the log, set this to zero
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
99 #
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
100 logThreads = 1
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
101
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
102 #
50883
9ecbd9a101d8 merge cl r68737 to py3k
Jesse Noller <jnoller@gmail.com>
parents: 50074
diff changeset
103 # If you don't want multiprocessing information in the log, set this to zero
9ecbd9a101d8 merge cl r68737 to py3k
Jesse Noller <jnoller@gmail.com>
parents: 50074
diff changeset
104 #
9ecbd9a101d8 merge cl r68737 to py3k
Jesse Noller <jnoller@gmail.com>
parents: 50074
diff changeset
105 logMultiprocessing = 1
9ecbd9a101d8 merge cl r68737 to py3k
Jesse Noller <jnoller@gmail.com>
parents: 50074
diff changeset
106
9ecbd9a101d8 merge cl r68737 to py3k
Jesse Noller <jnoller@gmail.com>
parents: 50074
diff changeset
107 #
36974
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
108 # If you don't want process information in the log, set this to zero
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
109 #
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
110 logProcesses = 1
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
111
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 # Level related stuff
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 # Default levels and level names, these can be replaced with any positive set
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 # of values having corresponding names. There is a pseudo-level, NOTSET, which
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 # is only really there as a lower limit for user-defined levels. Handlers and
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 # loggers are initialized with NOTSET so that they will log all messages, even
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 # at user-defined levels.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 #
34744
3d97eb3b7cec Added optional encoding argument to file handlers. Made traceback import unconditional, to avoid lock contention problems which occur when logging from custom importers (SF patch #1158052)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34612
diff changeset
122
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 CRITICAL = 50
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 FATAL = CRITICAL
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 ERROR = 40
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
126 WARNING = 30
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
127 WARN = WARNING
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 INFO = 20
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 DEBUG = 10
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 NOTSET = 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
131
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 _levelNames = {
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 CRITICAL : 'CRITICAL',
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 ERROR : 'ERROR',
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
135 WARNING : 'WARNING',
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 INFO : 'INFO',
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 DEBUG : 'DEBUG',
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 NOTSET : 'NOTSET',
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 'CRITICAL' : CRITICAL,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 'ERROR' : ERROR,
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
141 'WARN' : WARNING,
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
142 'WARNING' : WARNING,
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 'INFO' : INFO,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 'DEBUG' : DEBUG,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 'NOTSET' : NOTSET,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 }
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
147
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 def getLevelName(level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 Return the textual representation of logging level 'level'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
151
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
152 If the level is one of the predefined levels (CRITICAL, ERROR, WARNING,
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 INFO, DEBUG) then you get the corresponding string. If you have
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 associated levels with names using addLevelName then the name you have
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
155 associated with 'level' is returned.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
156
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
157 If a numeric value corresponding to one of the defined levels is passed
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
158 in, the corresponding string representation is returned.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
159
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
160 Otherwise, the string "Level %s" % level is returned.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 return _levelNames.get(level, ("Level %s" % level))
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
163
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 def addLevelName(level, levelName):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 Associate 'levelName' with 'level'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
167
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 This is used when converting levels to text during message formatting.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 _acquireLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 try: #unlikely to cause an exception, but you never know...
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 _levelNames[level] = levelName
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 _levelNames[levelName] = level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 finally:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 _releaseLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
176
55242
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
177 def _checkLevel(level):
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
178 if isinstance(level, int):
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
179 rv = level
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
180 elif str(level) == level:
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
181 if level not in _levelNames:
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
182 raise ValueError("Unknown level: %r" % level)
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
183 rv = _levelNames[level]
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
184 else:
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
185 raise TypeError("Level not an integer or a valid string: %r" % level)
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
186 return rv
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
187
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 # Thread-related stuff
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
191
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 #_lock is used to serialize access to shared data structures in this module.
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
194 #This needs to be an RLock because fileConfig() creates and configures
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
195 #Handlers, and so might arbitrary user threads. Since Handler code updates the
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
196 #shared dictionary _handlers, it needs to acquire the lock. But if configuring,
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 #the lock would already have been acquired - so we need an RLock.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 #The same argument applies to Loggers and Manager.loggerDict.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 #
57476
726d12dba1f6 Issue #7403: Fixed possible race condition in lock creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 57449
diff changeset
200 if thread:
726d12dba1f6 Issue #7403: Fixed possible race condition in lock creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 57449
diff changeset
201 _lock = threading.RLock()
726d12dba1f6 Issue #7403: Fixed possible race condition in lock creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 57449
diff changeset
202 else:
726d12dba1f6 Issue #7403: Fixed possible race condition in lock creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 57449
diff changeset
203 _lock = None
726d12dba1f6 Issue #7403: Fixed possible race condition in lock creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 57449
diff changeset
204
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
205
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 def _acquireLock():
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 Acquire the module-level lock for serializing access to shared data.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
209
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 This should be released with _releaseLock().
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 if _lock:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 _lock.acquire()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
214
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 def _releaseLock():
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 Release the module-level lock acquired by calling _acquireLock().
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 if _lock:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 _lock.release()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
221
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 # The logging record
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
225
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
226 class LogRecord(object):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 A LogRecord instance represents an event being logged.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
229
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 LogRecord instances are created every time something is logged. They
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 contain all the information pertinent to the event being logged. The
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 main information passed in is in msg and args, which are combined
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 using str(msg) % args to create the message field of the record. The
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 record also includes information such as when the record was created,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 the source line where the logging call was made, and any exception
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 information to be logged.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 """
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
238 def __init__(self, name, level, pathname, lineno,
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
239 msg, args, exc_info, func=None, sinfo=None, **kwargs):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 Initialize a logging record with interesting information.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 ct = time.time()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 self.name = name
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 self.msg = msg
33807
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
246 #
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
247 # The following statement allows passing of a dictionary as a sole
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
248 # argument, so that you can do something like
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
249 # logging.debug("a %(a)d b %(b)s", {'a':1, 'b':2})
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
250 # Suggested by Stefan Behnel.
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
251 # Note that without the test for args[0], we get a problem because
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
252 # during formatting, we test to see if the arg is present using
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
253 # 'if self.args:'. If the event being logged is e.g. 'Value is %d'
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
254 # and if the passed arg fails 'if self.args:' then no formatting
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
255 # is done. For example, logger.warn('Value is %d', 0) would log
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
256 # 'Value is %d' instead of 'Value is 0'.
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
257 # For the use case of passing a dictionary, this should not be a
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
258 # problem.
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43577
diff changeset
259 if args and len(args) == 1 and isinstance(args[0], dict) and args[0]:
33807
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
260 args = args[0]
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 self.args = args
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 self.levelname = getLevelName(level)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 self.levelno = level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 self.pathname = pathname
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 try:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 self.filename = os.path.basename(pathname)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 self.module = os.path.splitext(self.filename)[0]
40582
67287ca4e1e8 Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40450
diff changeset
268 except (TypeError, ValueError, AttributeError):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 self.filename = pathname
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 self.module = "Unknown module"
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
271 self.exc_info = exc_info
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
272 self.exc_text = None # used to cache the traceback text
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
273 self.stack_info = sinfo
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 self.lineno = lineno
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
275 self.funcName = func
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 self.created = ct
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 40643
diff changeset
277 self.msecs = (ct - int(ct)) * 1000
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 self.relativeCreated = (self.created - _startTime) * 1000
36974
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
279 if logThreads and thread:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 self.thread = thread.get_ident()
48747
1fdfa382ae13 Merged revisions 65824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48321
diff changeset
281 self.threadName = threading.current_thread().name
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 self.thread = None
34858
2ea3d6915204 Added threadName and now using re-entrant lock
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34744
diff changeset
284 self.threadName = None
56368
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
285 if not logMultiprocessing:
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
286 self.processName = None
50883
9ecbd9a101d8 merge cl r68737 to py3k
Jesse Noller <jnoller@gmail.com>
parents: 50074
diff changeset
287 else:
56548
d9630517c70c Issue #7120: logging: Removed import of multiprocessing which is causing crash in GAE.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 56442
diff changeset
288 self.processName = 'MainProcess'
60506
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
289 mp = sys.modules.get('multiprocessing')
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
290 if mp is not None:
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
291 # Errors may occur if multiprocessing has not finished loading
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
292 # yet - e.g. if a custom import hook causes third-party code
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
293 # to run when multiprocessing calls import. See issue 8200
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
294 # for an example
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
295 try:
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
296 self.processName = mp.current_process().name
74613
e506848d6381 Closes #13859: Replaced reference to StandardError with reference to Exception. Thanks to Matt Joiner for spotting this and submitting a patch.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74539
diff changeset
297 except Exception:
60506
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
298 pass
36974
29e6e7a107de Added logThreads and logProcesses to allow conditional omission of logging this information
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36469
diff changeset
299 if logProcesses and hasattr(os, 'getpid'):
28019
32a0c2f422f1 getpid doesn't exist on MacOS9.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27932
diff changeset
300 self.process = os.getpid()
32a0c2f422f1 getpid doesn't exist on MacOS9.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27932
diff changeset
301 else:
32a0c2f422f1 getpid doesn't exist on MacOS9.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27932
diff changeset
302 self.process = None
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
303
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
304 def __str__(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 return '<LogRecord: %s, %s, %s, %s, "%s">'%(self.name, self.levelno,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 self.pathname, self.lineno, self.msg)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
307
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 def getMessage(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
309 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 Return the message for this LogRecord.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
311
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 Return the message for this LogRecord after merging any user-supplied
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 arguments with the message.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 """
64327
08f7ae10cc79 Removed _unicode variable which is always False in Python 3.x.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64325
diff changeset
315 msg = str(self.msg)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 if self.args:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 msg = msg % self.args
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 return msg
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
319
65541
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
320 #
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
321 # Determine which class to use when instantiating log records.
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
322 #
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
323 _logRecordFactory = LogRecord
65541
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
324
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
325 def setLogRecordFactory(factory):
65541
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
326 """
66640
94fa53b58ee5 logging: tidied up some docstrings.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66638
diff changeset
327 Set the factory to be used when instantiating a log record.
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
328
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
329 :param factory: A callable which will be called to instantiate
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
330 a log record.
65541
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
331 """
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
332 global _logRecordFactory
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
333 _logRecordFactory = factory
65541
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
334
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
335 def getLogRecordFactory():
65541
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
336 """
66640
94fa53b58ee5 logging: tidied up some docstrings.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66638
diff changeset
337 Return the factory to be used when instantiating a log record.
65541
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
338 """
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
339
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
340 return _logRecordFactory
65541
ad8923760d5c logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65214
diff changeset
341
29624
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
342 def makeLogRecord(dict):
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
343 """
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
344 Make a LogRecord whose attributes are defined by the specified dictionary,
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
345 This function is useful for converting a logging event received over
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
346 a socket connection (which is sent as a dictionary) into a LogRecord
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
347 instance.
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
348 """
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
349 rv = _logRecordFactory(None, None, "", 0, "", (), None, None)
29624
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
350 rv.__dict__.update(dict)
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
351 return rv
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
352
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
353 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
354 # Formatter classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
356
65647
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
357 class PercentStyle(object):
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
358
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
359 default_format = '%(message)s'
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
360 asctime_format = '%(asctime)s'
68174
907d5b2ed5a1 Issue #11330: asctime format bug fixed.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66819
diff changeset
361 asctime_search = '%(asctime)'
65647
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
362
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
363 def __init__(self, fmt):
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
364 self._fmt = fmt or self.default_format
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
365
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
366 def usesTime(self):
68174
907d5b2ed5a1 Issue #11330: asctime format bug fixed.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66819
diff changeset
367 return self._fmt.find(self.asctime_search) >= 0
65647
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
368
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
369 def format(self, record):
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
370 return self._fmt % record.__dict__
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
371
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
372 class StrFormatStyle(PercentStyle):
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
373 default_format = '{message}'
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
374 asctime_format = '{asctime}'
68174
907d5b2ed5a1 Issue #11330: asctime format bug fixed.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66819
diff changeset
375 asctime_search = '{asctime'
65647
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
376
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
377 def format(self, record):
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
378 return self._fmt.format(**record.__dict__)
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
379
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
380
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
381 class StringTemplateStyle(PercentStyle):
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
382 default_format = '${message}'
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
383 asctime_format = '${asctime}'
68181
6a8fa2e9b105 Issue #11330: Updated tests for correct asctime handling.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 68176
diff changeset
384 asctime_search = '${asctime}'
65647
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
385
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
386 def __init__(self, fmt):
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
387 self._fmt = fmt or self.default_format
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
388 self._tpl = Template(self._fmt)
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
389
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
390 def usesTime(self):
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
391 fmt = self._fmt
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
392 return fmt.find('$asctime') >= 0 or fmt.find(self.asctime_format) >= 0
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
393
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
394 def format(self, record):
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
395 return self._tpl.substitute(**record.__dict__)
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
396
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
397 _STYLES = {
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
398 '%': PercentStyle,
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
399 '{': StrFormatStyle,
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
400 '$': StringTemplateStyle
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
401 }
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
402
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
403 class Formatter(object):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
404 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
405 Formatter instances are used to convert a LogRecord to text.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
406
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
407 Formatters need to know how a LogRecord is constructed. They are
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
408 responsible for converting a LogRecord to (usually) a string which can
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
409 be interpreted by either a human or an external system. The base Formatter
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
410 allows a formatting string to be specified. If none is supplied, the
65560
e711b858617b logging: Made StreamHandler terminator configurable.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65550
diff changeset
411 default value of "%s(message)" is used.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
412
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
413 The Formatter can be initialized with a format string which makes use of
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
414 knowledge of the LogRecord attributes - e.g. the default value mentioned
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
415 above makes use of the fact that the user's message and arguments are pre-
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
416 formatted into a LogRecord's message attribute. Currently, the useful
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
417 attributes in a LogRecord are described by:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
418
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
419 %(name)s Name of the logger (logging channel)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
420 %(levelno)s Numeric logging level for the message (DEBUG, INFO,
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
421 WARNING, ERROR, CRITICAL)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
422 %(levelname)s Text logging level for the message ("DEBUG", "INFO",
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
423 "WARNING", "ERROR", "CRITICAL")
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
424 %(pathname)s Full pathname of the source file where the logging
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
425 call was issued (if available)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
426 %(filename)s Filename portion of pathname
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
427 %(module)s Module (name portion of filename)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
428 %(lineno)d Source line number where the logging call was issued
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
429 (if available)
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
430 %(funcName)s Function name
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
431 %(created)f Time when the LogRecord was created (time.time()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
432 return value)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
433 %(asctime)s Textual time when the LogRecord was created
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
434 %(msecs)d Millisecond portion of the creation time
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
435 %(relativeCreated)d Time in milliseconds when the LogRecord was created,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
436 relative to the time the logging module was loaded
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
437 (typically at application startup time)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
438 %(thread)d Thread ID (if available)
34858
2ea3d6915204 Added threadName and now using re-entrant lock
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34744
diff changeset
439 %(threadName)s Thread name (if available)
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
440 %(process)d Process ID (if available)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
441 %(message)s The result of record.getMessage(), computed just as
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
442 the record is emitted
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
443 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
444
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
445 converter = time.localtime
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
446
65634
3a9c3ec5e9d2 logging: Added style option to Formatter to allow %, {} or himBHformatting.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65560
diff changeset
447 def __init__(self, fmt=None, datefmt=None, style='%'):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
448 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
449 Initialize the formatter with specified format strings.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
450
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
451 Initialize the formatter either with the specified format string, or a
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
452 default as described above. Allow for specialized date formatting with
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
453 the optional datefmt argument (if omitted, you get the ISO8601 format).
65634
3a9c3ec5e9d2 logging: Added style option to Formatter to allow %, {} or himBHformatting.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65560
diff changeset
454
3a9c3ec5e9d2 logging: Added style option to Formatter to allow %, {} or himBHformatting.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65560
diff changeset
455 Use a style parameter of '%', '{' or '$' to specify that you want to
3a9c3ec5e9d2 logging: Added style option to Formatter to allow %, {} or himBHformatting.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65560
diff changeset
456 use one of %-formatting, :meth:`str.format` (``{}``) formatting or
3a9c3ec5e9d2 logging: Added style option to Formatter to allow %, {} or himBHformatting.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65560
diff changeset
457 :class:`string.Template` formatting in your format string.
3a9c3ec5e9d2 logging: Added style option to Formatter to allow %, {} or himBHformatting.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65560
diff changeset
458
3a9c3ec5e9d2 logging: Added style option to Formatter to allow %, {} or himBHformatting.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65560
diff changeset
459 .. versionchanged: 3.2
3a9c3ec5e9d2 logging: Added style option to Formatter to allow %, {} or himBHformatting.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65560
diff changeset
460 Added the ``style`` parameter.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
461 """
65647
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
462 if style not in _STYLES:
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
463 raise ValueError('Style must be one of: %s' % ','.join(
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
464 _STYLES.keys()))
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
465 self._style = _STYLES[style](fmt)
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
466 self._fmt = self._style._fmt
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
467 self.datefmt = datefmt
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
468
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
469 def formatTime(self, record, datefmt=None):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
470 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
471 Return the creation time of the specified LogRecord as formatted text.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
472
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
473 This method should be called from format() by a formatter which
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
474 wants to make use of a formatted time. This method can be overridden
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
475 in formatters to provide for any specific requirement, but the
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
476 basic behaviour is as follows: if datefmt (a string) is specified,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
477 it is used with time.strftime() to format the creation time of the
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
478 record. Otherwise, the ISO8601 format is used. The resulting
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
479 string is returned. This function uses a user-configurable function
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
480 to convert the creation time to a tuple. By default, time.localtime()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
481 is used; to change this for a particular formatter instance, set the
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
482 'converter' attribute to a function with the same signature as
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
483 time.localtime() or time.gmtime(). To change it for all formatters,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
484 for example if you want all logging times to be shown in GMT,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
485 set the 'converter' attribute in the Formatter class.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
486 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
487 ct = self.converter(record.created)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
488 if datefmt:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
489 s = time.strftime(datefmt, ct)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
490 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
491 t = time.strftime("%Y-%m-%d %H:%M:%S", ct)
65634
3a9c3ec5e9d2 logging: Added style option to Formatter to allow %, {} or himBHformatting.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65560
diff changeset
492 s = "%s,%03d" % (t, record.msecs) # the use of % here is internal
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
493 return s
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
494
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
495 def formatException(self, ei):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
496 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
497 Format and return the specified exception information as a string.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
498
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
499 This default implementation just uses
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
500 traceback.print_exception()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
501 """
42501
f6069f9dd52d SF patch# 1770008 by Christian Heimes (plus some extras).
Guido van Rossum <guido@python.org>
parents: 42132
diff changeset
502 sio = io.StringIO()
64323
4743738ccafe Improved logging.Formatter date/time formatting documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64247
diff changeset
503 tb = ei[2]
4743738ccafe Improved logging.Formatter date/time formatting documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64247
diff changeset
504 # See issues #9427, #1553375. Commented out for now.
4743738ccafe Improved logging.Formatter date/time formatting documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64247
diff changeset
505 #if getattr(self, 'fullstack', False):
4743738ccafe Improved logging.Formatter date/time formatting documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64247
diff changeset
506 # traceback.print_stack(tb.tb_frame.f_back, file=sio)
4743738ccafe Improved logging.Formatter date/time formatting documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64247
diff changeset
507 traceback.print_exception(ei[0], ei[1], tb, None, sio)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
508 s = sio.getvalue()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
509 sio.close()
42132
863ed7cd45dc Merged revisions 56020-56124 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41986
diff changeset
510 if s[-1:] == "\n":
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
511 s = s[:-1]
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
512 return s
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
513
59600
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
514 def usesTime(self):
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
515 """
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
516 Check if the format uses the creation time of the record.
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
517 """
65647
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
518 return self._style.usesTime()
59600
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
519
65635
2352e5e44053 logging: Formatter implementation tweak.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65634
diff changeset
520 def formatMessage(self, record):
65647
841892e271f7 logging: Improved Formatter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65635
diff changeset
521 return self._style.format(record)
65635
2352e5e44053 logging: Formatter implementation tweak.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65634
diff changeset
522
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
523 def formatStack(self, stack_info):
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
524 """
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
525 This method is provided as an extension point for specialized
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
526 formatting of stack information.
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
527
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
528 The input data is a string as returned from a call to
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
529 :func:`traceback.print_stack`, but with the last trailing newline
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
530 removed.
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
531
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
532 The base implementation just returns the value passed in.
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
533 """
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
534 return stack_info
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
535
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
536 def format(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
537 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
538 Format the specified record as text.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
539
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
540 The record's attribute dictionary is used as the operand to a
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
541 string formatting operation which yields the returned string.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
542 Before formatting the dictionary, a couple of preparatory steps
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
543 are carried out. The message attribute of the record is computed
59600
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
544 using LogRecord.getMessage(). If the formatting string uses the
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
545 time (as determined by a call to usesTime(), formatTime() is
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
546 called to format the event time. If there is exception information,
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
547 it is formatted using formatException() and appended to the message.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
548 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
549 record.message = record.getMessage()
59600
9696932ad827 Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59142
diff changeset
550 if self.usesTime():
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
551 record.asctime = self.formatTime(record, self.datefmt)
65635
2352e5e44053 logging: Formatter implementation tweak.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65634
diff changeset
552 s = self.formatMessage(record)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
553 if record.exc_info:
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
554 # Cache the traceback text to avoid converting it multiple times
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
555 # (it's constant anyway)
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
556 if not record.exc_text:
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
557 record.exc_text = self.formatException(record.exc_info)
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
558 if record.exc_text:
42132
863ed7cd45dc Merged revisions 56020-56124 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41986
diff changeset
559 if s[-1:] != "\n":
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
560 s = s + "\n"
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
561 s = s + record.exc_text
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
562 if record.stack_info:
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
563 if s[-1:] != "\n":
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
564 s = s + "\n"
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
565 s = s + self.formatStack(record.stack_info)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
566 return s
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
567
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
568 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
569 # The default formatter to use when no other is specified
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
570 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
571 _defaultFormatter = Formatter()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
572
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
573 class BufferingFormatter(object):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
574 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
575 A formatter suitable for formatting a number of records.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
576 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
577 def __init__(self, linefmt=None):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
578 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
579 Optionally specify a formatter which will be used to format each
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
580 individual record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
581 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
582 if linefmt:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
583 self.linefmt = linefmt
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
584 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
585 self.linefmt = _defaultFormatter
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
586
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
587 def formatHeader(self, records):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
588 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
589 Return the header string for the specified records.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
590 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
591 return ""
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
592
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
593 def formatFooter(self, records):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
594 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
595 Return the footer string for the specified records.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
596 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
597 return ""
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
598
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
599 def format(self, records):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
600 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
601 Format the specified records and return the result as a string.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
602 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
603 rv = ""
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
604 if len(records) > 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
605 rv = rv + self.formatHeader(records)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
606 for record in records:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
607 rv = rv + self.linefmt.format(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
608 rv = rv + self.formatFooter(records)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
609 return rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
610
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
611 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
612 # Filter classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
613 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
614
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
615 class Filter(object):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
616 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
617 Filter instances are used to perform arbitrary filtering of LogRecords.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
618
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
619 Loggers and Handlers can optionally use Filter instances to filter
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
620 records as desired. The base filter class only allows events which are
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
621 below a certain point in the logger hierarchy. For example, a filter
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
622 initialized with "A.B" will allow events logged by loggers "A.B",
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
623 "A.B.C", "A.B.C.D", "A.B.D" etc. but not "A.BB", "B.A.B" etc. If
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
624 initialized with the empty string, all events are passed.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
625 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
626 def __init__(self, name=''):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
627 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
628 Initialize a filter.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
629
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
630 Initialize with the name of the logger which, together with its
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
631 children, will have its events allowed through the filter. If no
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
632 name is specified, allow every event.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
633 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
634 self.name = name
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
635 self.nlen = len(name)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
636
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
637 def filter(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
638 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
639 Determine if the specified record is to be logged.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
640
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
641 Is the specified record to be logged? Returns 0 for no, nonzero for
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
642 yes. If deemed appropriate, the record may be modified in-place.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
643 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
644 if self.nlen == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
645 return 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
646 elif self.name == record.name:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
647 return 1
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40893
diff changeset
648 elif record.name.find(self.name, 0, self.nlen) != 0:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
649 return 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
650 return (record.name[self.nlen] == ".")
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
651
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
652 class Filterer(object):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
653 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
654 A base class for loggers and handlers which allows them to share
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
655 common code.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
656 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
657 def __init__(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
658 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
659 Initialize the list of filters to be an empty list.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
660 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
661 self.filters = []
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
662
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
663 def addFilter(self, filter):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
664 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
665 Add the specified filter to this handler.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
666 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
667 if not (filter in self.filters):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
668 self.filters.append(filter)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
669
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
670 def removeFilter(self, filter):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
671 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
672 Remove the specified filter from this handler.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
673 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
674 if filter in self.filters:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
675 self.filters.remove(filter)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
676
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
677 def filter(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
678 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
679 Determine if a record is loggable by consulting all the filters.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
680
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
681 The default is to allow the record to be logged; any filter can veto
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
682 this and the record is then dropped. Returns a zero value if a record
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
683 is to be dropped, else non-zero.
65547
e11ac30199b1 logging: Allowed filters to be just callables.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65546
diff changeset
684
e11ac30199b1 logging: Allowed filters to be just callables.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65546
diff changeset
685 .. versionchanged: 3.2
e11ac30199b1 logging: Allowed filters to be just callables.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65546
diff changeset
686
e11ac30199b1 logging: Allowed filters to be just callables.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65546
diff changeset
687 Allow filters to be just callables.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
688 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
689 rv = 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
690 for f in self.filters:
65547
e11ac30199b1 logging: Allowed filters to be just callables.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65546
diff changeset
691 if hasattr(f, 'filter'):
e11ac30199b1 logging: Allowed filters to be just callables.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65546
diff changeset
692 result = f.filter(record)
e11ac30199b1 logging: Allowed filters to be just callables.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65546
diff changeset
693 else:
65550
962e1f4c9c00 logging: Documented usage of callables as filters.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65547
diff changeset
694 result = f(record) # assume callable - will raise if not
65547
e11ac30199b1 logging: Allowed filters to be just callables.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65546
diff changeset
695 if not result:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
696 rv = 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
697 break
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
698 return rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
699
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
700 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
701 # Handler classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
702 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
703
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
704 _handlers = weakref.WeakValueDictionary() #map of handler names to handlers
35526
336b664a2210 Added _handlerList to allow shutdown to flush and close handlers in reverse order of creation (see SF# 1282539)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35512
diff changeset
705 _handlerList = [] # added to allow handlers to be removed in reverse of order initialized
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
706
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
707 def _removeHandlerRef(wr):
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
708 """
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
709 Remove a handler reference from the internal cleanup list.
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
710 """
64247
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
711 # This function can be called during module teardown, when globals are
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
712 # set to None. If _acquireLock is None, assume this is the case and do
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
713 # nothing.
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
714 if _acquireLock is not None:
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
715 _acquireLock()
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
716 try:
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
717 if wr in _handlerList:
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
718 _handlerList.remove(wr)
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
719 finally:
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
720 _releaseLock()
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
721
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
722 def _addHandlerRef(handler):
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
723 """
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
724 Add a handler to the internal cleanup list using a weak reference.
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
725 """
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
726 _acquireLock()
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
727 try:
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
728 _handlerList.append(weakref.ref(handler, _removeHandlerRef))
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
729 finally:
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
730 _releaseLock()
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
731
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
732 class Handler(Filterer):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
733 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
734 Handler instances dispatch logging events to specific destinations.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
735
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
736 The base handler class. Acts as a placeholder which defines the Handler
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
737 interface. Handlers can optionally use Formatter instances to format
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
738 records as desired. By default, no formatter is specified; in this case,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
739 the 'raw' message as determined by record.message is logged.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
740 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
741 def __init__(self, level=NOTSET):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
742 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
743 Initializes the instance - basically setting the formatter to None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
744 and the filter list to empty.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
745 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
746 Filterer.__init__(self)
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
747 self._name = None
55242
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
748 self.level = _checkLevel(level)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
749 self.formatter = None
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
750 # Add the handler to the global _handlerList (for cleanup on shutdown)
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
751 _addHandlerRef(self)
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
752 self.createLock()
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
753
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
754 def get_name(self):
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
755 return self._name
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
756
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
757 def set_name(self, name):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
758 _acquireLock()
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
759 try:
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
760 if self._name in _handlers:
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
761 del _handlers[self._name]
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
762 self._name = name
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
763 if name:
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
764 _handlers[name] = self
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
765 finally:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
766 _releaseLock()
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
767
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
768 name = property(get_name, set_name)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
769
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
770 def createLock(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
771 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
772 Acquire a thread lock for serializing access to the underlying I/O.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
773 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
774 if thread:
34858
2ea3d6915204 Added threadName and now using re-entrant lock
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34744
diff changeset
775 self.lock = threading.RLock()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
776 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
777 self.lock = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
778
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
779 def acquire(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
780 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
781 Acquire the I/O thread lock.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
782 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
783 if self.lock:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
784 self.lock.acquire()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
785
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
786 def release(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
787 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
788 Release the I/O thread lock.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
789 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
790 if self.lock:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
791 self.lock.release()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
792
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
793 def setLevel(self, level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
794 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
795 Set the logging level of this handler.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
796 """
55242
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
797 self.level = _checkLevel(level)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
798
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
799 def format(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
800 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
801 Format the specified record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
802
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
803 If a formatter is set, use it. Otherwise, use the default formatter
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
804 for the module.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
805 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
806 if self.formatter:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
807 fmt = self.formatter
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
808 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
809 fmt = _defaultFormatter
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
810 return fmt.format(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
811
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
812 def emit(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
813 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
814 Do whatever it takes to actually log the specified logging record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
815
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
816 This version is intended to be implemented by subclasses and so
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
817 raises a NotImplementedError.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
818 """
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42775
diff changeset
819 raise NotImplementedError('emit must be implemented '
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42775
diff changeset
820 'by Handler subclasses')
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
821
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
822 def handle(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
823 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
824 Conditionally emit the specified logging record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
825
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
826 Emission depends on filters which may have been added to the handler.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
827 Wrap the actual emission of the record with acquisition/release of
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
828 the I/O thread lock. Returns whether the filter passed the record for
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
829 emission.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
830 """
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
831 rv = self.filter(record)
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
832 if rv:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
833 self.acquire()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
834 try:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
835 self.emit(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
836 finally:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
837 self.release()
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
838 return rv
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
839
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
840 def setFormatter(self, fmt):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
841 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
842 Set the formatter for this handler.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
843 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
844 self.formatter = fmt
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
845
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
846 def flush(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
847 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
848 Ensure all logging output has been flushed.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
849
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
850 This version does nothing and is intended to be implemented by
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
851 subclasses.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
852 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
853 pass
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
854
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
855 def close(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
856 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
857 Tidy up any resources used by the handler.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
858
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
859 This version removes the handler from an internal map of handlers,
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
860 _handlers, which is used for handler lookup by name. Subclasses
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
861 should ensure that this gets called from overridden close()
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
862 methods.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
863 """
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
864 #get the module data lock, as we're updating a shared structure.
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
865 _acquireLock()
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
866 try: #unlikely to raise an exception, but you never know...
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
867 if self._name and self._name in _handlers:
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
868 del _handlers[self._name]
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
869 finally:
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
870 _releaseLock()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
871
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
872 def handleError(self, record):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
873 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
874 Handle errors which occur during an emit() call.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
875
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
876 This method should be called from handlers when an exception is
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
877 encountered during an emit() call. If raiseExceptions is false,
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
878 exceptions get silently ignored. This is what is mostly wanted
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
879 for a logging system - most users will not care about errors in
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
880 the logging system, they are more interested in application errors.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
881 You could, however, replace this with a custom handler if you wish.
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
882 The record which was being processed is passed in to this method.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
883 """
74538
73dad4940b88 Closes #13807: Now checks for sys.stderr being there before writing to it.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 68335
diff changeset
884 if raiseExceptions and sys.stderr: # see issue 13807
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
885 ei = sys.exc_info()
54501
ced380b40004 Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53920
diff changeset
886 try:
59142
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
887 traceback.print_exception(ei[0], ei[1], ei[2],
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
888 None, sys.stderr)
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
889 sys.stderr.write('Logged from file %s, line %s\n' % (
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
890 record.filename, record.lineno))
54501
ced380b40004 Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53920
diff changeset
891 except IOError:
ced380b40004 Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53920
diff changeset
892 pass # see issue 5971
ced380b40004 Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53920
diff changeset
893 finally:
ced380b40004 Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53920
diff changeset
894 del ei
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
895
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
896 class StreamHandler(Handler):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
897 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
898 A handler class which writes logging records, appropriately formatted,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
899 to a stream. Note that this class does not close the stream, as
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
900 sys.stdout or sys.stderr may be used.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
901 """
48946
3b9608118f8d Merged revisions 66045,66048-66049,66053,66060,66062-66063,66065,66067,66071-66074,66080,66082-66083,66090-66093,66097-66099,66103,66105,66110,66118 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48747
diff changeset
902
65560
e711b858617b logging: Made StreamHandler terminator configurable.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65550
diff changeset
903 terminator = '\n'
e711b858617b logging: Made StreamHandler terminator configurable.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65550
diff changeset
904
56368
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
905 def __init__(self, stream=None):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
906 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
907 Initialize the handler.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
908
56368
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
909 If stream is not specified, sys.stderr is used.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
910 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
911 Handler.__init__(self)
56368
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
912 if stream is None:
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
913 stream = sys.stderr
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
914 self.stream = stream
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
915
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
916 def flush(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
917 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
918 Flushes the stream.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
919 """
75221
344b4737d2fe Fix added for recent changes in non-threading environments.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 75211
diff changeset
920 self.acquire()
344b4737d2fe Fix added for recent changes in non-threading environments.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 75211
diff changeset
921 try:
75211
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
922 if self.stream and hasattr(self.stream, "flush"):
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
923 self.stream.flush()
75221
344b4737d2fe Fix added for recent changes in non-threading environments.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 75211
diff changeset
924 finally:
344b4737d2fe Fix added for recent changes in non-threading environments.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 75211
diff changeset
925 self.release()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
926
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
927 def emit(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
928 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
929 Emit a record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
930
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
931 If a formatter is specified, it is used to format the record.
48946
3b9608118f8d Merged revisions 66045,66048-66049,66053,66060,66062-66063,66065,66067,66071-66074,66080,66082-66083,66090-66093,66097-66099,66103,66105,66110,66118 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48747
diff changeset
932 The record is then written to the stream with a trailing newline. If
3b9608118f8d Merged revisions 66045,66048-66049,66053,66060,66062-66063,66065,66067,66071-66074,66080,66082-66083,66090-66093,66097-66099,66103,66105,66110,66118 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48747
diff changeset
933 exception information is present, it is formatted using
3b9608118f8d Merged revisions 66045,66048-66049,66053,66060,66062-66063,66065,66067,66071-66074,66080,66082-66083,66090-66093,66097-66099,66103,66105,66110,66118 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48747
diff changeset
934 traceback.print_exception and appended to the stream. If the stream
53920
7a9e081ece4c Merged revisions 70768,71657,71721,71729,71794,71976,72036-72037,72079,72085,72131-72134,72191,72197-72198,72219,72221,72225,72303,72434,72467,72476 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53505
diff changeset
935 has an 'encoding' attribute, it is used to determine how to do the
48946
3b9608118f8d Merged revisions 66045,66048-66049,66053,66060,66062-66063,66065,66067,66071-66074,66080,66082-66083,66090-66093,66097-66099,66103,66105,66110,66118 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48747
diff changeset
936 output to the stream.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
937 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
938 try:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
939 msg = self.format(record)
51579
648e07dd0825 Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50954
diff changeset
940 stream = self.stream
65560
e711b858617b logging: Made StreamHandler terminator configurable.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65550
diff changeset
941 stream.write(msg)
e711b858617b logging: Made StreamHandler terminator configurable.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65550
diff changeset
942 stream.write(self.terminator)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
943 self.flush()
35816
a000f322dd05 Exception handling now raises KeyboardInterrupt and SystemExit rather than passing to handleError
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35787
diff changeset
944 except (KeyboardInterrupt, SystemExit):
a000f322dd05 Exception handling now raises KeyboardInterrupt and SystemExit rather than passing to handleError
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35787
diff changeset
945 raise
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
946 except:
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
947 self.handleError(record)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
948
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
949 class FileHandler(StreamHandler):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
950 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
951 A handler class which writes formatted logging records to disk files.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
952 """
44914
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
953 def __init__(self, filename, mode='a', encoding=None, delay=0):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
954 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
955 Open the specified file and use it as the stream for logging.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
956 """
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
957 #keep the absolute path, otherwise derived classes which use this
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
958 #may come a cropper when the current directory changes
34744
3d97eb3b7cec Added optional encoding argument to file handlers. Made traceback import unconditional, to avoid lock contention problems which occur when logging from custom importers (SF patch #1158052)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34612
diff changeset
959 if codecs is None:
3d97eb3b7cec Added optional encoding argument to file handlers. Made traceback import unconditional, to avoid lock contention problems which occur when logging from custom importers (SF patch #1158052)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34612
diff changeset
960 encoding = None
32546
d42749db9339 FileHandler now stores the basename as an absolute path (fix for SF #982049)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32528
diff changeset
961 self.baseFilename = os.path.abspath(filename)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
962 self.mode = mode
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
963 self.encoding = encoding
44914
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
964 if delay:
50954
66928dad81ca Issue 5013: Fixed bug in FileHandler when delay was set - added fix for RotatingFileHandler and changed header comment slightly.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50883
diff changeset
965 #We don't open the stream, but we still need to call the
66928dad81ca Issue 5013: Fixed bug in FileHandler when delay was set - added fix for RotatingFileHandler and changed header comment slightly.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50883
diff changeset
966 #Handler constructor to set level, formatter, lock etc.
66928dad81ca Issue 5013: Fixed bug in FileHandler when delay was set - added fix for RotatingFileHandler and changed header comment slightly.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50883
diff changeset
967 Handler.__init__(self)
44914
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
968 self.stream = None
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
969 else:
50954
66928dad81ca Issue 5013: Fixed bug in FileHandler when delay was set - added fix for RotatingFileHandler and changed header comment slightly.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50883
diff changeset
970 StreamHandler.__init__(self, self._open())
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
971
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
972 def close(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
973 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
974 Closes the stream.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
975 """
75221
344b4737d2fe Fix added for recent changes in non-threading environments.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 75211
diff changeset
976 self.acquire()
344b4737d2fe Fix added for recent changes in non-threading environments.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 75211
diff changeset
977 try:
75211
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
978 if self.stream:
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
979 self.flush()
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
980 if hasattr(self.stream, "close"):
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
981 self.stream.close()
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
982 StreamHandler.close(self)
b2adcd90e656 logging: Added locking in flush() and close() handler methods. Thanks to Fayaz Yusuf Khan for the suggestion.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74814
diff changeset
983 self.stream = None
75221
344b4737d2fe Fix added for recent changes in non-threading environments.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 75211
diff changeset
984 finally:
344b4737d2fe Fix added for recent changes in non-threading environments.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 75211
diff changeset
985 self.release()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
986
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
987 def _open(self):
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
988 """
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
989 Open the current base file with the (original) mode and encoding.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
990 Return the resulting stream.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
991 """
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
992 if self.encoding is None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
993 stream = open(self.baseFilename, self.mode)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
994 else:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
995 stream = codecs.open(self.baseFilename, self.mode, self.encoding)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
996 return stream
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40582
diff changeset
997
44914
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
998 def emit(self, record):
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
999 """
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
1000 Emit a record.
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
1001
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
1002 If the stream was not opened because 'delay' was specified in the
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
1003 constructor, open it before calling the superclass's emit.
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
1004 """
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
1005 if self.stream is None:
50954
66928dad81ca Issue 5013: Fixed bug in FileHandler when delay was set - added fix for RotatingFileHandler and changed header comment slightly.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50883
diff changeset
1006 self.stream = self._open()
44914
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
1007 StreamHandler.emit(self, record)
c33f2779a938 Merged revisions 60234-60244 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44748
diff changeset
1008
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1009 class _StderrHandler(StreamHandler):
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1010 """
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1011 This class is like a StreamHandler using sys.stderr, but always uses
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1012 whatever sys.stderr is currently set to rather than the value of
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1013 sys.stderr at handler construction time.
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1014 """
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1015 def __init__(self, level=NOTSET):
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1016 """
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1017 Initialize the handler.
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1018 """
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1019 Handler.__init__(self, level)
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1020
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1021 @property
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1022 def stream(self):
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1023 return sys.stderr
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1024
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1025
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1026 _defaultLastResort = _StderrHandler(WARNING)
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1027 lastResort = _defaultLastResort
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1028
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1029 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1030 # Manager classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1031 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1032
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
1033 class PlaceHolder(object):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1034 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1035 PlaceHolder instances are used in the Manager logger hierarchy to take
31597
05e1c27c0a74 Minor documentation changes
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31575
diff changeset
1036 the place of nodes for which no loggers have been defined. This class is
05e1c27c0a74 Minor documentation changes
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31575
diff changeset
1037 intended for internal use only and not as part of the public API.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1038 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1039 def __init__(self, alogger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1040 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1041 Initialize with the specified logger being a child of this placeholder.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1042 """
35721
cda87357185f Optimised Placeholders handling of child loggers by using a dict rather than a list (much slower in the pathological case of hundreds of child Loggers to a Placeholder - problem reported by Ryan Blazecka).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35703
diff changeset
1043 self.loggerMap = { alogger : None }
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1044
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1045 def append(self, alogger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1046 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1047 Add the specified logger as a child of this placeholder.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1048 """
39589
d240ce5696f9 More has_key() fixes.
Guido van Rossum <guido@python.org>
parents: 38453
diff changeset
1049 if alogger not in self.loggerMap:
35721
cda87357185f Optimised Placeholders handling of child loggers by using a dict rather than a list (much slower in the pathological case of hundreds of child Loggers to a Placeholder - problem reported by Ryan Blazecka).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35703
diff changeset
1050 self.loggerMap[alogger] = None
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1051
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1052 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1053 # Determine which class to use when instantiating loggers.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1054 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1055 _loggerClass = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1056
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1057 def setLoggerClass(klass):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1058 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1059 Set the class to be used when instantiating a logger. The class should
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1060 define __init__() such that only a name argument is required, and the
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1061 __init__() should call Logger.__init__()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1062 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1063 if klass != Logger:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1064 if not issubclass(klass, Logger):
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42775
diff changeset
1065 raise TypeError("logger not derived from logging.Logger: "
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42775
diff changeset
1066 + klass.__name__)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1067 global _loggerClass
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1068 _loggerClass = klass
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1069
33535
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
1070 def getLoggerClass():
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
1071 """
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
1072 Return the class to be used when instantiating a logger.
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
1073 """
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
1074
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
1075 return _loggerClass
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
1076
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
1077 class Manager(object):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1078 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1079 There is [under normal circumstances] just one Manager instance, which
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1080 holds the hierarchy of loggers.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1081 """
26257
f23c35f81033 SF Patch #638825 logging module
Neal Norwitz <nnorwitz@gmail.com>
parents: 26184
diff changeset
1082 def __init__(self, rootnode):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1083 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1084 Initialize the manager with the root node of the logger hierarchy.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1085 """
26257
f23c35f81033 SF Patch #638825 logging module
Neal Norwitz <nnorwitz@gmail.com>
parents: 26184
diff changeset
1086 self.root = rootnode
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1087 self.disable = 0
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1088 self.emittedNoHandlerWarning = False
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1089 self.loggerDict = {}
59142
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1090 self.loggerClass = None
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
1091 self.logRecordFactory = None
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1092
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1093 def getLogger(self, name):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1094 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1095 Get a logger with the specified name (channel name), creating it
33535
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
1096 if it doesn't yet exist. This name is a dot-separated hierarchical
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
1097 name, such as "a", "a.b", "a.b.c" or similar.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1098
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1099 If a PlaceHolder existed for the specified name [i.e. the logger
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1100 didn't exist but a child of it did], replace it with the created
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1101 logger and fix up the parent/child references which pointed to the
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1102 placeholder to now point to the logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1103 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1104 rv = None
73416
a3ba905447ba Closes #13661: Check added for type of logger name.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 71919
diff changeset
1105 if not isinstance(name, str):
73419
bc05c11b340e Closes #13361: Raise correct exception type.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 73416
diff changeset
1106 raise TypeError('A logger name must be a string')
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1107 _acquireLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1108 try:
39589
d240ce5696f9 More has_key() fixes.
Guido van Rossum <guido@python.org>
parents: 38453
diff changeset
1109 if name in self.loggerDict:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1110 rv = self.loggerDict[name]
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1111 if isinstance(rv, PlaceHolder):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1112 ph = rv
59142
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1113 rv = (self.loggerClass or _loggerClass)(name)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1114 rv.manager = self
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1115 self.loggerDict[name] = rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1116 self._fixupChildren(ph, rv)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1117 self._fixupParents(rv)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1118 else:
59142
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1119 rv = (self.loggerClass or _loggerClass)(name)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1120 rv.manager = self
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1121 self.loggerDict[name] = rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1122 self._fixupParents(rv)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1123 finally:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1124 _releaseLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1125 return rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1126
59142
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1127 def setLoggerClass(self, klass):
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1128 """
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1129 Set the class to be used when instantiating a logger with this Manager.
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1130 """
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1131 if klass != Logger:
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1132 if not issubclass(klass, Logger):
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1133 raise TypeError("logger not derived from logging.Logger: "
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1134 + klass.__name__)
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1135 self.loggerClass = klass
e1bc0022b23b Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58758
diff changeset
1136
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
1137 def setLogRecordFactory(self, factory):
65546
c47ef180be39 logging: Added tests for _logRecordClass changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65541
diff changeset
1138 """
66640
94fa53b58ee5 logging: tidied up some docstrings.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66638
diff changeset
1139 Set the factory to be used when instantiating a log record with this
65546
c47ef180be39 logging: Added tests for _logRecordClass changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65541
diff changeset
1140 Manager.
c47ef180be39 logging: Added tests for _logRecordClass changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65541
diff changeset
1141 """
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
1142 self.logRecordFactory = factory
65546
c47ef180be39 logging: Added tests for _logRecordClass changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65541
diff changeset
1143
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1144 def _fixupParents(self, alogger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1145 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1146 Ensure that there are either loggers or placeholders all the way
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1147 from the specified logger to the root of the logger hierarchy.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1148 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1149 name = alogger.name
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40893
diff changeset
1150 i = name.rfind(".")
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1151 rv = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1152 while (i > 0) and not rv:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1153 substr = name[:i]
39589
d240ce5696f9 More has_key() fixes.
Guido van Rossum <guido@python.org>
parents: 38453
diff changeset
1154 if substr not in self.loggerDict:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1155 self.loggerDict[substr] = PlaceHolder(alogger)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1156 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1157 obj = self.loggerDict[substr]
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1158 if isinstance(obj, Logger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1159 rv = obj
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1160 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1161 assert isinstance(obj, PlaceHolder)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1162 obj.append(alogger)
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40893
diff changeset
1163 i = name.rfind(".", 0, i - 1)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1164 if not rv:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1165 rv = self.root
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1166 alogger.parent = rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1167
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1168 def _fixupChildren(self, ph, alogger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1169 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1170 Ensure that children of the placeholder ph are connected to the
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1171 specified logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1172 """
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39648
diff changeset
1173 name = alogger.name
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39648
diff changeset
1174 namelen = len(name)
35721
cda87357185f Optimised Placeholders handling of child loggers by using a dict rather than a list (much slower in the pathological case of hundreds of child Loggers to a Placeholder - problem reported by Ryan Blazecka).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35703
diff changeset
1175 for c in ph.loggerMap.keys():
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39648
diff changeset
1176 #The if means ... if not c.parent.name.startswith(nm)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39648
diff changeset
1177 if c.parent.name[:namelen] != name:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1178 alogger.parent = c.parent
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1179 c.parent = alogger
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1180
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1181 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1182 # Logger classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1183 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1184
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1185 class Logger(Filterer):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1186 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1187 Instances of the Logger class represent a single logging channel. A
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1188 "logging channel" indicates an area of an application. Exactly how an
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1189 "area" is defined is up to the application developer. Since an
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1190 application can have any number of areas, logging channels are identified
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1191 by a unique string. Application areas can be nested (e.g. an area
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1192 of "input processing" might include sub-areas "read CSV files", "read
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1193 XLS files" and "read Gnumeric files"). To cater for this natural nesting,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1194 channel names are organized into a namespace hierarchy where levels are
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1195 separated by periods, much like the Java or Python package namespace. So
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1196 in the instance given above, channel names might be "input" for the upper
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1197 level, and "input.csv", "input.xls" and "input.gnu" for the sub-levels.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1198 There is no arbitrary limit to the depth of nesting.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1199 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1200 def __init__(self, name, level=NOTSET):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1201 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1202 Initialize the logger with a name and an optional level.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1203 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1204 Filterer.__init__(self)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1205 self.name = name
55242
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
1206 self.level = _checkLevel(level)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1207 self.parent = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1208 self.propagate = 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1209 self.handlers = []
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1210 self.disabled = 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1211
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1212 def setLevel(self, level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1213 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1214 Set the logging level of this logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1215 """
55242
8ebb90dc3b04 Issue #6314: logging: Extra checks on the "level" argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 54807
diff changeset
1216 self.level = _checkLevel(level)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1217
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1218 def debug(self, msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1219 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1220 Log 'msg % args' with severity 'DEBUG'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1221
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1222 To pass exception information, use the keyword argument exc_info with
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1223 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1224
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1225 logger.debug("Houston, we have a %s", "thorny problem", exc_info=1)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1226 """
42775
d7517c306791 Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
1227 if self.isEnabledFor(DEBUG):
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1228 self._log(DEBUG, msg, args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1229
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1230 def info(self, msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1231 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1232 Log 'msg % args' with severity 'INFO'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1233
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1234 To pass exception information, use the keyword argument exc_info with
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1235 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1236
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1237 logger.info("Houston, we have a %s", "interesting problem", exc_info=1)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1238 """
42775
d7517c306791 Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
1239 if self.isEnabledFor(INFO):
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1240 self._log(INFO, msg, args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1241
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1242 def warning(self, msg, *args, **kwargs):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1243 """
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1244 Log 'msg % args' with severity 'WARNING'.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1245
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1246 To pass exception information, use the keyword argument exc_info with
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1247 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1248
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1249 logger.warning("Houston, we have a %s", "bit of a problem", exc_info=1)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1250 """
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1251 if self.isEnabledFor(WARNING):
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1252 self._log(WARNING, msg, args, **kwargs)
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1253
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1254 warn = warning
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1255
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1256 def error(self, msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1257 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1258 Log 'msg % args' with severity 'ERROR'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1259
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1260 To pass exception information, use the keyword argument exc_info with
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1261 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1262
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1263 logger.error("Houston, we have a %s", "major problem", exc_info=1)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1264 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1265 if self.isEnabledFor(ERROR):
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1266 self._log(ERROR, msg, args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1267
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1268 def exception(self, msg, *args, **kwargs):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1269 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1270 Convenience method for logging an ERROR with exception information.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1271 """
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1272 kwargs['exc_info'] = True
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1273 self.error(msg, *args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1274
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1275 def critical(self, msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1276 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1277 Log 'msg % args' with severity 'CRITICAL'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1278
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1279 To pass exception information, use the keyword argument exc_info with
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1280 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1281
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1282 logger.critical("Houston, we have a %s", "major disaster", exc_info=1)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1283 """
42775
d7517c306791 Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
1284 if self.isEnabledFor(CRITICAL):
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1285 self._log(CRITICAL, msg, args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1286
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1287 fatal = critical
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1288
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1289 def log(self, level, msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1290 """
32955
e2fea22e0c51 Updated Logger.log() docstring to clarify that lvl parameter should be an integer.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32856
diff changeset
1291 Log 'msg % args' with the integer severity 'level'.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1292
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1293 To pass exception information, use the keyword argument exc_info with
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1294 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1295
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1296 logger.log(level, "We have a %s", "mysterious problem", exc_info=1)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1297 """
41986
6464cc638faa Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
1298 if not isinstance(level, int):
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1299 if raiseExceptions:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42775
diff changeset
1300 raise TypeError("level must be an integer")
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1301 else:
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1302 return
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1303 if self.isEnabledFor(level):
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1304 self._log(level, msg, args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1305
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1306 def findCaller(self, stack_info=False):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1307 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1308 Find the stack frame of the caller so that we can note the source
34612
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
1309 file name, line number and function name.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1310 """
56368
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
1311 f = currentframe()
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
1312 #On some versions of IronPython, currentframe() returns None if
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
1313 #IronPython isn't run with -X:Frames.
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
1314 if f is not None:
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
1315 f = f.f_back
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1316 rv = "(unknown file)", 0, "(unknown function)", None
37875
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 37052
diff changeset
1317 while hasattr(f, "f_code"):
27349
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1318 co = f.f_code
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1319 filename = os.path.normcase(co.co_filename)
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1320 if filename == _srcfile:
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1321 f = f.f_back
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1322 continue
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1323 sinfo = None
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1324 if stack_info:
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1325 sio = io.StringIO()
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1326 sio.write('Stack (most recent call last):\n')
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1327 traceback.print_stack(f, file=sio)
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1328 sinfo = sio.getvalue()
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1329 if sinfo[-1] == '\n':
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1330 sinfo = sinfo[:-1]
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1331 sio.close()
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1332 rv = (co.co_filename, f.f_lineno, co.co_name, sinfo)
37875
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 37052
diff changeset
1333 break
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 37052
diff changeset
1334 return rv
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1335
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1336 def makeRecord(self, name, level, fn, lno, msg, args, exc_info,
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1337 func=None, extra=None, sinfo=None):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1338 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1339 A factory method which can be overridden in subclasses to create
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1340 specialized LogRecords.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1341 """
66638
81f4d1fdf573 logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66201
diff changeset
1342 rv = _logRecordFactory(name, level, fn, lno, msg, args, exc_info, func,
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1343 sinfo)
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1344 if extra is not None:
36468
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1345 for key in extra:
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1346 if (key in ["message", "asctime"]) or (key in rv.__dict__):
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1347 raise KeyError("Attempt to overwrite %r in LogRecord" % key)
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1348 rv.__dict__[key] = extra[key]
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1349 return rv
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1350
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1351 def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1352 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1353 Low-level logging routine which creates a LogRecord and then calls
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1354 all the handlers of this logger to handle the record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1355 """
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1356 sinfo = None
27349
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1357 if _srcfile:
51740
833ddfec0bc4 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51579
diff changeset
1358 #IronPython doesn't track Python frames, so findCaller throws an
56368
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
1359 #exception on some versions of IronPython. We trap it here so that
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54807
diff changeset
1360 #IronPython can use logging.
51740
833ddfec0bc4 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51579
diff changeset
1361 try:
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1362 fn, lno, func, sinfo = self.findCaller(stack_info)
51740
833ddfec0bc4 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51579
diff changeset
1363 except ValueError:
833ddfec0bc4 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51579
diff changeset
1364 fn, lno, func = "(unknown file)", 0, "(unknown function)"
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1365 else:
34612
07cf1a1640da Improved frame handling for 1.5.2, and now return func from findCaller (not actually used yet)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33815
diff changeset
1366 fn, lno, func = "(unknown file)", 0, "(unknown function)"
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1367 if exc_info:
41986
6464cc638faa Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
1368 if not isinstance(exc_info, tuple):
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1369 exc_info = sys.exc_info()
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1370 record = self.makeRecord(self.name, level, fn, lno, msg, args,
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1371 exc_info, func, extra, sinfo)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1372 self.handle(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1373
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1374 def handle(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1375 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1376 Call the handlers for the specified record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1377
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1378 This method is used for unpickled records received from a socket, as
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1379 well as those created locally. Logger-level filtering is applied.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1380 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1381 if (not self.disabled) and self.filter(record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1382 self.callHandlers(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1383
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1384 def addHandler(self, hdlr):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1385 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1386 Add the specified handler to this logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1387 """
64966
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1388 _acquireLock()
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1389 try:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1390 if not (hdlr in self.handlers):
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1391 self.handlers.append(hdlr)
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1392 finally:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1393 _releaseLock()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1394
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1395 def removeHandler(self, hdlr):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1396 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1397 Remove the specified handler from this logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1398 """
64966
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1399 _acquireLock()
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1400 try:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1401 if hdlr in self.handlers:
35582
52c65d73fb74 Added lock acquisition around handler removal from logger
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35526
diff changeset
1402 self.handlers.remove(hdlr)
64966
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1403 finally:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1404 _releaseLock()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1405
64847
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1406 def hasHandlers(self):
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1407 """
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1408 See if this logger has any handlers configured.
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1409
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1410 Loop through all handlers for this logger and its parents in the
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1411 logger hierarchy. Return True if a handler was found, else False.
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1412 Stop searching up the hierarchy whenever a logger with the "propagate"
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1413 attribute set to zero is found - that will be the last logger which
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1414 is checked for the existence of handlers.
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1415 """
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1416 c = self
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1417 rv = False
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1418 while c:
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1419 if c.handlers:
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1420 rv = True
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1421 break
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1422 if not c.propagate:
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1423 break
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1424 else:
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1425 c = c.parent
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1426 return rv
ec028067049d logging: Add hasHandlers() method to Logger.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64720
diff changeset
1427
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1428 def callHandlers(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1429 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1430 Pass a record to all relevant handlers.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1431
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1432 Loop through all handlers for this logger and its parents in the
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1433 logger hierarchy. If no handler was found, output a one-off error
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1434 message to sys.stderr. Stop searching up the hierarchy whenever a
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1435 logger with the "propagate" attribute set to zero is found - that
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1436 will be the last logger whose handlers are called.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1437 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1438 c = self
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1439 found = 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1440 while c:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1441 for hdlr in c.handlers:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1442 found = found + 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1443 if record.levelno >= hdlr.level:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1444 hdlr.handle(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1445 if not c.propagate:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1446 c = None #break out
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1447 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1448 c = c.parent
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1449 if (found == 0):
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1450 if lastResort:
71500
d11a1a373f58 Fixes #12637: Last resort messages now correctly handled. Thanks to Xavier de Gaye for the patch."
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 68336
diff changeset
1451 if record.levelno >= lastResort.level:
d11a1a373f58 Fixes #12637: Last resort messages now correctly handled. Thanks to Xavier de Gaye for the patch."
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 68336
diff changeset
1452 lastResort.handle(record)
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1453 elif raiseExceptions and not self.manager.emittedNoHandlerWarning:
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1454 sys.stderr.write("No handlers could be found for logger"
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1455 " \"%s\"\n" % self.name)
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1456 self.manager.emittedNoHandlerWarning = True
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1457
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1458 def getEffectiveLevel(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1459 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1460 Get the effective level for this logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1461
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1462 Loop through this logger and its parents in the logger hierarchy,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1463 looking for a non-zero logging level. Return the first one found.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1464 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1465 logger = self
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1466 while logger:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1467 if logger.level:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1468 return logger.level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1469 logger = logger.parent
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1470 return NOTSET
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1471
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1472 def isEnabledFor(self, level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1473 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1474 Is this logger enabled for level 'level'?
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1475 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1476 if self.manager.disable >= level:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1477 return 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1478 return level >= self.getEffectiveLevel()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1479
60506
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1480 def getChild(self, suffix):
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1481 """
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1482 Get a logger which is a descendant to this one.
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1483
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1484 This is a convenience method, such that
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1485
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1486 logging.getLogger('abc').getChild('def.ghi')
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1487
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1488 is the same as
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1489
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1490 logging.getLogger('abc.def.ghi')
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1491
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1492 It's useful, for example, when the parent logger is named using
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1493 __name__ rather than a literal string.
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1494 """
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1495 if self.root is not self:
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1496 suffix = '.'.join((self.name, suffix))
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1497 return self.manager.getLogger(suffix)
66ad267a73bf Merged revisions 79279,79284,79293,79373,79376,79379,79876,79888 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59876
diff changeset
1498
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1499 class RootLogger(Logger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1500 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1501 A root logger is not that different to any other logger, except that
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1502 it must have a logging level and there is only one instance of it in
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1503 the hierarchy.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1504 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1505 def __init__(self, level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1506 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1507 Initialize the logger with the name "root".
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1508 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1509 Logger.__init__(self, "root", level)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1510
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1511 _loggerClass = Logger
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1512
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
1513 class LoggerAdapter(object):
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1514 """
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1515 An adapter for loggers which makes it easier to specify contextual
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1516 information in logging output.
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1517 """
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1518
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1519 def __init__(self, logger, extra):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1520 """
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1521 Initialize the adapter with a logger and a dict-like object which
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1522 provides contextual information. This constructor signature allows
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1523 easy stacking of LoggerAdapters, if so desired.
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1524
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1525 You can effectively pass keyword arguments as shown in the
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1526 following example:
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1527
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1528 adapter = LoggerAdapter(someLogger, dict(p1=v1, p2="v2"))
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1529 """
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1530 self.logger = logger
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1531 self.extra = extra
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1532
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1533 def process(self, msg, kwargs):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1534 """
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1535 Process the logging message and keyword arguments passed in to
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1536 a logging call to insert contextual information. You can either
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1537 manipulate the message itself, the keyword args or both. Return
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1538 the message and kwargs modified (or not) to suit your needs.
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1539
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1540 Normally, you'll only need to override this one method in a
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1541 LoggerAdapter subclass for your specific needs.
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1542 """
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1543 kwargs["extra"] = self.extra
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1544 return msg, kwargs
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1545
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1546 #
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1547 # Boilerplate convenience methods
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1548 #
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1549 def debug(self, msg, *args, **kwargs):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1550 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1551 Delegate a debug call to the underlying logger.
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1552 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1553 self.log(DEBUG, msg, *args, **kwargs)
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1554
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1555 def info(self, msg, *args, **kwargs):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1556 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1557 Delegate an info call to the underlying logger.
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1558 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1559 self.log(INFO, msg, *args, **kwargs)
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1560
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1561 def warning(self, msg, *args, **kwargs):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1562 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1563 Delegate a warning call to the underlying logger.
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1564 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1565 self.log(WARNING, msg, *args, **kwargs)
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1566
64866
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1567 warn = warning
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1568
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1569 def error(self, msg, *args, **kwargs):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1570 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1571 Delegate an error call to the underlying logger.
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1572 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1573 self.log(ERROR, msg, *args, **kwargs)
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1574
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1575 def exception(self, msg, *args, **kwargs):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1576 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1577 Delegate an exception call to the underlying logger.
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1578 """
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1579 kwargs["exc_info"] = 1
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1580 self.log(ERROR, msg, *args, **kwargs)
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1581
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1582 def critical(self, msg, *args, **kwargs):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1583 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1584 Delegate a critical call to the underlying logger.
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1585 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1586 self.log(CRITICAL, msg, *args, **kwargs)
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1587
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1588 def log(self, level, msg, *args, **kwargs):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1589 """
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1590 Delegate a log call to the underlying logger, after adding
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1591 contextual information from this adapter instance.
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1592 """
64867
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1593 if self.isEnabledFor(level):
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1594 msg, kwargs = self.process(msg, kwargs)
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1595 self.logger._log(level, msg, args, **kwargs)
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1596
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1597 def isEnabledFor(self, level):
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1598 """
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1599 Is this logger enabled for level 'level'?
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1600 """
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1601 if self.logger.manager.disable >= level:
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1602 return False
603679d85329 logging: Updated LoggerAdapter implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64866
diff changeset
1603 return level >= self.getEffectiveLevel()
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1604
64866
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1605 def setLevel(self, level):
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1606 """
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1607 Set the specified level on the underlying logger.
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1608 """
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1609 self.logger.setLevel(level)
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1610
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1611 def getEffectiveLevel(self):
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1612 """
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1613 Get the effective level for the underlying logger.
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1614 """
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1615 return self.logger.getEffectiveLevel()
e90427984442 Added some methods to LoggerAdapter, and updated documentation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
1616
64849
cf88171499b5 logging: added hasHandlers() to LoggerAdapter.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64847
diff changeset
1617 def hasHandlers(self):
cf88171499b5 logging: added hasHandlers() to LoggerAdapter.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64847
diff changeset
1618 """
cf88171499b5 logging: added hasHandlers() to LoggerAdapter.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64847
diff changeset
1619 See if the underlying logger has any handlers.
cf88171499b5 logging: added hasHandlers() to LoggerAdapter.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64847
diff changeset
1620 """
cf88171499b5 logging: added hasHandlers() to LoggerAdapter.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64847
diff changeset
1621 return self.logger.hasHandlers()
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44498
diff changeset
1622
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1623 root = RootLogger(WARNING)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1624 Logger.root = root
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1625 Logger.manager = Manager(Logger.root)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1626
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1627 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1628 # Configuration classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1629 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1630
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1631 BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s"
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1632
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1633 def basicConfig(**kwargs):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1634 """
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1635 Do basic configuration for the logging system.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1636
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1637 This function does nothing if the root logger already has handlers
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1638 configured. It is a convenience method intended for use by simple scripts
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1639 to do one-shot configuration of the logging package.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1640
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1641 The default behaviour is to create a StreamHandler which writes to
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1642 sys.stderr, set a formatter using the BASIC_FORMAT format string, and
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1643 add the handler to the root logger.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1644
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1645 A number of optional keyword arguments may be specified, which can alter
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1646 the default behaviour.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1647
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1648 filename Specifies that a FileHandler be created, using the specified
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1649 filename, rather than a StreamHandler.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1650 filemode Specifies the mode to open the file, if filename is specified
34744
3d97eb3b7cec Added optional encoding argument to file handlers. Made traceback import unconditional, to avoid lock contention problems which occur when logging from custom importers (SF patch #1158052)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34612
diff changeset
1651 (if filemode is unspecified, it defaults to 'a').
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1652 format Use the specified format string for the handler.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1653 datefmt Use the specified date/time format.
65816
3217b10f8413 Added style argument to logging.basicConfig() and documented this change.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65647
diff changeset
1654 style If a format string is specified, use this to specify the
3217b10f8413 Added style argument to logging.basicConfig() and documented this change.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65647
diff changeset
1655 type of format string (possible values '%', '{', '$', for
3217b10f8413 Added style argument to logging.basicConfig() and documented this change.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65647
diff changeset
1656 %-formatting, :meth:`str.format` and :class:`string.Template`
3217b10f8413 Added style argument to logging.basicConfig() and documented this change.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65647
diff changeset
1657 - defaults to '%').
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1658 level Set the root logger level to the specified level.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1659 stream Use the specified stream to initialize the StreamHandler. Note
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1660 that this argument is incompatible with 'filename' - if both
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1661 are present, 'stream' is ignored.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1662
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1663 Note that you could specify a stream created using open(filename, mode)
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1664 rather than passing the filename and mode in. However, it should be
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1665 remembered that StreamHandler does not close its stream (since it may be
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1666 using sys.stdout or sys.stderr), whereas FileHandler closes its stream
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1667 when the handler is closed.
65816
3217b10f8413 Added style argument to logging.basicConfig() and documented this change.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65647
diff changeset
1668
3217b10f8413 Added style argument to logging.basicConfig() and documented this change.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65647
diff changeset
1669 .. versionchanged: 3.2
3217b10f8413 Added style argument to logging.basicConfig() and documented this change.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65647
diff changeset
1670 Added the ``style`` parameter.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1671 """
64966
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1672 # Add thread safety in case someone mistakenly calls
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1673 # basicConfig() from multiple threads
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1674 _acquireLock()
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1675 try:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1676 if len(root.handlers) == 0:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1677 filename = kwargs.get("filename")
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1678 if filename:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1679 mode = kwargs.get("filemode", 'a')
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1680 hdlr = FileHandler(filename, mode)
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1681 else:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1682 stream = kwargs.get("stream")
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1683 hdlr = StreamHandler(stream)
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1684 fs = kwargs.get("format", BASIC_FORMAT)
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1685 dfs = kwargs.get("datefmt", None)
65816
3217b10f8413 Added style argument to logging.basicConfig() and documented this change.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65647
diff changeset
1686 style = kwargs.get("style", '%')
3217b10f8413 Added style argument to logging.basicConfig() and documented this change.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65647
diff changeset
1687 fmt = Formatter(fs, dfs, style)
64966
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1688 hdlr.setFormatter(fmt)
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1689 root.addHandler(hdlr)
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1690 level = kwargs.get("level")
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1691 if level is not None:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1692 root.setLevel(level)
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1693 finally:
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1694 _releaseLock()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1695
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1696 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1697 # Utility functions at module level.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1698 # Basically delegate everything to the root logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1699 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1700
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1701 def getLogger(name=None):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1702 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1703 Return a logger with the specified name, creating it if necessary.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1704
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1705 If no name is specified, return the root logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1706 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1707 if name:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1708 return Logger.manager.getLogger(name)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1709 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1710 return root
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1711
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1712 def critical(msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1713 """
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1714 Log a message with severity 'CRITICAL' on the root logger. If the logger
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1715 has no handlers, call basicConfig() to add a console handler with a
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1716 pre-defined format.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1717 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1718 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1719 basicConfig()
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1720 root.critical(msg, *args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1721
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1722 fatal = critical
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1723
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1724 def error(msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1725 """
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1726 Log a message with severity 'ERROR' on the root logger. If the logger has
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1727 no handlers, call basicConfig() to add a console handler with a pre-defined
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1728 format.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1729 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1730 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1731 basicConfig()
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1732 root.error(msg, *args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1733
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1734 def exception(msg, *args, **kwargs):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1735 """
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1736 Log a message with severity 'ERROR' on the root logger, with exception
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1737 information. If the logger has no handlers, basicConfig() is called to add
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1738 a console handler with a pre-defined format.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1739 """
66201
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1740 kwargs['exc_info'] = True
ba014543ed2c Logging: added stack_info argument.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 65816
diff changeset
1741 error(msg, *args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1742
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1743 def warning(msg, *args, **kwargs):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1744 """
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1745 Log a message with severity 'WARNING' on the root logger. If the logger has
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1746 no handlers, call basicConfig() to add a console handler with a pre-defined
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1747 format.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1748 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1749 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1750 basicConfig()
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1751 root.warning(msg, *args, **kwargs)
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1752
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1753 warn = warning
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1754
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1755 def info(msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1756 """
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1757 Log a message with severity 'INFO' on the root logger. If the logger has
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1758 no handlers, call basicConfig() to add a console handler with a pre-defined
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1759 format.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1760 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1761 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1762 basicConfig()
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1763 root.info(msg, *args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1764
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1765 def debug(msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1766 """
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1767 Log a message with severity 'DEBUG' on the root logger. If the logger has
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1768 no handlers, call basicConfig() to add a console handler with a pre-defined
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1769 format.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1770 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1771 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1772 basicConfig()
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1773 root.debug(msg, *args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1774
33556
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1775 def log(level, msg, *args, **kwargs):
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1776 """
66819
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1777 Log 'msg % args' with the integer severity 'level' on the root logger. If
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1778 the logger has no handlers, call basicConfig() to add a console handler
c86dc2bd3ae8 logging: added handler of last resort.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 66640
diff changeset
1779 with a pre-defined format.
33556
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1780 """
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1781 if len(root.handlers) == 0:
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1782 basicConfig()
37048
c048a09d06ff Remove apply()
Neal Norwitz <nnorwitz@gmail.com>
parents: 36974
diff changeset
1783 root.log(level, msg, *args, **kwargs)
33556
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1784
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1785 def disable(level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1786 """
59876
90217a86642d Merged revisions 78966,78970,79018,79026-79027,79055,79156,79159,79163-79164,79173,79176,79194,79208,79212 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59600
diff changeset
1787 Disable all logging calls of severity 'level' and below.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1788 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1789 root.manager.disable = level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1790
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39589
diff changeset
1791 def shutdown(handlerList=_handlerList):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1792 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1793 Perform any cleanup actions in the logging system (e.g. flushing
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1794 buffers).
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1795
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1796 Should be called at application exit.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1797 """
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
1798 for wr in reversed(handlerList[:]):
32856
06a63c35df9e Ignore exceptions which occur when closing files in shutdown()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32546
diff changeset
1799 #errors might occur, for example, if files are locked
36468
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1800 #we just ignore them if raiseExceptions is not set
32856
06a63c35df9e Ignore exceptions which occur when closing files in shutdown()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32546
diff changeset
1801 try:
57449
022cd0f3c558 Merged revisions 76498,76507-76509 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56548
diff changeset
1802 h = wr()
64247
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1803 if h:
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1804 try:
68336
39469645857a Issue #11444: Merge fix from 3.1.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 68257 68335
diff changeset
1805 h.acquire()
64247
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1806 h.flush()
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1807 h.close()
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1808 except (IOError, ValueError):
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1809 # Ignore errors which might be caused
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1810 # because handlers have been closed but
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1811 # references to them are still around at
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1812 # application exit.
9d4dc5855c51 Issue #9501: Fixed logging regressions in cleanup code.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 60506
diff changeset
1813 pass
68336
39469645857a Issue #11444: Merge fix from 3.1.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 68257 68335
diff changeset
1814 finally:
39469645857a Issue #11444: Merge fix from 3.1.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 68257 68335
diff changeset
1815 h.release()
32856
06a63c35df9e Ignore exceptions which occur when closing files in shutdown()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32546
diff changeset
1816 except:
36468
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1817 if raiseExceptions:
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1818 raise
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1819 #else, swallow
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1820
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1821 #Let's try and shutdown automatically on application exit...
58758
81b2306e6bf3 Remove Python 1.x or 2.x compatibility code.
Georg Brandl <georg@python.org>
parents: 58218
diff changeset
1822 import atexit
81b2306e6bf3 Remove Python 1.x or 2.x compatibility code.
Georg Brandl <georg@python.org>
parents: 58218
diff changeset
1823 atexit.register(shutdown)
50074
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1824
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1825 # Null handler
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1826
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1827 class NullHandler(Handler):
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1828 """
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1829 This handler does nothing. It's intended to be used to avoid the
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1830 "No handlers could be found for logger XXX" one-off warning. This is
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1831 important for library code, which may contain code to log events. If a user
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1832 of the library does not configure logging, the one-off warning might be
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1833 produced; to avoid this, the library developer simply needs to instantiate
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1834 a NullHandler and add it to the top-level logger of the library module or
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1835 package.
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1836 """
64966
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1837 def handle(self, record):
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1838 pass
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1839
50074
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1840 def emit(self, record):
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1841 pass
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1842
64966
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1843 def createLock(self):
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1844 self.lock = None
7dfa9900f8c7 Issue #9945: logging: backported locking fixes from py3k.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 58219
diff changeset
1845
50074
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1846 # Warnings integration
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1847
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1848 _warnings_showwarning = None
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1849
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1850 def _showwarning(message, category, filename, lineno, file=None, line=None):
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1851 """
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1852 Implementation of showwarnings which redirects to logging, which will first
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1853 check to see if the file parameter is None. If a file is specified, it will
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1854 delegate to the original warnings implementation of showwarning. Otherwise,
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1855 it will call warnings.formatwarning and will log the resulting string to a
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1856 warnings logger named "py.warnings" with level logging.WARNING.
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1857 """
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1858 if file is not None:
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1859 if _warnings_showwarning is not None:
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1860 _warnings_showwarning(message, category, filename, lineno, file, line)
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1861 else:
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1862 s = warnings.formatwarning(message, category, filename, lineno, line)
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1863 logger = getLogger("py.warnings")
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1864 if not logger.handlers:
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1865 logger.addHandler(NullHandler())
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1866 logger.warning("%s", s)
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1867
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1868 def captureWarnings(capture):
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1869 """
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1870 If capture is true, redirect all warnings to the logging package.
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1871 If capture is False, ensure that warnings are not redirected to logging
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1872 but to their original destinations.
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1873 """
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1874 global _warnings_showwarning
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1875 if capture:
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1876 if _warnings_showwarning is None:
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1877 _warnings_showwarning = warnings.showwarning
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1878 warnings.showwarning = _showwarning
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1879 else:
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1880 if _warnings_showwarning is not None:
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1881 warnings.showwarning = _warnings_showwarning
024a9897c651 Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49095
diff changeset
1882 _warnings_showwarning = None