LSSTApplications  11.0-13-gbb96280,12.1.rc1,12.1.rc1+1,12.1.rc1+2,12.1.rc1+5,12.1.rc1+8,12.1.rc1-1-g06d7636+1,12.1.rc1-1-g253890b+5,12.1.rc1-1-g3d31b68+7,12.1.rc1-1-g3db6b75+1,12.1.rc1-1-g5c1385a+3,12.1.rc1-1-g83b2247,12.1.rc1-1-g90cb4cf+6,12.1.rc1-1-g91da24b+3,12.1.rc1-2-g3521f8a,12.1.rc1-2-g39433dd+4,12.1.rc1-2-g486411b+2,12.1.rc1-2-g4c2be76,12.1.rc1-2-gc9c0491,12.1.rc1-2-gda2cd4f+6,12.1.rc1-3-g3391c73+2,12.1.rc1-3-g8c1bd6c+1,12.1.rc1-3-gcf4b6cb+2,12.1.rc1-4-g057223e+1,12.1.rc1-4-g19ed13b+2,12.1.rc1-4-g30492a7
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, fmt, *args)
85 
86 
87 def trace(fmt, *args):
88  Log.getDefaultLogger()._log(TRACE, fmt, *args)
89 
90 
91 def debug(fmt, *args):
92  Log.getDefaultLogger()._log(DEBUG, fmt, *args)
93 
94 
95 def info(fmt, *args):
96  Log.getDefaultLogger()._log(INFO, fmt, *args)
97 
98 
99 def warn(fmt, *args):
100  Log.getDefaultLogger()._log(WARN, fmt, *args)
101 
102 
103 def error(fmt, *args):
104  Log.getDefaultLogger()._log(ERROR, fmt, *args)
105 
106 
107 def fatal(fmt, *args):
108  Log.getDefaultLogger()._log(FATAL, fmt, *args)
109 
110 
111 def lwpID():
112  return Log.lwpID
113 
114 
115 class LogContext(object):
116  """Context manager for logging."""
117 
118  def __init__(self, name=None, level=None):
119  self.name = name
120  self.level = level
121 
122  def __enter__(self):
123  self.open()
124  return self
125 
126  def __exit__(self, type, value, traceback):
127  self.close()
128 
129  def __del__(self):
130  self.close()
131 
132  def open(self):
133  if self.name is not None:
134  Log.pushContext(self.name)
135  if self.level is not None:
136  Log.getDefaultLogger().setLevel(self.level)
137 
138  def close(self):
139  if self.name is not None:
140  Log.popContext()
141  self.name = None
142 
143  def setLevel(self, level):
144  Log.getDefaultLogger().setLevel(level)
145 
146  def getLevel(self):
147  return Log.getDefaultLogger().getLevel()
148 
149  def isEnabledFor(self, level):
150  return Log.getDefaultLogger().isEnabledFor(level)
151 
152 
153 class LogHandler(logging.Handler):
154  """Handler for Python logging module that emits to LSST logging."""
155 
156  def __init__(self, name=None, level=None):
157  self.context = LogContext(name=name, level=level)
158  self.context.open()
159  logging.Handler.__init__(self)
160 
161  def __del__(self):
162  self.close()
163 
164  def close(self):
165  if self.context is not None:
166  self.context.close()
167  self.context = None
168  logging.Handler.close(self)
169 
170  def handle(self, record):
171  if self.context.isEnabledFor(self.translateLevel(record.levelno)):
172  logging.Handler.handle(self, record)
173 
174  def emit(self, record):
175  Log.getLogger(record.name).logMsg(self.translateLevel(record.levelno), record.filename,
176  record.funcName, record.lineno, record.msg % record.args)
177 
178  def translateLevel(self, levelno):
179  """
180  Translates from standard python logging module levels
181  to standard log4cxx levels.
182  """
183  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 configure
Definition: log.py:39
def info
Definition: log.py:95
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 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 pushContext
Definition: log.py:51
def lwpID
Definition: log.py:111
def debug
Definition: log.py:91
def getDefaultLoggerName
Definition: log.py:47