annotate Lib/logging/__init__.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 072a8a7ce973
children 40afb65536da
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50948
766de496a42d Issue 5013: Fixed bug in FileHandler when delay was set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50880
diff changeset
1 # Copyright 2001-2009 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
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 comp.lang.python, and influenced by Apache's log4j system.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
50948
766de496a42d Issue 5013: Fixed bug in FileHandler when delay was set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50880
diff changeset
21 Copyright (C) 2001-2009 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
45370
71139b692439 Add __all__ to logging module.
Raymond Hettinger <python@rcn.com>
parents: 44907
diff changeset
26 __all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR',
53503
973d24f44b07 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: 53310
diff changeset
27 'FATAL', 'FileHandler', 'Filter', 'Formatter', 'Handler', 'INFO',
973d24f44b07 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: 53310
diff changeset
28 'LogRecord', 'Logger', 'LoggerAdapter', 'NOTSET', 'NullHandler',
973d24f44b07 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: 53310
diff changeset
29 'StreamHandler', 'WARN', 'WARNING', 'addLevelName', 'basicConfig',
973d24f44b07 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: 53310
diff changeset
30 'captureWarnings', 'critical', 'debug', 'disable', 'error',
973d24f44b07 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: 53310
diff changeset
31 'exception', 'fatal', 'getLevelName', 'getLogger', 'getLoggerClass',
973d24f44b07 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: 53310
diff changeset
32 'info', 'log', 'makeLogRecord', 'setLoggerClass', 'warn', 'warning']
45370
71139b692439 Add __all__ to logging module.
Raymond Hettinger <python@rcn.com>
parents: 44907
diff changeset
33
49978
9f8e51fdcea0 Took Nick Coghlan's advice about importing warnings globally in logging, to avoid the possibility of race conditions: "This could deadlock if a thread spawned as a side effect of importing a module happens to trigger a warning. warnings is pulled into sys.modules as part of the interpreter startup - having a global 'import warnings' shouldn't have any real effect on logging's import time."
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49955
diff changeset
34 import sys, os, types, time, string, cStringIO, traceback, warnings
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
35
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
36 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
37 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
38 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
39 codecs = None
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 try:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 import thread
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 import threading
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 except ImportError:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 thread = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 __author__ = "Vinay Sajip <vinay_sajip@red-dove.com>"
38214
4cb9dc0dc3f9 Changed status from "beta" to "production"; since logging has been part of the stdlib since 2.3, it should be safe to make this assertion ;-)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 37610
diff changeset
48 __status__ = "production"
53503
973d24f44b07 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: 53310
diff changeset
49 __version__ = "0.5.0.8"
973d24f44b07 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: 53310
diff changeset
50 __date__ = "27 April 2009"
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 # Miscellaneous module data
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
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 #
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
57 # _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
58 # caller stack frame.
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
59 #
35512
9516ba54b9df Changed _srcfile determination to support py2exe.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34858
diff changeset
60 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
61 _srcfile = "logging%s__init__%s" % (os.sep, __file__[-4:])
9516ba54b9df Changed _srcfile determination to support py2exe.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34858
diff changeset
62 elif string.lower(__file__[-4:]) in ['.pyc', '.pyo']:
26184
3e59d674b8c3 Get rid of #! lines, references to usage as __main__, README.txt, and
Guido van Rossum <guido@python.org>
parents: 26183
diff changeset
63 _srcfile = __file__[:-4] + '.py'
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:
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
74 return sys.exc_traceback.tb_frame.f_back
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
40859
f4f695a75664 Minor fix for currentframe (SF #1652788).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40579
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 #
50880
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
diff changeset
103 # If you don't want multiprocessing information in the log, set this to zero
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
diff changeset
104 #
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
diff changeset
105 logMultiprocessing = 1
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
diff changeset
106
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
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
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 # Thread-related stuff
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
180
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 #_lock is used to serialize access to shared data structures in this module.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 #This needs to be an RLock because fileConfig() creates Handlers and so
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 #might arbitrary user threads. Since Handler.__init__() updates the shared
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 #dictionary _handlers, it needs to acquire the lock. But if configuring,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 #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
187 #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
188 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 _lock = None
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 def _acquireLock():
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 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
194
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 This should be released with _releaseLock().
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 global _lock
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 if (not _lock) and thread:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 _lock = threading.RLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 if _lock:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 _lock.acquire()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
202
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 def _releaseLock():
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 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
206 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 if _lock:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 _lock.release()
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 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 # The logging record
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
213
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 class LogRecord:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 A LogRecord instance represents an event being logged.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
217
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 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
219 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
220 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
221 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
222 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
223 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
224 information to be logged.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 """
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
226 def __init__(self, name, level, pathname, lineno,
39959
4da4de954012 Modified LogRecord.__init__ to make the func parameter optional. (See SF #1569622).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 39439
diff changeset
227 msg, args, exc_info, func=None):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 Initialize a logging record with interesting information.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 ct = time.time()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 self.name = name
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 self.msg = msg
33807
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
234 #
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
235 # 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
236 # 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
237 # 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
238 # Suggested by Stefan Behnel.
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
239 # 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
240 # 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
241 # '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
242 # 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
243 # 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
244 # '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
245 # 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
246 # problem.
43445
13baada2a601 Change to LogRecord.__init__() to fix #1206. Note that archaic use of type(x) == types.DictType is because of keeping 1.5.2 compatibility. While this is much less relevant these days, there probably needs to be a separate commit for removing all archaic constructs at the same time.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43444
diff changeset
247 if args and len(args) == 1 and (
13baada2a601 Change to LogRecord.__init__() to fix #1206. Note that archaic use of type(x) == types.DictType is because of keeping 1.5.2 compatibility. While this is much less relevant these days, there probably needs to be a separate commit for removing all archaic constructs at the same time.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43444
diff changeset
248 type(args[0]) == types.DictType
13baada2a601 Change to LogRecord.__init__() to fix #1206. Note that archaic use of type(x) == types.DictType is because of keeping 1.5.2 compatibility. While this is much less relevant these days, there probably needs to be a separate commit for removing all archaic constructs at the same time.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43444
diff changeset
249 ) and args[0]:
33807
47b384519775 Changed handling of args in LogRecord.__init__.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33668
diff changeset
250 args = args[0]
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 self.args = args
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
252 self.levelname = getLevelName(level)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 self.levelno = level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
254 self.pathname = pathname
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 try:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 self.filename = os.path.basename(pathname)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 self.module = os.path.splitext(self.filename)[0]
40575
1ed3ed9af348 Bare except clause removed from LogRecord.__init__. Now, only ValueError, TypeError and AttributeError are trapped.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40275
diff changeset
258 except (TypeError, ValueError, AttributeError):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 self.filename = pathname
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 self.module = "Unknown module"
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 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
262 self.exc_text = None # used to cache the traceback text
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 self.lineno = lineno
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
264 self.funcName = func
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 self.created = ct
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 self.msecs = (ct - long(ct)) * 1000
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 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
268 if logThreads and thread:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 self.thread = thread.get_ident()
48289
024b2b984866 change a few uses of the threading APIs
Benjamin Peterson <benjamin@python.org>
parents: 48153
diff changeset
270 self.threadName = threading.current_thread().name
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
271 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 self.thread = None
34858
2ea3d6915204 Added threadName and now using re-entrant lock
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34744
diff changeset
273 self.threadName = None
50880
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
diff changeset
274 if logMultiprocessing:
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
diff changeset
275 from multiprocessing import current_process
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
diff changeset
276 self.processName = current_process().name
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
diff changeset
277 else:
c1c44a0ab438 issue 4301: patch logging to add processName, remove the old _check_logger_class code
Jesse Noller <jnoller@gmail.com>
parents: 50158
diff changeset
278 self.processName = None
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 logProcesses and hasattr(os, 'getpid'):
28019
32a0c2f422f1 getpid doesn't exist on MacOS9.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27932
diff changeset
280 self.process = os.getpid()
32a0c2f422f1 getpid doesn't exist on MacOS9.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27932
diff changeset
281 else:
32a0c2f422f1 getpid doesn't exist on MacOS9.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27932
diff changeset
282 self.process = None
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
283
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 def __str__(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 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
286 self.pathname, self.lineno, self.msg)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
287
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 def getMessage(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
289 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
290 Return the message for this LogRecord.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
291
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 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
293 arguments with the message.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 """
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
295 if not hasattr(types, "UnicodeType"): #if no unicode support...
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
296 msg = str(self.msg)
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
297 else:
35703
76635ab7b707 Fixed bug where the logging message was wrongly being demoted from Unicode to string (SF #1314107)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35582
diff changeset
298 msg = self.msg
76635ab7b707 Fixed bug where the logging message was wrongly being demoted from Unicode to string (SF #1314107)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35582
diff changeset
299 if type(msg) not in (types.UnicodeType, types.StringType):
76635ab7b707 Fixed bug where the logging message was wrongly being demoted from Unicode to string (SF #1314107)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35582
diff changeset
300 try:
76635ab7b707 Fixed bug where the logging message was wrongly being demoted from Unicode to string (SF #1314107)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35582
diff changeset
301 msg = str(self.msg)
76635ab7b707 Fixed bug where the logging message was wrongly being demoted from Unicode to string (SF #1314107)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35582
diff changeset
302 except UnicodeError:
76635ab7b707 Fixed bug where the logging message was wrongly being demoted from Unicode to string (SF #1314107)
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35582
diff changeset
303 msg = self.msg #Defer encoding till later
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
304 if self.args:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 msg = msg % self.args
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 return msg
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
307
29624
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
308 def makeLogRecord(dict):
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
309 """
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
310 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
311 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
312 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
313 instance.
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
314 """
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
315 rv = LogRecord(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
316 rv.__dict__.update(dict)
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
317 return rv
a464020f15d6 SF patch #761519: Fixes for bugs 760703 and 757821
Raymond Hettinger <python@rcn.com>
parents: 28739
diff changeset
318
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 # Formatter classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
321 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
322
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
323 class Formatter:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
324 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
325 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
326
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
327 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
328 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
329 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
330 allows a formatting string to be specified. If none is supplied, the
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
331 default value of "%s(message)\\n" is used.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
332
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
333 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
334 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
335 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
336 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
337 attributes in a LogRecord are described by:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
338
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
339 %(name)s Name of the logger (logging channel)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
340 %(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
341 WARNING, ERROR, CRITICAL)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
342 %(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
343 "WARNING", "ERROR", "CRITICAL")
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
344 %(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
345 call was issued (if available)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
346 %(filename)s Filename portion of pathname
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
347 %(module)s Module (name portion of filename)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
348 %(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
349 (if available)
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
350 %(funcName)s Function name
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
351 %(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
352 return value)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
353 %(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
354 %(msecs)d Millisecond portion of the creation time
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 %(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
356 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
357 (typically at application startup time)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
358 %(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
359 %(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
360 %(process)d Process ID (if available)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
361 %(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
362 the record is emitted
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
363 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
364
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
365 converter = time.localtime
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
366
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
367 def __init__(self, fmt=None, datefmt=None):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
368 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
369 Initialize the formatter with specified format strings.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
370
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
371 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
372 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
373 the optional datefmt argument (if omitted, you get the ISO8601 format).
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
374 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
375 if fmt:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
376 self._fmt = fmt
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
377 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
378 self._fmt = "%(message)s"
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
379 self.datefmt = datefmt
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
380
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
381 def formatTime(self, record, datefmt=None):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
382 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
383 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
384
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 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
386 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
387 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
388 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
389 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
390 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
391 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
392 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
393 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
394 '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
395 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
396 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
397 set the 'converter' attribute in the Formatter class.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
399 ct = self.converter(record.created)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 if datefmt:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
401 s = time.strftime(datefmt, ct)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
402 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
403 t = time.strftime("%Y-%m-%d %H:%M:%S", ct)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
404 s = "%s,%03d" % (t, record.msecs)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
405 return s
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 def formatException(self, ei):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
408 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
409 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
410
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
411 This default implementation just uses
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
412 traceback.print_exception()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
413 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
414 sio = cStringIO.StringIO()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
415 traceback.print_exception(ei[0], ei[1], ei[2], None, sio)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
416 s = sio.getvalue()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
417 sio.close()
42114
aab9080ac4c7 Bug #1737864: allow empty message in logging format routines.
Georg Brandl <georg@python.org>
parents: 40859
diff changeset
418 if s[-1:] == "\n":
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
419 s = s[:-1]
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
420 return s
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
421
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
422 def format(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
423 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
424 Format the specified record as text.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
425
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
426 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
427 string formatting operation which yields the returned string.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
428 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
429 are carried out. The message attribute of the record is computed
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
430 using LogRecord.getMessage(). If the formatting string contains
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
431 "%(asctime)", formatTime() is called to format the event time.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
432 If there is exception information, it is formatted using
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
433 formatException() and appended to the message.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
434 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
435 record.message = record.getMessage()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
436 if string.find(self._fmt,"%(asctime)") >= 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
437 record.asctime = self.formatTime(record, self.datefmt)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
438 s = self._fmt % record.__dict__
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
439 if record.exc_info:
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
440 # 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
441 # (it's constant anyway)
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
442 if not record.exc_text:
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
443 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
444 if record.exc_text:
42114
aab9080ac4c7 Bug #1737864: allow empty message in logging format routines.
Georg Brandl <georg@python.org>
parents: 40859
diff changeset
445 if s[-1:] != "\n":
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
446 s = s + "\n"
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
447 s = s + record.exc_text
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
448 return s
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
449
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 # 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
452 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
453 _defaultFormatter = Formatter()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
454
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
455 class BufferingFormatter:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
456 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
457 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
458 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
459 def __init__(self, linefmt=None):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
460 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
461 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
462 individual record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
463 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
464 if linefmt:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
465 self.linefmt = linefmt
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
466 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
467 self.linefmt = _defaultFormatter
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 formatHeader(self, records):
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 header string for the specified records.
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 return ""
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
474
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
475 def formatFooter(self, records):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
476 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
477 Return the footer string for the specified records.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
478 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
479 return ""
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
480
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
481 def format(self, records):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
482 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
483 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
484 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
485 rv = ""
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
486 if len(records) > 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
487 rv = rv + self.formatHeader(records)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
488 for record in records:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
489 rv = rv + self.linefmt.format(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
490 rv = rv + self.formatFooter(records)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
491 return rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
492
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
493 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
494 # Filter classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
495 #---------------------------------------------------------------------------
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 class Filter:
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 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
500
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
501 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
502 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
503 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
504 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
505 "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
506 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
507 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
508 def __init__(self, name=''):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
509 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
510 Initialize a filter.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
511
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
512 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
513 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
514 name is specified, allow every event.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
515 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
516 self.name = name
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
517 self.nlen = len(name)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
518
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
519 def filter(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
520 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
521 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
522
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
523 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
524 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
525 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
526 if self.nlen == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
527 return 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
528 elif self.name == record.name:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
529 return 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
530 elif string.find(record.name, self.name, 0, self.nlen) != 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
531 return 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
532 return (record.name[self.nlen] == ".")
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
533
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
534 class Filterer:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
535 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
536 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
537 common code.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
538 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
539 def __init__(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
540 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
541 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
542 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
543 self.filters = []
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
544
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
545 def addFilter(self, filter):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
546 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
547 Add the specified filter to this handler.
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 if not (filter in self.filters):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
550 self.filters.append(filter)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
551
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
552 def removeFilter(self, filter):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
553 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
554 Remove the specified filter from this handler.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
555 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
556 if filter in self.filters:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
557 self.filters.remove(filter)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
558
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
559 def filter(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
560 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
561 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
562
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
563 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
564 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
565 is to be dropped, else non-zero.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
566 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
567 rv = 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
568 for f in self.filters:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
569 if not f.filter(record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
570 rv = 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
571 break
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
572 return rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
573
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 # Handler classes and functions
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
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
578 _handlers = {} #repository of handlers (for flushing when shutdown called)
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
579 _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
580
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
581 class Handler(Filterer):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
582 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
583 Handler instances dispatch logging events to specific destinations.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
584
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
585 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
586 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
587 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
588 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
589 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
590 def __init__(self, level=NOTSET):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
591 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
592 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
593 and the filter list to empty.
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 Filterer.__init__(self)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
596 self.level = level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
597 self.formatter = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
598 #get the module data lock, as we're updating a shared structure.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
599 _acquireLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
600 try: #unlikely to raise an exception, but you never know...
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
601 _handlers[self] = 1
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
602 _handlerList.insert(0, self)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
603 finally:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
604 _releaseLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
605 self.createLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
606
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
607 def createLock(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
608 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
609 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
610 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
611 if thread:
34858
2ea3d6915204 Added threadName and now using re-entrant lock
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 34744
diff changeset
612 self.lock = threading.RLock()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
613 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
614 self.lock = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
615
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
616 def acquire(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
617 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
618 Acquire the I/O thread lock.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
619 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
620 if self.lock:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
621 self.lock.acquire()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
622
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
623 def release(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
624 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
625 Release the I/O thread lock.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
626 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
627 if self.lock:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
628 self.lock.release()
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 def setLevel(self, level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
631 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
632 Set the logging level of this handler.
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.level = level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
635
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
636 def format(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
637 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
638 Format the specified record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
639
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
640 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
641 for the module.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
642 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
643 if self.formatter:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
644 fmt = self.formatter
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
645 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
646 fmt = _defaultFormatter
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
647 return fmt.format(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
648
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
649 def emit(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
650 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
651 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
652
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
653 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
654 raises a NotImplementedError.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
655 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
656 raise NotImplementedError, 'emit must be implemented '\
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
657 'by Handler subclasses'
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 def handle(self, record):
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 Conditionally emit the specified logging record.
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 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
664 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
665 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
666 emission.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
667 """
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
668 rv = self.filter(record)
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
669 if rv:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
670 self.acquire()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
671 try:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
672 self.emit(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
673 finally:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
674 self.release()
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
675 return rv
26183
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 setFormatter(self, fmt):
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 Set the formatter for this handler.
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 self.formatter = fmt
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
682
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
683 def flush(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
684 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
685 Ensure all logging output has been flushed.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
686
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
687 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
688 subclasses.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
689 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
690 pass
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
691
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
692 def close(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
693 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
694 Tidy up any resources used by the handler.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
695
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
696 This version does removes the handler from an internal list
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
697 of handlers which is closed when shutdown() is called. Subclasses
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
698 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
699 methods.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
700 """
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
701 #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
702 _acquireLock()
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
703 try: #unlikely to raise an exception, but you never know...
36456
51f760288104 Removed defensive test in Handler.close
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36448
diff changeset
704 del _handlers[self]
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.remove(self)
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
706 finally:
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
707 _releaseLock()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
708
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
709 def handleError(self, record):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
710 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
711 Handle errors which occur during an emit() call.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
712
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
713 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
714 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
715 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
716 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
717 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
718 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
719 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
720 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
721 if raiseExceptions:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
722 ei = sys.exc_info()
53945
072a8a7ce973 Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when trying to print a traceback.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53503
diff changeset
723 try:
072a8a7ce973 Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when trying to print a traceback.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53503
diff changeset
724 traceback.print_exception(ei[0], ei[1], ei[2], None, sys.stderr)
072a8a7ce973 Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when trying to print a traceback.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53503
diff changeset
725 except IOError:
072a8a7ce973 Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when trying to print a traceback.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53503
diff changeset
726 pass # see issue 5971
072a8a7ce973 Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when trying to print a traceback.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53503
diff changeset
727 finally:
072a8a7ce973 Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when trying to print a traceback.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53503
diff changeset
728 del ei
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
729
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
730 class StreamHandler(Handler):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
731 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
732 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
733 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
734 sys.stdout or sys.stderr may be used.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
735 """
48923
576441527d4f logging: fixed lack of use of encoding attribute specified on a stream.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 48289
diff changeset
736
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
737 def __init__(self, strm=None):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
738 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
739 Initialize the handler.
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 If strm is not specified, sys.stderr is used.
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 Handler.__init__(self)
37610
7ed0f003ba63 StreamHandler now checks explicitly for None before using sys.stderr as the stream (see SF bug #1463840).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36999
diff changeset
744 if strm is None:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
745 strm = sys.stderr
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
746 self.stream = strm
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
747
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
748 def flush(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
749 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
750 Flushes the stream.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
751 """
47745
8e85c46cf673 Bug #3126: StreamHandler and FileHandler check before calling "flush" and "close" that the stream object has these, using hasattr (thanks to bobf for the patch).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 47598
diff changeset
752 if self.stream and hasattr(self.stream, "flush"):
43441
b90286ab8629 Change to flush and close logic to fix #1760556.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 42751
diff changeset
753 self.stream.flush()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
754
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
755 def emit(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
756 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
757 Emit a record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
758
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
759 If a formatter is specified, it is used to format the record.
48923
576441527d4f logging: fixed lack of use of encoding attribute specified on a stream.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 48289
diff changeset
760 The record is then written to the stream with a trailing newline. If
576441527d4f logging: fixed lack of use of encoding attribute specified on a stream.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 48289
diff changeset
761 exception information is present, it is formatted using
576441527d4f logging: fixed lack of use of encoding attribute specified on a stream.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 48289
diff changeset
762 traceback.print_exception and appended to the stream. If the stream
53179
73bfcb398886 Issue #5768: Change to Unicode output logic and test case for same.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51739
diff changeset
763 has an 'encoding' attribute, it is used to determine how to do the
48923
576441527d4f logging: fixed lack of use of encoding attribute specified on a stream.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 48289
diff changeset
764 output to the stream.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
765 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
766 try:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
767 msg = self.format(record)
51474
e49013f1d831 Issue #5170: Fixed Unicode output bug in logging and added test case. This is a regression which did not occur in 2.5.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50950
diff changeset
768 stream = self.stream
33535
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
769 fs = "%s\n"
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
770 if not hasattr(types, "UnicodeType"): #if no unicode support...
51474
e49013f1d831 Issue #5170: Fixed Unicode output bug in logging and added test case. This is a regression which did not occur in 2.5.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50950
diff changeset
771 stream.write(fs % msg)
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
772 else:
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
773 try:
53179
73bfcb398886 Issue #5768: Change to Unicode output logic and test case for same.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51739
diff changeset
774 if (isinstance(msg, unicode) and
73bfcb398886 Issue #5768: Change to Unicode output logic and test case for same.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51739
diff changeset
775 getattr(stream, 'encoding', None)):
53310
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
776 fs = fs.decode(stream.encoding)
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
777 try:
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
778 stream.write(fs % msg)
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
779 except UnicodeEncodeError:
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
780 #Printing to terminals sometimes fails. For example,
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
781 #with an encoding of 'cp1251', the above write will
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
782 #work if written to a stream opened or wrapped by
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
783 #the codecs module, but fail when writing to a
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
784 #terminal even when the codepage is set to cp1251.
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
785 #An extra encoding step seems to be needed.
f9f23f36c36c Issue #5170: Fixed regression caused when fixing #5768.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 53179
diff changeset
786 stream.write((fs % msg).encode(stream.encoding))
53179
73bfcb398886 Issue #5768: Change to Unicode output logic and test case for same.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51739
diff changeset
787 else:
51474
e49013f1d831 Issue #5170: Fixed Unicode output bug in logging and added test case. This is a regression which did not occur in 2.5.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50950
diff changeset
788 stream.write(fs % msg)
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
789 except UnicodeError:
51474
e49013f1d831 Issue #5170: Fixed Unicode output bug in logging and added test case. This is a regression which did not occur in 2.5.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50950
diff changeset
790 stream.write(fs % msg.encode("UTF-8"))
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
791 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
792 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
793 raise
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
794 except:
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
795 self.handleError(record)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
796
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
797 class FileHandler(StreamHandler):
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 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
800 """
44907
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
801 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
802 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
803 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
804 """
40577
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
805 #keep the absolute path, otherwise derived classes which use this
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
806 #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
807 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
808 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
809 self.baseFilename = os.path.abspath(filename)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
810 self.mode = mode
40577
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
811 self.encoding = encoding
44907
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
812 if delay:
50948
766de496a42d Issue 5013: Fixed bug in FileHandler when delay was set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50880
diff changeset
813 #We don't open the stream, but we still need to call the
766de496a42d Issue 5013: Fixed bug in FileHandler when delay was set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50880
diff changeset
814 #Handler constructor to set level, formatter, lock etc.
766de496a42d Issue 5013: Fixed bug in FileHandler when delay was set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50880
diff changeset
815 Handler.__init__(self)
44907
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
816 self.stream = None
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
817 else:
50948
766de496a42d Issue 5013: Fixed bug in FileHandler when delay was set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50880
diff changeset
818 StreamHandler.__init__(self, self._open())
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
819
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
820 def close(self):
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 Closes the stream.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
823 """
43441
b90286ab8629 Change to flush and close logic to fix #1760556.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 42751
diff changeset
824 if self.stream:
b90286ab8629 Change to flush and close logic to fix #1760556.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 42751
diff changeset
825 self.flush()
47745
8e85c46cf673 Bug #3126: StreamHandler and FileHandler check before calling "flush" and "close" that the stream object has these, using hasattr (thanks to bobf for the patch).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 47598
diff changeset
826 if hasattr(self.stream, "close"):
8e85c46cf673 Bug #3126: StreamHandler and FileHandler check before calling "flush" and "close" that the stream object has these, using hasattr (thanks to bobf for the patch).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 47598
diff changeset
827 self.stream.close()
43441
b90286ab8629 Change to flush and close logic to fix #1760556.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 42751
diff changeset
828 StreamHandler.close(self)
b90286ab8629 Change to flush and close logic to fix #1760556.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 42751
diff changeset
829 self.stream = None
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
830
40577
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
831 def _open(self):
40579
61d634a0bd6a Added a docstring
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40577
diff changeset
832 """
61d634a0bd6a Added a docstring
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40577
diff changeset
833 Open the current base file with the (original) mode and encoding.
61d634a0bd6a Added a docstring
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40577
diff changeset
834 Return the resulting stream.
61d634a0bd6a Added a docstring
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40577
diff changeset
835 """
40577
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
836 if self.encoding is None:
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
837 stream = open(self.baseFilename, self.mode)
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
838 else:
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
839 stream = codecs.open(self.baseFilename, self.mode, self.encoding)
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
840 return stream
92dd2bb94ca9 Bug #1627575: Added _open() method to FileHandler which can be used to reopen files. The FileHandler instance now saves the encoding (which can be None) in an attribute called "encoding".
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 40575
diff changeset
841
44907
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
842 def emit(self, record):
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
843 """
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
844 Emit a record.
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
845
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
846 If the stream was not opened because 'delay' was specified in the
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
847 constructor, open it before calling the superclass's emit.
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
848 """
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
849 if self.stream is None:
50948
766de496a42d Issue 5013: Fixed bug in FileHandler when delay was set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 50880
diff changeset
850 self.stream = self._open()
44907
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
851 StreamHandler.emit(self, record)
f3a9ad448cca Added optional delay argument to FileHandler and subclasses.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 44745
diff changeset
852
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
853 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
854 # Manager classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
855 #---------------------------------------------------------------------------
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 class PlaceHolder:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
858 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
859 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
860 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
861 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
862 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
863 def __init__(self, alogger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
864 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
865 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
866 """
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
867 #self.loggers = [alogger]
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
868 self.loggerMap = { alogger : None }
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
869
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
870 def append(self, alogger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
871 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
872 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
873 """
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
874 #if alogger not in self.loggers:
50158
a090aab575c6 remove has_key usage
Benjamin Peterson <benjamin@python.org>
parents: 49978
diff changeset
875 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
876 #self.loggers.append(alogger)
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
877 self.loggerMap[alogger] = None
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
878
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
879 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
880 # Determine which class to use when instantiating loggers.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
881 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
882 _loggerClass = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
883
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
884 def setLoggerClass(klass):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
885 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
886 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
887 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
888 __init__() should call Logger.__init__()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
889 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
890 if klass != Logger:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
891 if not issubclass(klass, Logger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
892 raise TypeError, "logger not derived from logging.Logger: " + \
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
893 klass.__name__
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
894 global _loggerClass
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
895 _loggerClass = klass
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
896
33535
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
897 def getLoggerClass():
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
898 """
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
899 Return the class to be used when instantiating a logger.
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
900 """
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
901
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
902 return _loggerClass
ecd654daaec9 Added getLoggerClass()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32955
diff changeset
903
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
904 class Manager:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
905 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
906 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
907 holds the hierarchy of loggers.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
908 """
26257
f23c35f81033 SF Patch #638825 logging module
Neal Norwitz <nnorwitz@gmail.com>
parents: 26184
diff changeset
909 def __init__(self, rootnode):
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 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
912 """
26257
f23c35f81033 SF Patch #638825 logging module
Neal Norwitz <nnorwitz@gmail.com>
parents: 26184
diff changeset
913 self.root = rootnode
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
914 self.disable = 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
915 self.emittedNoHandlerWarning = 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
916 self.loggerDict = {}
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 def getLogger(self, name):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
919 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
920 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
921 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
922 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
923
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
924 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
925 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
926 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
927 placeholder to now point to the logger.
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 rv = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
930 _acquireLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
931 try:
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
932 if name in self.loggerDict:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
933 rv = self.loggerDict[name]
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
934 if isinstance(rv, PlaceHolder):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
935 ph = rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
936 rv = _loggerClass(name)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
937 rv.manager = self
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
938 self.loggerDict[name] = rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
939 self._fixupChildren(ph, rv)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
940 self._fixupParents(rv)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
941 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
942 rv = _loggerClass(name)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
943 rv.manager = self
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
944 self.loggerDict[name] = rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
945 self._fixupParents(rv)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
946 finally:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
947 _releaseLock()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
948 return rv
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
949
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
950 def _fixupParents(self, alogger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
951 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
952 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
953 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
954 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
955 name = alogger.name
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
956 i = string.rfind(name, ".")
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
957 rv = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
958 while (i > 0) and not rv:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
959 substr = name[:i]
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
960 if substr not in self.loggerDict:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
961 self.loggerDict[substr] = PlaceHolder(alogger)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
962 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
963 obj = self.loggerDict[substr]
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
964 if isinstance(obj, Logger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
965 rv = obj
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
966 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
967 assert isinstance(obj, PlaceHolder)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
968 obj.append(alogger)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
969 i = string.rfind(name, ".", 0, i - 1)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
970 if not rv:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
971 rv = self.root
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
972 alogger.parent = rv
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 def _fixupChildren(self, ph, alogger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
975 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
976 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
977 specified logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
978 """
40275
b820406852a0 Change to improve speed of _fixupChildren
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 39959
diff changeset
979 name = alogger.name
b820406852a0 Change to improve speed of _fixupChildren
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 39959
diff changeset
980 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
981 for c in ph.loggerMap.keys():
40275
b820406852a0 Change to improve speed of _fixupChildren
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 39959
diff changeset
982 #The if means ... if not c.parent.name.startswith(nm)
b820406852a0 Change to improve speed of _fixupChildren
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 39959
diff changeset
983 #if string.find(c.parent.name, nm) <> 0:
b820406852a0 Change to improve speed of _fixupChildren
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 39959
diff changeset
984 if c.parent.name[:namelen] != name:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
985 alogger.parent = c.parent
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
986 c.parent = alogger
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
987
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
988 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
989 # Logger classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
990 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
991
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
992 class Logger(Filterer):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
993 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
994 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
995 "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
996 "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
997 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
998 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
999 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
1000 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
1001 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
1002 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
1003 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
1004 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
1005 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
1006 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1007 def __init__(self, name, level=NOTSET):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1008 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1009 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
1010 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1011 Filterer.__init__(self)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1012 self.name = name
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1013 self.level = level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1014 self.parent = None
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1015 self.propagate = 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1016 self.handlers = []
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1017 self.disabled = 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1018
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1019 def setLevel(self, level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1020 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1021 Set the logging level of this logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1022 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1023 self.level = level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1024
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1025 def debug(self, msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1026 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1027 Log 'msg % args' with severity 'DEBUG'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1028
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1029 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
1030 a true value, e.g.
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 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
1033 """
42751
2073ea3005a7 Patch #1779550: remove redundant code in logging.
Georg Brandl <georg@python.org>
parents: 42114
diff changeset
1034 if self.isEnabledFor(DEBUG):
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1035 self._log(DEBUG, msg, args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1036
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1037 def info(self, msg, *args, **kwargs):
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 Log 'msg % args' with severity 'INFO'.
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 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
1042 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1043
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1044 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
1045 """
42751
2073ea3005a7 Patch #1779550: remove redundant code in logging.
Georg Brandl <georg@python.org>
parents: 42114
diff changeset
1046 if self.isEnabledFor(INFO):
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1047 self._log(INFO, msg, args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1048
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1049 def warning(self, msg, *args, **kwargs):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1050 """
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1051 Log 'msg % args' with severity 'WARNING'.
26183
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 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
1054 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1055
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1056 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
1057 """
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1058 if self.isEnabledFor(WARNING):
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1059 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
1060
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1061 warn = warning
26183
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 def error(self, msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1064 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1065 Log 'msg % args' with severity 'ERROR'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1066
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1067 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
1068 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1069
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1070 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
1071 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1072 if self.isEnabledFor(ERROR):
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1073 self._log(ERROR, msg, args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1074
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1075 def exception(self, msg, *args):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1076 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1077 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
1078 """
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1079 self.error(*((msg,) + args), **{'exc_info': 1})
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1080
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1081 def critical(self, msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1082 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1083 Log 'msg % args' with severity 'CRITICAL'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1084
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1085 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
1086 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1087
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1088 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
1089 """
42751
2073ea3005a7 Patch #1779550: remove redundant code in logging.
Georg Brandl <georg@python.org>
parents: 42114
diff changeset
1090 if self.isEnabledFor(CRITICAL):
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1091 self._log(CRITICAL, msg, args, **kwargs)
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 fatal = critical
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 def log(self, level, msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1096 """
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
1097 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
1098
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1099 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
1100 a true value, e.g.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1101
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1102 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
1103 """
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1104 if type(level) != types.IntType:
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1105 if raiseExceptions:
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1106 raise TypeError, "level must be an integer"
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1107 else:
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1108 return
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1109 if self.isEnabledFor(level):
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1110 self._log(level, msg, args, **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1111
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1112 def findCaller(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1113 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1114 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
1115 file name, line number and function name.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1116 """
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
1117 f = currentframe().f_back
36999
179084899d96 Catch situations where currentframe() returns None. See SF patch #1447410, this is a different implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36974
diff changeset
1118 rv = "(unknown file)", 0, "(unknown function)"
179084899d96 Catch situations where currentframe() returns None. See SF patch #1447410, this is a different implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36974
diff changeset
1119 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
1120 co = f.f_code
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1121 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
1122 if filename == _srcfile:
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1123 f = f.f_back
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1124 continue
36999
179084899d96 Catch situations where currentframe() returns None. See SF patch #1447410, this is a different implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36974
diff changeset
1125 rv = (filename, f.f_lineno, co.co_name)
179084899d96 Catch situations where currentframe() returns None. See SF patch #1447410, this is a different implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36974
diff changeset
1126 break
179084899d96 Catch situations where currentframe() returns None. See SF patch #1447410, this is a different implementation.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36974
diff changeset
1127 return rv
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1128
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
1129 def makeRecord(self, name, level, fn, lno, msg, args, exc_info, func=None, extra=None):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1130 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1131 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
1132 specialized LogRecords.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1133 """
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
1134 rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func)
44745
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1135 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
1136 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
1137 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
1138 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
1139 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
1140 return rv
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1141
36468
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1142 def _log(self, level, msg, args, exc_info=None, extra=None):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1143 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1144 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
1145 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
1146 """
27349
ddb52f5673db Use lightweight introspection instead of the inspect module hammer.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 26257
diff changeset
1147 if _srcfile:
51739
8c13f430e160 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51474
diff changeset
1148 #IronPython doesn't track Python frames, so findCaller throws an
8c13f430e160 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51474
diff changeset
1149 #exception. We trap it here so that IronPython can use logging.
8c13f430e160 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51474
diff changeset
1150 try:
8c13f430e160 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51474
diff changeset
1151 fn, lno, func = self.findCaller()
8c13f430e160 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51474
diff changeset
1152 except ValueError:
8c13f430e160 #5287: Add exception handling around findCaller() call to help out IronPython.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 51474
diff changeset
1153 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
1154 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
1155 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
1156 if exc_info:
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1157 if type(exc_info) != types.TupleType:
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1158 exc_info = sys.exc_info()
36469
93efa59b3297 Added function name to LogRecord.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36468
diff changeset
1159 record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1160 self.handle(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1161
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1162 def handle(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1163 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1164 Call the handlers for the specified record.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1165
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1166 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
1167 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
1168 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1169 if (not self.disabled) and self.filter(record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1170 self.callHandlers(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1171
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1172 def addHandler(self, hdlr):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1173 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1174 Add the specified handler to this logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1175 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1176 if not (hdlr in self.handlers):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1177 self.handlers.append(hdlr)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1178
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1179 def removeHandler(self, hdlr):
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 Remove the specified handler from this logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1182 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1183 if hdlr in self.handlers:
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1184 #hdlr.close()
35582
52c65d73fb74 Added lock acquisition around handler removal from logger
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35526
diff changeset
1185 hdlr.acquire()
52c65d73fb74 Added lock acquisition around handler removal from logger
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35526
diff changeset
1186 try:
52c65d73fb74 Added lock acquisition around handler removal from logger
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35526
diff changeset
1187 self.handlers.remove(hdlr)
52c65d73fb74 Added lock acquisition around handler removal from logger
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35526
diff changeset
1188 finally:
52c65d73fb74 Added lock acquisition around handler removal from logger
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35526
diff changeset
1189 hdlr.release()
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1190
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1191 def callHandlers(self, record):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1192 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1193 Pass a record to all relevant handlers.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1194
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1195 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
1196 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
1197 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
1198 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
1199 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
1200 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1201 c = self
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1202 found = 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1203 while c:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1204 for hdlr in c.handlers:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1205 found = found + 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1206 if record.levelno >= hdlr.level:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1207 hdlr.handle(record)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1208 if not c.propagate:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1209 c = None #break out
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1210 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1211 c = c.parent
35787
1661e73c07ab One-off "No handlers..." error message only raised if raiseExceptions is set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 35749
diff changeset
1212 if (found == 0) and raiseExceptions and not self.manager.emittedNoHandlerWarning:
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1213 sys.stderr.write("No handlers could be found for logger"
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1214 " \"%s\"\n" % self.name)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1215 self.manager.emittedNoHandlerWarning = 1
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1216
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1217 def getEffectiveLevel(self):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1218 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1219 Get the effective level for this logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1220
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1221 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
1222 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
1223 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1224 logger = self
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1225 while logger:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1226 if logger.level:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1227 return logger.level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1228 logger = logger.parent
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1229 return NOTSET
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1230
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1231 def isEnabledFor(self, level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1232 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1233 Is this logger enabled for level 'level'?
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1234 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1235 if self.manager.disable >= level:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1236 return 0
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1237 return level >= self.getEffectiveLevel()
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1238
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1239 class RootLogger(Logger):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1240 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1241 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
1242 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
1243 the hierarchy.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1244 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1245 def __init__(self, level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1246 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1247 Initialize the logger with the name "root".
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1248 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1249 Logger.__init__(self, "root", level)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1250
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1251 _loggerClass = Logger
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1252
44745
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1253 class LoggerAdapter:
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1254 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1255 An adapter for loggers which makes it easier to specify contextual
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1256 information in logging output.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1257 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1258
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1259 def __init__(self, logger, extra):
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1260 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1261 Initialize the adapter with a logger and a dict-like object which
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1262 provides contextual information. This constructor signature allows
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1263 easy stacking of LoggerAdapters, if so desired.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1264
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1265 You can effectively pass keyword arguments as shown in the
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1266 following example:
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1267
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1268 adapter = LoggerAdapter(someLogger, dict(p1=v1, p2="v2"))
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1269 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1270 self.logger = logger
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1271 self.extra = extra
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1272
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1273 def process(self, msg, kwargs):
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1274 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1275 Process the logging message and keyword arguments passed in to
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1276 a logging call to insert contextual information. You can either
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1277 manipulate the message itself, the keyword args or both. Return
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1278 the message and kwargs modified (or not) to suit your needs.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1279
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1280 Normally, you'll only need to override this one method in a
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1281 LoggerAdapter subclass for your specific needs.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1282 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1283 kwargs["extra"] = self.extra
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1284 return msg, kwargs
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1285
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1286 def debug(self, msg, *args, **kwargs):
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1287 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1288 Delegate a debug call to the underlying logger, after adding
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1289 contextual information from this adapter instance.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1290 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1291 msg, kwargs = self.process(msg, kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1292 self.logger.debug(msg, *args, **kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1293
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1294 def info(self, msg, *args, **kwargs):
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1295 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1296 Delegate an info call to the underlying logger, after adding
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1297 contextual information from this adapter instance.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1298 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1299 msg, kwargs = self.process(msg, kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1300 self.logger.info(msg, *args, **kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1301
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1302 def warning(self, msg, *args, **kwargs):
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1303 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1304 Delegate a warning call to the underlying logger, after adding
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1305 contextual information from this adapter instance.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1306 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1307 msg, kwargs = self.process(msg, kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1308 self.logger.warning(msg, *args, **kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1309
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1310 def error(self, msg, *args, **kwargs):
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1311 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1312 Delegate an error call to the underlying logger, after adding
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1313 contextual information from this adapter instance.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1314 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1315 msg, kwargs = self.process(msg, kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1316 self.logger.error(msg, *args, **kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1317
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1318 def exception(self, msg, *args, **kwargs):
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1319 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1320 Delegate an exception call to the underlying logger, after adding
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1321 contextual information from this adapter instance.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1322 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1323 msg, kwargs = self.process(msg, kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1324 kwargs["exc_info"] = 1
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1325 self.logger.error(msg, *args, **kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1326
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1327 def critical(self, msg, *args, **kwargs):
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1328 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1329 Delegate a critical call to the underlying logger, after adding
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1330 contextual information from this adapter instance.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1331 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1332 msg, kwargs = self.process(msg, kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1333 self.logger.critical(msg, *args, **kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1334
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1335 def log(self, level, msg, *args, **kwargs):
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1336 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1337 Delegate a log call to the underlying logger, after adding
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1338 contextual information from this adapter instance.
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1339 """
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1340 msg, kwargs = self.process(msg, kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1341 self.logger.log(level, msg, *args, **kwargs)
dbf0856776dd Added LoggerAdapter class, changed copyright dates, made check for extra parameter passed to logging methods explicitly against None rather than a truth value.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43445
diff changeset
1342
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1343 root = RootLogger(WARNING)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1344 Logger.root = root
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1345 Logger.manager = Manager(Logger.root)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1346
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1347 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1348 # Configuration classes and functions
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1349 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1350
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1351 BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s"
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1352
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1353 def basicConfig(**kwargs):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1354 """
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1355 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
1356
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1357 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
1358 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
1359 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
1360
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1361 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
1362 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
1363 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
1364
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1365 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
1366 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
1367
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1368 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
1369 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
1370 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
1371 (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
1372 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
1373 datefmt Use the specified date/time format.
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1374 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
1375 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
1376 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
1377 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
1378
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1379 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
1380 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
1381 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
1382 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
1383 when the handler is closed.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1384 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1385 if len(root.handlers) == 0:
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1386 filename = kwargs.get("filename")
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1387 if filename:
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
1388 mode = kwargs.get("filemode", 'a')
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1389 hdlr = FileHandler(filename, mode)
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1390 else:
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1391 stream = kwargs.get("stream")
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1392 hdlr = StreamHandler(stream)
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1393 fs = kwargs.get("format", BASIC_FORMAT)
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1394 dfs = kwargs.get("datefmt", None)
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1395 fmt = Formatter(fs, dfs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1396 hdlr.setFormatter(fmt)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1397 root.addHandler(hdlr)
32479
fe80f772bfa1 Changed basicConfig() to add keyword arguments. Changes are backward-compatible.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 31597
diff changeset
1398 level = kwargs.get("level")
43442
856f8ea922df Change to basicConfig() to fix #1021.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 43441
diff changeset
1399 if level is not None:
32528
67539cfcf09f Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 32479
diff changeset
1400 root.setLevel(level)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1401
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1402 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1403 # Utility functions at module level.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1404 # Basically delegate everything to the root logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1405 #---------------------------------------------------------------------------
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1406
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1407 def getLogger(name=None):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1408 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1409 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
1410
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1411 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
1412 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1413 if name:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1414 return Logger.manager.getLogger(name)
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1415 else:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1416 return root
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1417
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1418 #def getRootLogger():
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1419 # """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1420 # Return the root logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1421 #
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1422 # Note that getLogger('') now does the same thing, so this function is
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1423 # deprecated and may disappear in the future.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1424 # """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1425 # return root
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1426
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1427 def critical(msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1428 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1429 Log a message with severity 'CRITICAL' on the root logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1430 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1431 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1432 basicConfig()
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1433 root.critical(*((msg,)+args), **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1434
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1435 fatal = critical
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1436
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1437 def error(msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1438 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1439 Log a message with severity 'ERROR' on the root logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1440 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1441 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1442 basicConfig()
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1443 root.error(*((msg,)+args), **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1444
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1445 def exception(msg, *args):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1446 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1447 Log a message with severity 'ERROR' on the root logger,
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1448 with exception information.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1449 """
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1450 error(*((msg,)+args), **{'exc_info': 1})
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1451
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1452 def warning(msg, *args, **kwargs):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1453 """
27932
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1454 Log a message with severity 'WARNING' on the root logger.
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1455 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1456 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1457 basicConfig()
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1458 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
1459
ac683ac6759a SF patch #687683, Patches to logging (updates from Vinay)
Neal Norwitz <nnorwitz@gmail.com>
parents: 27349
diff changeset
1460 warn = warning
26183
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 def info(msg, *args, **kwargs):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1463 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1464 Log a message with severity 'INFO' on the root logger.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1465 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1466 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1467 basicConfig()
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1468 root.info(*((msg,)+args), **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1469
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1470 def debug(msg, *args, **kwargs):
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 Log a message with severity 'DEBUG' on the root logger.
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 if len(root.handlers) == 0:
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1475 basicConfig()
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1476 root.debug(*((msg,)+args), **kwargs)
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1477
33556
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1478 def log(level, msg, *args, **kwargs):
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1479 """
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1480 Log 'msg % args' with the integer severity 'level' on the root logger.
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1481 """
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1482 if len(root.handlers) == 0:
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1483 basicConfig()
48153
c77ac8bdd3fe Remove dict.has_key() and apply() usage from the logging package to silence
Brett Cannon <bcannon@gmail.com>
parents: 47745
diff changeset
1484 root.log(*((level, msg)+args), **kwargs)
33556
fd934778f4b4 Added log() function
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 33535
diff changeset
1485
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1486 def disable(level):
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1487 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1488 Disable all logging calls less severe than 'level'.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1489 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1490 root.manager.disable = level
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1491
39439
1087df00a6e8 logging's atexit hook now runs even if the rest of the module has
Georg Brandl <georg@python.org>
parents: 38214
diff changeset
1492 def shutdown(handlerList=_handlerList):
26183
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1493 """
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1494 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
1495 buffers).
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1496
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1497 Should be called at application exit.
f72b1f8684a2 Adding Vinay Sajip's logging package.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1498 """
39439
1087df00a6e8 logging's atexit hook now runs even if the rest of the module has
Georg Brandl <georg@python.org>
parents: 38214
diff changeset
1499 for h in handlerList[:]:
32856
06a63c35df9e Ignore exceptions which occur when closing files in shutdown()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32546
diff changeset
1500 #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
1501 #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
1502 try:
06a63c35df9e Ignore exceptions which occur when closing files in shutdown()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32546
diff changeset
1503 h.flush()
06a63c35df9e Ignore exceptions which occur when closing files in shutdown()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32546
diff changeset
1504 h.close()
06a63c35df9e Ignore exceptions which occur when closing files in shutdown()
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 32546
diff changeset
1505 except:
36468
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1506 if raiseExceptions:
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1507 raise
3cf8a9ed446b Propagate exceptions from shutdown() if raiseExceptions is not set.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 36456
diff changeset
1508 #else, swallow
31563
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1509
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1510 #Let's try and shutdown automatically on application exit...
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1511 try:
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1512 import atexit
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1513 atexit.register(shutdown)
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1514 except ImportError: # for Python versions < 2.0
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1515 def exithook(status, old_exit=sys.exit):
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1516 try:
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1517 shutdown()
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1518 finally:
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1519 old_exit(status)
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1520
475bf4e7920e Copyright year & version number/version date changes.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 29624
diff changeset
1521 sys.exit = exithook
49955
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1522
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1523 # Null handler
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1524
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1525 class NullHandler(Handler):
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1526 """
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1527 This handler does nothing. It's intended to be used to avoid the
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1528 "No handlers could be found for logger XXX" one-off warning. This is
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1529 important for library code, which may contain code to log events. If a user
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1530 of the library does not configure logging, the one-off warning might be
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1531 produced; to avoid this, the library developer simply needs to instantiate
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1532 a NullHandler and add it to the top-level logger of the library module or
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1533 package.
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1534 """
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1535 def emit(self, record):
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1536 pass
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1537
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1538 # Warnings integration
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1539
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1540 _warnings_showwarning = None
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1541
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1542 def _showwarning(message, category, filename, lineno, file=None, line=None):
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1543 """
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1544 Implementation of showwarnings which redirects to logging, which will first
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1545 check to see if the file parameter is None. If a file is specified, it will
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1546 delegate to the original warnings implementation of showwarning. Otherwise,
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1547 it will call warnings.formatwarning and will log the resulting string to a
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1548 warnings logger named "py.warnings" with level logging.WARNING.
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1549 """
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1550 if file is not None:
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1551 if _warnings_showwarning is not None:
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1552 _warnings_showwarning(message, category, filename, lineno, file, line)
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1553 else:
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1554 s = warnings.formatwarning(message, category, filename, lineno, line)
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1555 logger = getLogger("py.warnings")
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1556 if not logger.handlers:
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1557 logger.addHandler(NullHandler())
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1558 logger.warning("%s", s)
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1559
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1560 def captureWarnings(capture):
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1561 """
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1562 If capture is true, redirect all warnings to the logging package.
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1563 If capture is False, ensure that warnings are not redirected to logging
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1564 but to their original destinations.
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1565 """
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1566 global _warnings_showwarning
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1567 if capture:
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1568 if _warnings_showwarning is None:
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1569 _warnings_showwarning = warnings.showwarning
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1570 warnings.showwarning = _showwarning
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1571 else:
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1572 if _warnings_showwarning is not None:
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1573 warnings.showwarning = _warnings_showwarning
878d40468c4e Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 49009
diff changeset
1574 _warnings_showwarning = None