我将从我的数据管道生成的日志发送到 GCP 上的 Stackdriver。但由于某种原因,它发送了相同事件日志的多个副本。在我的ensure_stackdriver_logging函数中,我检查处理程序是否已经存在,以防止如果task重新运行处理程序将不会被多次添加的情况。有谁知道问题是什么?
def ensure_stackdriver_logging():
logger = get_logger()
lg_client = google.cloud.logging.Client()
lg_handler = CloudLoggingHandler(lg_client, 'thinknum_etl_logging')
if lg_handler not in logger.handlers:
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
lg_handler.setFormatter(formatter)
logger.setLevel(logging.INFO)
logger.addHandler(lg_handler)
def task():
ensure_stackdriver_logging()
...
更新:
我也试过这个——
def ensure_stackdriver_logging():
logger = get_logger()
if hasattr(logger, 'initialized'):
return logger
else:
setattr(logger, 'initialized', True)
lg_client = google.cloud.logging.Client()
lg_handler = CloudLoggingHandler(lg_client, 'thinknum_etl_logging')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
lg_handler.setFormatter(formatter)
logger.setLevel(logging.INFO)
logger.addHandler(lg_handler)
但它没有用。