Package x2go :: Module log
[frames] | no frames]

Source Code for Module x2go.log

  1  # -*- coding: utf-8 -*- 
  2   
  3  # Copyright (C) 2010-2011 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de> 
  4  # 
  5  # Python X2go is free software; you can redistribute it and/or modify 
  6  # it under the terms of the GNU General Public License as published by 
  7  # the Free Software Foundation; either version 3 of the License, or 
  8  # (at your option) any later version. 
  9  # 
 10  # Python X2go is distributed in the hope that it will be useful, 
 11  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 13  # GNU General Public License for more details. 
 14  # 
 15  # You should have received a copy of the GNU General Public License 
 16  # along with this program; if not, write to the 
 17  # Free Software Foundation, Inc., 
 18  # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 
 19   
 20  """\ 
 21  X2goLogger class - flexible handling of log and debug output. 
 22   
 23  """ 
 24  __NAME__ = 'x2gologger-pylib' 
 25   
 26  # modules 
 27  import os 
 28  import sys 
 29   
 30  loglevel_NONE = 0 
 31  loglevel_ERROR = 8 
 32  loglevel_WARN = 16 
 33  loglevel_NOTICE = 32 
 34  loglevel_INFO = 64 
 35  loglevel_DEBUG = 128 
 36  loglevel_DEBUG_SFTPXFER = 1024 
 37   
 38  loglevel_DEFAULT = loglevel_ERROR | loglevel_WARN | loglevel_NOTICE 
 39  """\ 
 40  Default loglevel of X2goLogger objects is: NOTICE & WARN & ERROR 
 41  """ 
 42   
 43  # Python X2go modules 
 44  import utils 
 45   
46 -class X2goLogger(object):
47 """\ 48 A simple logger class, that is used by all Python X2go classes. 49 50 """ 51 name = '' 52 tag = '' 53 progpid = -1 54 level = -1 55 destination = sys.stderr 56 57 _loglevel_NAMES = {8: 'error', 58 16: 'warn', 59 32: 'notice', 60 64: 'info', 61 128: 'debug', 62 1024: 'debug-sftpxfer', 63 } 64
65 - def __init__(self, name=sys.argv[0], loglevel=loglevel_DEFAULT, tag=None):
66 """\ 67 @param name: name of the programme that uses Python X2go 68 @type name: C{str} 69 @param loglevel: log level for Python X2go 70 @type loglevel: C{int} 71 @param tag: additional tag for all log entries 72 @type tag: C{str} 73 74 """ 75 self.name = os.path.basename(name) 76 self.tag = tag 77 self.loglevel = loglevel 78 self.progpid = os.getpid()
79
80 - def message(self, msg, loglevel=loglevel_NONE, tag=None):
81 """\ 82 Log a message. 83 84 @param msg: log message text 85 @type msg: C{str} 86 @param loglevel: log level of this message 87 @type loglevel: C{int} 88 @param tag: additional tag for this log entry 89 @type tag: C{str} 90 91 """ 92 if tag is None: 93 tag = self.tag 94 if loglevel & self.loglevel: 95 96 msg = msg.replace('\n', ' ') 97 msg = msg.encode(utils.get_encoding()) 98 99 if self.tag is not None: 100 self.destination.write('%s[%s] (%s) %s: %s\n' % (self.name, self.progpid, tag, self._loglevel_NAMES[loglevel].upper(), msg)) 101 else: 102 self.destination.write('%s[%s] %s: %s\n' % (self.name, self.progpid, self._loglevel_NAMES[loglevel].upper(), msg))
103 __call__ = message 104
105 - def get_loglevel(self):
106 """\ 107 Get the current loglevel. 108 109 @return: current log level 110 @rtype: C{int} 111 112 """ 113 return self.loglevel
114
115 - def set_loglevel(self, loglevel_name='none'):
116 """\ 117 Set log level by name. 118 119 @param loglevel_name: name of loglevel to be set 120 @type loglevel_name: C{str} 121 122 """ 123 if type(loglevel_name) is types.IntegerType: 124 self.loglevel = loglevel_name 125 elif type(loglevel_name) is types.StringType and loglevel_name in self._loglevel_NAMES.values(): 126 _method = getattr(self, 'self.set_loglevel_%s' % loglevel_name) 127 _method() 128 else: 129 self.loglevel = loglevel_DEFAULT
130
131 - def set_loglevel_quiet(self):
132 """\ 133 Silence logging completely. 134 135 """ 136 self.loglevel = 0
137
138 - def set_loglevel_error(self):
139 """\ 140 Set log level to I{ERROR}. 141 142 """ 143 self.loglevel = loglevel_ERROR
144
145 - def set_loglevel_warn(self):
146 """\ 147 Set log level to I{WARN}. 148 149 """ 150 self.loglevel = loglevel_ERROR | loglevel_WARN
151
152 - def set_loglevel_notice(self):
153 """\ 154 Set log level to I{NOTICE} (default). 155 156 """ 157 self.loglevel = loglevel_ERROR | loglevel_WARN | loglevel_NOTICE
158
159 - def set_loglevel_info(self):
160 """\ 161 Set log level to I{INFO}. 162 163 """ 164 self.loglevel = loglevel_ERROR | loglevel_WARN | loglevel_NOTICE | loglevel_INFO
165
166 - def set_loglevel_debug(self):
167 """\ 168 Set log level to I{DEBUG}. 169 170 """ 171 self.loglevel = loglevel_ERROR | loglevel_WARN | loglevel_NOTICE | loglevel_INFO | loglevel_DEBUG
172
173 - def enable_debug_sftpxfer(self):
174 """\ 175 Additionally, switch on sFTP data transfer debugging 176 177 """ 178 self.loglevel = self.loglevel | loglevel_DEBUG_SFTPXFER
179
180 - def disable_debug_sftpxfer(self):
181 """\ 182 Switch off sFTP data transfer debugging. 183 184 """ 185 self.loglevel = self.loglevel ^ loglevel_DEBUG_SFTPXFER
186