structlog无法添加处理程序以写入文件

时间:2019-12-16 07:46:12

标签: python-3.x logging structlog

'''Setting configuration for the logger'''

import logging
from logging.handlers import RotatingFileHandler
import os
import sys
import structlog

LOG_LEVEL = os.environ.get("LOG_LEVEL", "info").upper()
LOG_HANDLER = os.environ.get("LOG_HANDLER", "file").upper()
LOG_BASE_PATH = os.environ.get("LOG_BASE_PATH", "/var/log")
LOG_DEFAULT_NAME = os.environ.get("LOG_BASE_NAME", "extraction_training_service.log")

def get_logging_env_vars():
    ''' Use for level and handler setting'''
    if LOG_LEVEL == "INFO":
        level = logging.INFO
    else:
        level = logging.DEBUG
    if LOG_HANDLER == "FILE":
        handler = RotatingFileHandler(LOG_BASE_PATH + "/" + LOG_DEFAULT_NAME,
                                      mode='a', maxBytes=5 * 1024 * 1024,
                                      backupCount=10, encoding=None, delay=0)
    else:
        handler = logging.StreamHandler(sys.stdout)
    return handler, level


HANDLER, LEVEL = get_logging_env_vars()
logging.basicConfig(
    format="%(message)s",
    level=LEVEL,
)
logging.root.handlers = [HANDLER]
print(logging.root.handlers)
structlog.configure(
    processors=[
        structlog.stdlib.filter_by_level,
        structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S"),
        structlog.stdlib.add_log_level,
        structlog.stdlib.add_logger_name,
        structlog.stdlib.PositionalArgumentsFormatter(),
        structlog.processors.StackInfoRenderer(),
        structlog.processors.format_exc_info,
        structlog.processors.UnicodeDecoder(),
        structlog.processors.ExceptionPrettyPrinter(),
        structlog.processors.JSONRenderer(),
    ],
    context_class=dict,
    logger_factory=structlog.stdlib.LoggerFactory(),
    wrapper_class=structlog.stdlib.BoundLogger,
    cache_logger_on_first_use=True,
)

上面是配置,但是当我与文本提取服务一起运行时,它不会写入文件,而只会写入stdout

提取服务是使用张量流的CNN OCR。 如果我将它变成函数并调用它,那么所有输出都将重定向到文件中,但是我只想记录我添加的项目

0 个答案:

没有答案