glusterfs

Форк
0
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

12
import logging
13
from logging import Logger, handlers
14
import sys
15
import time
16

17

18
class GLogger(Logger):
19

20
    """Logger customizations for gsyncd.
21

22
    It implements a log format similar to that of glusterfs.
23
    """
24

25
    def makeRecord(self, name, level, *a):
26
        rv = Logger.makeRecord(self, name, level, *a)
27
        rv.nsecs = (rv.created - int(rv.created)) * 1000000
28
        fr = sys._getframe(4)
29
        callee = fr.f_locals.get('self')
30
        if callee:
31
            ctx = str(type(callee)).split("'")[1].split('.')[-1]
32
        else:
33
            ctx = '<top>'
34
        if not hasattr(rv, 'funcName'):
35
            rv.funcName = fr.f_code.co_name
36
        rv.lvlnam = logging.getLevelName(level)[0]
37
        rv.ctx = ctx
38
        return rv
39

40

41
LOGFMT = ("[%(asctime)s.%(nsecs)d] %(lvlnam)s [%(module)s{0}"
42
          ":%(lineno)s:%(funcName)s] %(ctx)s: %(message)s")
43

44

45
def setup_logging(level="INFO", label="", log_file=""):
46
    if label:
47
        label = "(" + label + ")"
48

49
    filename = None
50
    stream = None
51
    if log_file:
52
        if log_file in ('-', '/dev/stderr'):
53
            stream = sys.stderr
54
        elif log_file == '/dev/stdout':
55
            stream = sys.stdout
56
        else:
57
            filename = log_file
58

59
    datefmt = "%Y-%m-%d %H:%M:%S"
60
    fmt = LOGFMT.format(label)
61
    logging.root = GLogger("root", level)
62
    logging.setLoggerClass(GLogger)
63
    logging.Formatter.converter = time.gmtime  # Log in GMT/UTC time
64
    logging.getLogger().handlers = []
65
    logging.getLogger().setLevel(level)
66

67
    if filename is not None:
68
        logging_handler = handlers.WatchedFileHandler(filename)
69
        formatter = logging.Formatter(fmt=fmt,
70
                                      datefmt=datefmt)
71
        logging_handler.setFormatter(formatter)
72
        logging.getLogger().addHandler(logging_handler)
73
    else:
74
        logging.basicConfig(stream=stream,
75
                            format=fmt,
76
                            datefmt=datefmt,
77
                            level=level)
78

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.