Revision 59f187eb
b/daemons/ganeti-masterd | ||
---|---|---|
306 | 306 |
|
307 | 307 |
utils.WritePidFile(constants.MASTERD_PID) |
308 | 308 |
|
309 |
logger.SetupDaemon(constants.LOG_MASTERDAEMON, debug=options.debug,
|
|
310 |
stderr_logging=not options.fork) |
|
309 |
logger.SetupLogging(constants.LOG_MASTERDAEMON, debug=options.debug,
|
|
310 |
stderr_logging=not options.fork)
|
|
311 | 311 |
|
312 | 312 |
logging.info("ganeti master daemon startup") |
313 | 313 |
|
b/daemons/ganeti-noded | ||
---|---|---|
617 | 617 |
|
618 | 618 |
utils.WritePidFile(constants.NODED_PID) |
619 | 619 |
|
620 |
logger.SetupDaemon(logfile=constants.LOG_NODESERVER, debug=options.debug,
|
|
621 |
stderr_logging=not options.fork) |
|
620 |
logger.SetupLogging(logfile=constants.LOG_NODESERVER, debug=options.debug,
|
|
621 |
stderr_logging=not options.fork)
|
|
622 | 622 |
logging.info("ganeti node daemon startup") |
623 | 623 |
|
624 | 624 |
if options.fork: |
b/daemons/ganeti-watcher | ||
---|---|---|
438 | 438 |
""" |
439 | 439 |
options, args = ParseOptions() |
440 | 440 |
|
441 |
logger.SetupDaemon(constants.LOG_WATCHER, debug=options.debug)
|
|
441 |
logger.SetupLogging(constants.LOG_WATCHER, debug=options.debug)
|
|
442 | 442 |
|
443 | 443 |
try: |
444 | 444 |
try: |
b/lib/cli.py | ||
---|---|---|
512 | 512 |
for key, val in override.iteritems(): |
513 | 513 |
setattr(options, key, val) |
514 | 514 |
|
515 |
logger.SetupLogging(program=binary, debug=options.debug) |
|
515 |
logger.SetupLogging(constants.LOG_COMMANDS, debug=options.debug, |
|
516 |
stderr_logging=True, program=binary) |
|
516 | 517 |
|
517 | 518 |
utils.debug = options.debug |
518 | 519 |
|
b/lib/constants.py | ||
---|---|---|
116 | 116 |
LOG_RAPISERVER = LOG_DIR + "rapi-daemon.log" |
117 | 117 |
LOG_RAPIACCESS = LOG_DIR + "rapi-access.log" |
118 | 118 |
LOG_COMMANDS = LOG_DIR + "commands.log" |
119 |
LOG_BURNING = LOG_DIR + "burnin.log" |
|
119 | 120 |
|
120 | 121 |
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH |
121 | 122 |
EXPORT_DIR = _autoconf.EXPORT_DIR |
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 |
b/tools/burnin | ||
---|---|---|
63 | 63 |
|
64 | 64 |
def __init__(self): |
65 | 65 |
"""Constructor.""" |
66 |
logger.SetupLogging(program="ganeti/burnin", debug=False)
|
|
66 |
logger.SetupLogging(constants.LOG_BURNIN, debug=False, stderr_logging=True)
|
|
67 | 67 |
self._feed_buf = StringIO() |
68 | 68 |
self.nodes = [] |
69 | 69 |
self.instances = [] |
Also available in: Unified diff