'''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,
)
以上是配置,但是当我将其与文本提取服务一起运行时,它不会写入文件,而是仅写入标准输出
提取服务是使用张量流的 CNN OCR。如果我将其变为函数并调用它,则所有输出都将重定向到文件中,但我只想记录我添加的项目