glusterfs
77 строк · 2.3 Кб
1# -*- coding: utf-8 -*-
2#
3# Copyright (c) 2016 Red Hat, Inc. <http://www.redhat.com>
4# This file is part of GlusterFS.
5#
6# This file is licensed to you under your choice of the GNU Lesser
7# General Public License, version 3 or any later version (LGPLv3 or
8# later), or the GNU General Public License, version 2 (GPLv2), in all
9# cases as published by the Free Software Foundation.
10#
11
12import logging13from logging import Logger, handlers14import sys15import time16
17
18class GLogger(Logger):19
20"""Logger customizations for gsyncd.21
22It implements a log format similar to that of glusterfs.
23"""
24
25def makeRecord(self, name, level, *a):26rv = Logger.makeRecord(self, name, level, *a)27rv.nsecs = (rv.created - int(rv.created)) * 100000028fr = sys._getframe(4)29callee = fr.f_locals.get('self')30if callee:31ctx = str(type(callee)).split("'")[1].split('.')[-1]32else:33ctx = '<top>'34if not hasattr(rv, 'funcName'):35rv.funcName = fr.f_code.co_name36rv.lvlnam = logging.getLevelName(level)[0]37rv.ctx = ctx38return rv39
40
41LOGFMT = ("[%(asctime)s.%(nsecs)d] %(lvlnam)s [%(module)s{0}"42":%(lineno)s:%(funcName)s] %(ctx)s: %(message)s")43
44
45def setup_logging(level="INFO", label="", log_file=""):46if label:47label = "(" + label + ")"48
49filename = None50stream = None51if log_file:52if log_file in ('-', '/dev/stderr'):53stream = sys.stderr54elif log_file == '/dev/stdout':55stream = sys.stdout56else:57filename = log_file58
59datefmt = "%Y-%m-%d %H:%M:%S"60fmt = LOGFMT.format(label)61logging.root = GLogger("root", level)62logging.setLoggerClass(GLogger)63logging.Formatter.converter = time.gmtime # Log in GMT/UTC time64logging.getLogger().handlers = []65logging.getLogger().setLevel(level)66
67if filename is not None:68logging_handler = handlers.WatchedFileHandler(filename)69formatter = logging.Formatter(fmt=fmt,70datefmt=datefmt)71logging_handler.setFormatter(formatter)72logging.getLogger().addHandler(logging_handler)73else:74logging.basicConfig(stream=stream,75format=fmt,76datefmt=datefmt,77level=level)78