1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| import logging, logging.config, os import structlog from structlog import configure, processors, stdlib, threadlocal from pythonjsonlogger import jsonlogger BASE_DIR = BASE_DIR = os.path.dirname(os.path.abspath(__file__)) DEBUG = True
class RequireDebugTrue(logging.Filter): def filter(self, record): return DEBUG
def get_logger(): LOGGING = { 'version': 1, 'disable_existing_loggers': False,
'formatters': { 'json': { 'format': '[%(asctime)s][%(threadName)s:%(thread)d][%(name)s:%(levelname)s(%(lineno)d)]\n[%(module)s:%(funcName)s]:%(message)s', 'class': 'pythonjsonlogger.jsonlogger.JsonFormatter', } }, 'filters': { 'require_debug_true': { '()': RequireDebugTrue, } }, 'handlers': { 'TimeChecklog': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', 'formatter': 'json', 'filename': os.path.join("./log/", 'TimeoutCheck.log'), 'maxBytes': 1024 * 1024 * 5, 'backupCount': 5, 'encoding': 'utf8', }, }, 'loggers': { 'proxyCheck': { 'handlers': ['TimeChecklog'], 'level': 'DEBUG', 'propagate': True, }, } }
configure( logger_factory=stdlib.LoggerFactory(), processors=[ stdlib.render_to_log_kwargs] )
logging.config.dictConfig(LOGGING) logger = logging.getLogger("proxyCheck") return logger
logger1 = get_logger() def test(): try: a = 1 / 0 except Exception as e: logger1.error(e) logger1.error(e, extra={key1: value1, key2:value2}) pass test()
|