3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
18 import logging.handlers
20 from dss.api import dss_error
24 levels = {'debug': logging.DEBUG,
26 'warning': logging.WARNING,
27 'error': logging.error}
31 dests = {'console': DEST_CONSOLE,
32 'syslog': DEST_SYSLOG}
34 def __init__(self, dest, verbose, level):
35 self.verbose = verbose
36 self.dest = Logger.str_to_dest(dest)
37 self.level = Logger.str_to_level(level)
43 if self.level not in Logger.levels.values():
44 raise dss_error.Error('Invalid level value, possible values are %s' % str(Logger.levels))
46 if self.dest not in Logger.dests.values():
47 raise dss_error.Error('Invalid destination value, possible values are %s' % str(Logger.dests))
50 if self.dest is Logger.DEST_CONSOLE:
51 args['format'] = '[%(asctime)s %(levelname)7s %(module)s(%(lineno)3s)] %(message)s'
53 args['format'] = '[%(module)s(%(lineno)3s)] %(message)s'
55 args['format'] = '%(message)s'
57 if self.dest is Logger.DEST_CONSOLE:
58 args['stream'] = sys.stdout
59 elif self.dest is Logger.DEST_SYSLOG:
60 logging.getLogger('').addHandler(logging.handlers.SysLogHandler(address='/dev/log'))
62 args['level'] = self.level
63 logging.basicConfig(**args)
65 def set_level(self, level):
66 self.level = Logger.str_to_level(level)
69 def set_dest(self, dest):
70 self.dest = Logger.str_to_dest(dest)
74 def str_to_level(level):
77 ret = Logger.levels[level]
78 except KeyError as exp:
79 raise dss_error.Error('Invalid log level, possible values %s' % str(Logger.levels.keys()))
83 def str_to_dest(dest):
86 ret = Logger.dests[dest]
87 except KeyError as exp:
88 raise dss_error.Error('Invalid destination, possible values %s' % str(Logger.dests.keys()))
92 def level_to_str(level):
93 for key, value in Logger.levels.iteritems():
99 def dest_to_str(dest):
100 for key, value in Logger.dests.iteritems():
105 if __name__ == '__main__':
106 dest = Logger.str_to_dest('console')
107 level = Logger.str_to_level('debug')
108 logger = Logger(dest, True, level)
110 logging.error('hello %s!' % world)
111 logging.warn('hello %s!' % world)
112 logging.info('hello %s!' % world)
113 logging.debug('hello %s!' % world)