Revision 59f187eb lib/logger.py
b/lib/logger.py | ||
---|---|---|
35 | 35 |
from ganeti import constants |
36 | 36 |
|
37 | 37 |
|
38 |
def _CreateFileHandler(name): |
|
39 |
return logging.FileHandler(os.path.join(constants.LOG_DIR, name)) |
|
40 |
|
|
41 |
|
|
42 |
def SetupLogging(program='ganeti', debug=False): |
|
43 |
"""Setup logging for ganeti |
|
44 |
|
|
45 |
On failure, a check is made whether process is run by root or not, |
|
46 |
and an appropriate error message is printed on stderr, then process |
|
47 |
exits. |
|
48 |
|
|
49 |
Args: |
|
50 |
debug: Whether to enable verbose logging |
|
51 |
program: Program name |
|
38 |
def SetupLogging(logfile, debug=False, stderr_logging=False, program=""): |
|
39 |
"""Configures the logging module. |
|
52 | 40 |
|
53 | 41 |
""" |
54 |
fmt = "%(asctime)s " + program + ": %(message)s" |
|
55 |
formatter = logging.Formatter(fmt) |
|
56 |
|
|
57 |
stderr_fmt = "%(asctime)s: %(message)s" |
|
58 |
stderr_formatter = logging.Formatter(stderr_fmt) |
|
59 |
|
|
60 |
info_file = _CreateFileHandler("info") |
|
61 |
info_file.setLevel(logging.INFO) |
|
62 |
info_file.setFormatter(formatter) |
|
63 |
|
|
64 |
errors_file = _CreateFileHandler("errors") |
|
65 |
errors_file.setLevel(logging.ERROR) |
|
66 |
errors_file.setFormatter(formatter) |
|
67 |
|
|
68 |
debug_file = _CreateFileHandler("debug") |
|
69 |
debug_file.setLevel(logging.DEBUG) |
|
70 |
debug_file.setFormatter(formatter) |
|
71 |
|
|
72 |
stderr_file = logging.StreamHandler() |
|
73 |
stderr_file.setFormatter(stderr_formatter) |
|
42 |
fmt = "%(asctime)s: " + program + " " |
|
74 | 43 |
if debug: |
75 |
stderr_file.setLevel(logging.NOTSET) |
|
76 |
else: |
|
77 |
stderr_file.setLevel(logging.ERROR) |
|
78 |
|
|
79 |
root_logger = logging.getLogger("") |
|
80 |
root_logger.setLevel(logging.NOTSET) |
|
81 |
root_logger.addHandler(info_file) |
|
82 |
root_logger.addHandler(errors_file) |
|
83 |
root_logger.addHandler(debug_file) |
|
84 |
root_logger.addHandler(stderr_file) |
|
85 |
|
|
86 |
|
|
87 |
def SetupDaemon(logfile, debug=False, stderr_logging=False): |
|
88 |
"""Configures the logging module for daemons |
|
89 |
|
|
90 |
""" |
|
91 |
if debug: |
|
92 |
fmt = ("%(asctime)s: pid=%(process)d/%(threadName)s %(levelname)s" |
|
44 |
fmt += ("pid=%(process)d/%(threadName)s %(levelname)s" |
|
93 | 45 |
" %(module)s:%(lineno)s %(message)s") |
94 | 46 |
else: |
95 |
fmt = "%(asctime)s: pid=%(process)d %(levelname)s %(message)s"
|
|
47 |
fmt += "pid=%(process)d %(levelname)s %(message)s"
|
|
96 | 48 |
formatter = logging.Formatter(fmt) |
97 | 49 |
|
98 |
logfile_handler = logging.FileHandler(logfile) |
|
99 |
logfile_handler.setFormatter(formatter) |
|
100 |
|
|
101 |
stderr_handler = logging.StreamHandler() |
|
102 |
stderr_handler.setFormatter(formatter) |
|
103 |
if debug: |
|
104 |
logfile_handler.setLevel(logging.DEBUG) |
|
105 |
stderr_handler.setLevel(logging.NOTSET) |
|
106 |
else: |
|
107 |
logfile_handler.setLevel(logging.INFO) |
|
108 |
stderr_handler.setLevel(logging.CRITICAL) |
|
109 |
|
|
110 | 50 |
root_logger = logging.getLogger("") |
111 | 51 |
root_logger.setLevel(logging.NOTSET) |
112 |
root_logger.addHandler(logfile_handler) |
|
52 |
|
|
113 | 53 |
if stderr_logging: |
54 |
stderr_handler = logging.StreamHandler() |
|
55 |
stderr_handler.setFormatter(formatter) |
|
56 |
if debug: |
|
57 |
stderr_handler.setLevel(logging.NOTSET) |
|
58 |
else: |
|
59 |
stderr_handler.setLevel(logging.CRITICAL) |
|
114 | 60 |
root_logger.addHandler(stderr_handler) |
115 | 61 |
|
62 |
# this can fail, if the logging directories are not setup or we have |
|
63 |
# a permisssion problem; in this case, it's best to log but ignore |
|
64 |
# the error if stderr_logging is True, and if false we re-raise the |
|
65 |
# exception since otherwise we could run but without any logs at all |
|
66 |
try: |
|
67 |
logfile_handler = logging.FileHandler(logfile) |
|
68 |
logfile_handler.setFormatter(formatter) |
|
69 |
if debug: |
|
70 |
logfile_handler.setLevel(logging.DEBUG) |
|
71 |
else: |
|
72 |
logfile_handler.setLevel(logging.INFO) |
|
73 |
root_logger.addHandler(logfile_handler) |
|
74 |
except EnvironmentError, err: |
|
75 |
if stderr_logging: |
|
76 |
logging.exception("Failed to enable logging to file '%s'", logfile) |
|
77 |
else: |
|
78 |
# we need to re-raise the exception |
|
79 |
raise |
|
80 |
|
|
116 | 81 |
|
117 | 82 |
# Backwards compatibility |
118 | 83 |
Error = logging.error |
Also available in: Unified diff