blob: c3e186ea4b73d632e47a9919655bf8e8bbb5acc6 [file] [log] [blame]
#!/usr/bin/env python2
# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This module brings together the magic to setup logging correctly for
# pseudomodem.
import logging
import logging.handlers
import os
import sys
SYSLOG_DEVICE = '/dev/log'
class ModemManagerFormatter(logging.Formatter):
"""
Format log strings such that rsyslogd handles them correctly.
By adding a prefix 'ModemManager[xxx]' where |xxx| contains the pid, we can
ensure that rsyslogd treats the messages the same way it treats messages
from ModemManager.
"""
def __init__(self, *args, **kwargs):
super(ModemManagerFormatter, self).__init__(*args, **kwargs)
self._pid = os.getpid()
def format(self, record):
"""
The main function that converts log records to strings.
@param record: The log record.
@returns: The formatted log string.
"""
result = super(ModemManagerFormatter, self).format(record)
return 'pseudomodem[%d]: %s' % (self._pid, result)
def SetupLogging():
"""
The main function that sets up logging as expected. It does the following:
(1) Clear out existing logging setup that leaks in during autotest import.
(2) Setup logging handler to log to stdout
(3) Setup logging handler to log to syslog.
"""
root = logging.getLogger()
for handler in root.handlers:
root.removeHandler(handler)
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_formatter = logging.Formatter(
fmt='%(asctime)s %(levelname)-5.5s| %(message)s',
datefmt='%H:%M:%S')
stdout_handler.setFormatter(stdout_formatter)
root.addHandler(stdout_handler)
syslog_handler = logging.handlers.SysLogHandler(
SYSLOG_DEVICE,
facility=logging.handlers.SysLogHandler.LOG_DAEMON)
syslog_formatter = ModemManagerFormatter(
fmt='%(levelname)-5.5s|%(module)10.10s:%(lineno)4.4d| %(message)s')
syslog_handler.setFormatter(syslog_formatter)
root.addHandler(syslog_handler)