Home | Trees | Indices | Help |
---|
|
1 #!/usr/bin/env python 2 # --------------------------------------------------------------------------- 3 4 """ 5 Provides some classes and functions for use with the standard Python 6 ``logging`` module. 7 """ 8 9 __docformat__ = "restructuredtext en" 10 11 # --------------------------------------------------------------------------- 12 # Imports 13 # --------------------------------------------------------------------------- 14 15 import logging 16 import sys 17 import textwrap 18 19 # --------------------------------------------------------------------------- 20 # Exports 21 # --------------------------------------------------------------------------- 22 23 __all__ = ['WrappingLogFormatter', 'init_simple_stream_logging'] 24 25 # --------------------------------------------------------------------------- 26 # Classes 27 # --------------------------------------------------------------------------- 2830 """ 31 A ``logging`` ``Formatter`` class that writes each message wrapped on line 32 boundaries. Here's a typical usage scenario: 33 34 .. python:: 35 36 import logging 37 import sys 38 from grizzled.log import WrappingLogFormatter 39 40 stderr_handler = logging.StreamHandler(sys.stderr) 41 formatter = WrappingLogFormatter(format='%(levelname)s %(message)s") 42 stderr_handler.setLevel(logging.WARNING) 43 stderr_handler.setFormatter(formatter) 44 logging.getLogger('').handlers = [stderr_handler] 45 """71 72 # --------------------------------------------------------------------------- 73 # Functions 74 # --------------------------------------------------------------------------- 7547 """ 48 Initialize a new ``WrappingLogFormatter``. 49 50 :Parameters: 51 format : str 52 The format to use, or ``None`` for the logging default 53 54 date_format : str 55 Date format, or ``None`` for the logging default 56 57 max_width : int 58 Maximum line width, or ``None`` to default to 79./ 59 """ 60 self.wrapper = textwrap.TextWrapper(width=max_width, 61 subsequent_indent=' ') 62 logging.Formatter.__init__(self, format, date_format)6365 s = logging.Formatter.format(self, record) 66 result = [] 67 for line in s.split('\n'): 68 result += [self.wrapper.fill(line)] 69 70 return '\n'.join(result)76 -def init_simple_stream_logging(level=logging.INFO, 77 streams=None, 78 format=None, 79 date_format=None):80 """ 81 Useful for simple command-line tools, this method configures the Python 82 logging API to: 83 84 - log to one or more open streams (defaulting to standard output) and 85 - use a ``WrappingLogFormatter`` 86 87 :Parameters: 88 level : int 89 Desired log level 90 91 streams : list 92 List of files or file-like objects to which to log, or ``None`` 93 to log to standard output only 94 95 format : str 96 Log format to use, or ``None`` to use a reasonable default 97 98 date_format : str 99 Date format to use in logging, or ``None`` to use a reasonable 100 default 101 """ 102 if not streams: 103 streams = [sys.stdout] 104 105 if not format: 106 format = '%(asctime)s %(message)s' 107 108 if not date_format: 109 date_format = '%H:%M:%S' 110 111 logging.basicConfig(level=level) 112 handlers = [] 113 114 formatter = WrappingLogFormatter(format=format, date_format=date_format) 115 for stream in streams: 116 log_handler = logging.StreamHandler(stream) 117 log_handler.setLevel(level) 118 log_handler.setFormatter(formatter) 119 120 handlers += [log_handler] 121 122 logging.getLogger('').handlers = handlers123
Home | Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Mon Mar 14 15:21:07 2016 | http://epydoc.sourceforge.net |