artiq/artiq/master/log.py

63 lines
2.3 KiB
Python
Raw Normal View History

import logging
2015-10-15 23:47:31 +08:00
import logging.handlers
2019-11-10 15:55:17 +08:00
from sipyco.logging_tools import SourceFilter
class LogForwarder(logging.Handler):
def __init__(self, *args, **kwargs):
logging.Handler.__init__(self, *args, **kwargs)
self.callback = None
self.setFormatter(logging.Formatter("%(name)s:%(message)s"))
def emit(self, record):
if self.callback is not None:
message = self.format(record)
self.callback((record.levelno, record.source, record.created,
message))
2016-02-10 13:33:41 +08:00
def log_args(parser):
2015-10-15 23:47:31 +08:00
group = parser.add_argument_group("logging")
group.add_argument("-v", "--verbose", default=0, action="count",
2015-10-15 23:47:31 +08:00
help="increase logging level of the master process")
group.add_argument("-q", "--quiet", default=0, action="count",
2015-10-15 23:47:31 +08:00
help="decrease logging level of the master process")
group.add_argument("--log-file", default="",
help="store logs in rotated files; set the "
"base filename")
group.add_argument("--log-backup-count", type=int, default=0,
help="number of old log files to keep, or 0 to keep "
"all log files. '.<yyyy>-<mm>-<dd>' is added "
2015-10-15 23:47:31 +08:00
"to the base filename (default: %(default)d)")
def init_log(args):
root_logger = logging.getLogger()
root_logger.setLevel(logging.NOTSET) # we use our custom filter only
2015-10-16 20:08:11 +08:00
flt = SourceFilter(logging.WARNING + args.quiet*10 - args.verbose*10,
"master")
handlers = []
console_handler = logging.StreamHandler()
2015-10-17 10:26:54 +08:00
console_handler.setFormatter(logging.Formatter(
"%(levelname)s:%(source)s:%(name)s:%(message)s"))
handlers.append(console_handler)
2015-10-15 23:47:31 +08:00
if args.log_file:
file_handler = logging.handlers.TimedRotatingFileHandler(
2015-10-15 23:47:31 +08:00
args.log_file,
when="midnight",
2015-10-15 23:47:31 +08:00
backupCount=args.log_backup_count)
2015-10-17 10:26:54 +08:00
file_handler.setFormatter(logging.Formatter(
"%(asctime)s %(levelname)s:%(source)s:%(name)s:%(message)s"))
2015-10-15 23:47:31 +08:00
handlers.append(file_handler)
log_forwarder = LogForwarder()
handlers.append(log_forwarder)
for handler in handlers:
handler.addFilter(flt)
root_logger.addHandler(handler)
return log_forwarder