python - 有没有办法将 celery app.task 日志发送到 stackdriver?
问题描述
我尝试将默认将 Python 模块记录到 Stackdriver(谷歌云平台)中创建的 celery 任务日志发送,但我遗漏了一些东西。
在当前状态下,所有日志都已推送,但我缺少在任务 Python 文件中创建的日志。
class Logger(object):
def __init__(self, log_level):
formatter = CustomJsonFormatter(
'(timestamp)(level)(name)(created)(process)(msecs)(message)'
)
formatter.json_ensure_ascii = False
logger = logging.getLogger()
logger.setLevel(log_level)
client = google.cloud.logging.Client.from_service_account_json(
'key.json')
# StreamHandler
# sh = logging.StreamHandler()
sh = CloudLoggingHandler(client)
sh.setLevel(log_level)
sh.setFormatter(formatter)
logger.addHandler(sh)
from app.utils.logger import Logger
from celery.signals import setup_logging
@setup_logging.connect
def initialize_logger(*args, **kwargs):
Logger(log_level=log_level)
解决方案
试试这个:
class Logger(object):
def __init__(self, log_level):
formatter = CustomJsonFormatter(
'(timestamp)(level)(name)(created)(process)(msecs)(message)'
)
formatter.json_ensure_ascii = False
logger = logging.getLogger()
logger.setLevel(log_level)
client = google.cloud.logging.Client.from_service_account_json(
'key.json')
log_handler = client.get_default_handler()
cloud_logger = logging.getLogger("cloudLogger")
cloud_logger.setLevel(log_level)
cloud_logger.setFormatter(formatter)
cloud_logger.addHandler(log_handler)
推荐阅读
- sql - SQL - 如何在特定列中选择具有最大值的数据行?
- ruby-on-rails - 轨道中的 Dropzone + Active Storage 事件侦听器
- java - 如何在另一个代码块中使用存储的字符串值
- javascript - 如何在 reactjs 中更改移动设备上的完整布局
- npm - NPM Ng Build --Prod 在构建过程中失败 Azure DevOps 每次
- reactjs - React js组件未呈现
- sql - 如何在带有连接的选择子句中执行 Postgresql 子查询
- cordova - 在 Outsystem InAppBrowser 中不支持 MisFit API 集成
- citrix - Citrix 桌面内的 BluePrism 运行时
- c# - 当 ref 返回属性的基础值发生变化时调用方法