LSSTApplications  11.0-13-gbb96280,12.1+18,12.1+7,12.1-1-g14f38d3+72,12.1-1-g16c0db7+5,12.1-1-g5961e7a+84,12.1-1-ge22e12b+23,12.1-11-g06625e2+4,12.1-11-g0d7f63b+4,12.1-19-gd507bfc,12.1-2-g7dda0ab+38,12.1-2-gc0bc6ab+81,12.1-21-g6ffe579+2,12.1-21-gbdb6c2a+4,12.1-24-g941c398+5,12.1-3-g57f6835+7,12.1-3-gf0736f3,12.1-37-g3ddd237,12.1-4-gf46015e+5,12.1-5-g06c326c+20,12.1-5-g648ee80+3,12.1-5-gc2189d7+4,12.1-6-ga608fc0+1,12.1-7-g3349e2a+5,12.1-7-gfd75620+9,12.1-9-g577b946+5,12.1-9-gc4df26a+10
LSSTDataManagementBasePackage
log.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 #
4 # LSST Data Management System
5 # Copyright 2013 LSST Corporation.
6 #
7 # This product includes software developed by the
8 # LSST Project (http://www.lsst.org/).
9 #
10 # This program is free software: you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation, either version 3 of the License, or
13 # (at your option) any later version.
14 #
15 # This program is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 # GNU General Public License for more details.
19 #
20 # You should have received a copy of the LSST License Statement and
21 # the GNU General Public License along with this program. If not,
22 # see <http://www.lsstcorp.org/LegalNotices/>.
23 #
24 
25 import logging
26 
27 from .logLib import Log
28 
29 TRACE = Log.TRACE
30 DEBUG = Log.DEBUG
31 INFO = Log.INFO
32 WARN = Log.WARN
33 ERROR = Log.ERROR
34 FATAL = Log.FATAL
35 
36 # Export static functions from Log class to module namespace
37 
38 
39 def configure(*args):
40  Log.configure(*args)
41 
42 
43 def configure_prop(properties):
44  Log.configure_prop(properties)
45 
46 
48  return Log.getDefaultLoggerName()
49 
50 
51 def pushContext(name):
52  Log.pushContext(name)
53 
54 
55 def popContext():
56  Log.popContext()
57 
58 
59 def MDC(key, value):
60  Log.MDC(key, str(value))
61 
62 
63 def MDCRemove(key):
64  Log.MDCRemove(key)
65 
66 
67 def MDCRegisterInit(func):
68  Log.MDCRegisterInit(func)
69 
70 
71 def setLevel(loggername, level):
72  Log.getLogger(loggername).setLevel(level)
73 
74 
75 def getLevel(loggername):
76  Log.getLogger(loggername).getLevel()
77 
78 
79 def isEnabledFor(logger, level):
80  Log.getLogger(logger).isEnabledFor(level)
81 
82 
83 def log(loggername, level, fmt, *args, **kwargs):
84  Log.getLogger(loggername)._log(level, False, fmt, *args)
85 
86 
87 def trace(fmt, *args):
88  Log.getDefaultLogger()._log(TRACE, False, fmt, *args)
89 
90 
91 def debug(fmt, *args):
92  Log.getDefaultLogger()._log(DEBUG, False, fmt, *args)
93 
94 
95 def info(fmt, *args):
96  Log.getDefaultLogger()._log(INFO, False, fmt, *args)
97 
98 
99 def warn(fmt, *args):
100  Log.getDefaultLogger()._log(WARN, False, fmt, *args)
101 
102 
103 def error(fmt, *args):
104  Log.getDefaultLogger()._log(ERROR, False, fmt, *args)
105 
106 
107 def fatal(fmt, *args):
108  Log.getDefaultLogger()._log(FATAL, False, fmt, *args)
109 
110 
111 def logf(loggername, level, fmt, *args, **kwargs):
112  Log.getLogger(loggername)._log(level, True, fmt, *args, **kwargs)
113 
114 
115 def tracef(fmt, *args, **kwargs):
116  Log.getDefaultLogger()._log(TRACE, True, fmt, *args, **kwargs)
117 
118 
119 def debugf(fmt, *args, **kwargs):
120  Log.getDefaultLogger()._log(DEBUG, True, fmt, *args, **kwargs)
121 
122 
123 def infof(fmt, *args, **kwargs):
124  Log.getDefaultLogger()._log(INFO, True, fmt, *args, **kwargs)
125 
126 
127 def warnf(fmt, *args, **kwargs):
128  Log.getDefaultLogger()._log(WARN, True, fmt, *args, **kwargs)
129 
130 
131 def errorf(fmt, *args, **kwargs):
132  Log.getDefaultLogger()._log(ERROR, True, fmt, *args, **kwargs)
133 
134 
135 def fatalf(fmt, *args, **kwargs):
136  Log.getDefaultLogger()._log(FATAL, True, fmt, *args, **kwargs)
137 
138 
139 def lwpID():
140  return Log.lwpID
141 
142 
143 class LogContext(object):
144  """Context manager for logging."""
145 
146  def __init__(self, name=None, level=None):
147  self.name = name
148  self.level = level
149 
150  def __enter__(self):
151  self.open()
152  return self
153 
154  def __exit__(self, type, value, traceback):
155  self.close()
156 
157  def __del__(self):
158  self.close()
159 
160  def open(self):
161  if self.name is not None:
162  Log.pushContext(self.name)
163  if self.level is not None:
164  Log.getDefaultLogger().setLevel(self.level)
165 
166  def close(self):
167  if self.name is not None:
168  Log.popContext()
169  self.name = None
170 
171  def setLevel(self, level):
172  Log.getDefaultLogger().setLevel(level)
173 
174  def getLevel(self):
175  return Log.getDefaultLogger().getLevel()
176 
177  def isEnabledFor(self, level):
178  return Log.getDefaultLogger().isEnabledFor(level)
179 
180 
181 class LogHandler(logging.Handler):
182  """Handler for Python logging module that emits to LSST logging."""
183 
184  def __init__(self, name=None, level=None):
185  self.context = LogContext(name=name, level=level)
186  self.context.open()
187  logging.Handler.__init__(self)
188 
189  def __del__(self):
190  self.close()
191 
192  def close(self):
193  if self.context is not None:
194  self.context.close()
195  self.context = None
196  logging.Handler.close(self)
197 
198  def handle(self, record):
199  if self.context.isEnabledFor(self.translateLevel(record.levelno)):
200  logging.Handler.handle(self, record)
201 
202  def emit(self, record):
203  Log.getLogger(record.name).logMsg(self.translateLevel(record.levelno),
204  record.filename, record.funcName,
205  record.lineno,
206  record.msg % record.args)
207 
208  def translateLevel(self, levelno):
209  """
210  Translates from standard python logging module levels
211  to standard log4cxx levels.
212  """
213  return levelno*1000
def popContext
Definition: log.py:55
def MDCRegisterInit
Definition: log.py:67
def isEnabledFor
Definition: log.py:79
def getLevel
Definition: log.py:75
def tracef
Definition: log.py:115
def configure
Definition: log.py:39
def errorf
Definition: log.py:131
def info
Definition: log.py:95
def fatalf
Definition: log.py:135
def logf
Definition: log.py:111
def trace
Definition: log.py:87
def fatal
Definition: log.py:107
def error
Definition: log.py:103
def log
Definition: log.py:83
def debugf
Definition: log.py:119
def infof
Definition: log.py:123
def warn
Definition: log.py:99
def setLevel
Definition: log.py:71
def MDC
Definition: log.py:59
def MDCRemove
Definition: log.py:63
def configure_prop
Definition: log.py:43
def warnf
Definition: log.py:127
def pushContext
Definition: log.py:51
def lwpID
Definition: log.py:139
def debug
Definition: log.py:91
def getDefaultLoggerName
Definition: log.py:47