blob: b1fca8cc77f8007882fbab88c5b045f1b9a862f0 [file] [log] [blame]
xixuan52c2fba2016-05-21 00:02:481# Copyright 2016 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""A logging strategy for cros-update.
6
71. Logging format is set as the same as autoserv.
82. Globally, set log level of output as 'DEBUG'.
93. For control output, set LEVEL as 'INFO', to avoid unnecessary logs in
10 cherrypy logs.
114. Add file handler to record all logs above level 'DEBUG' into file.
12"""
13
14from __future__ import print_function
15
16import logging
17import sys
18
19
20class loggingConfig(object):
21 """Configuration for auto-update logging."""
22
23 LOGGING_FORMAT = ('%(asctime)s.%(msecs)03d %(levelname)-5.5s|%(module)18.18s:'
24 '%(lineno)4.4d| %(message)s')
25
26 def __init__(self):
27 self.logger = logging.getLogger()
28 self.GLOBAL_LEVEL = logging.DEBUG
29 self.CONSOLE_LEVEL = logging.INFO
30 self.FILE_LEVEL = logging.DEBUG
31 self.ENABLE_CONSOLE_LOGGING = False
32
33 def SetControlHandler(self, stream):
34 """Set console handler for logging.
35
36 Args:
37 stream: The input stream, could be stdout/stderr.
38 """
39 handler = logging.StreamHandler(stream)
40 handler.setLevel(self.CONSOLE_LEVEL)
41 file_formatter = logging.Formatter(fmt=self.LOGGING_FORMAT,
42 datefmt='%Y/%m/%d %H:%M:%S')
43 handler.setFormatter(file_formatter)
44 self.logger.addHandler(handler)
45 return handler
46
47
48 def SetFileHandler(self, file_name):
49 """Set file handler for logging.
50
51 Args:
52 file_name: The file to save logs into.
53 """
54 handler = logging.FileHandler(file_name)
55 handler.setLevel(self.FILE_LEVEL)
56 # file format is set as same as concole format
57 file_formatter = logging.Formatter(fmt=self.LOGGING_FORMAT,
58 datefmt='%Y/%m/%d %H:%M:%S')
59 handler.setFormatter(file_formatter)
60 self.logger.addHandler(handler)
61
62
63 def ConfigureLogging(self):
64 self.logger.setLevel(self.GLOBAL_LEVEL)
65 if self.ENABLE_CONSOLE_LOGGING:
66 self.SetControlHandler(sys.stdout)