【发布时间】:2019-11-18 14:00:14
【问题描述】:
我正在创建一个可以在本地或 Google Cloud 上运行的应用程序。为了设置谷歌云记录,我使用了Google Cloud Logging,制作了一个云记录器,基本上使用下面的类进行记录
class CloudLogger():
def __init__(self, instance_id: str = LOGGER_INSTANCE_ID, instance_zone: str = LOGGER_INSTANCE_ZONE) -> None:
self.instance_id = instance_id
self.instance_zone = instance_zone
self.cred = service_account.Credentials.from_service_account_file(CREDENTIAL_FILE)
self.client = gcp_logging.Client(project = PROJECT, credentials=self.cred)
self.res = Resource(type="gce_instance",
labels={
"instance_id": self.instance_id,
"zone": self.instance_zone
})
self.hdlr = CloudLoggingHandler(self.client, resource = self.res)
self.logger = logging.getLogger('my_gcp_logger')
self.hdlr.setFormatter(logging.Formatter('%(message)s'))
if not self.logger.handlers:
self.logger.addHandler(self.hdlr)
self.logger.setLevel(logging.INFO)
def info(self, log_this):
self.logger.setLevel(logging.INFO)
self.logger.info(log_this)
我想要这样,如果它在云上运行,它使用 GCP 记录器,如果在本地运行,它使用 python 日志记录。我既可以作为参数传入(“云”、“本地”),也可以让它足够智能以自行理解。但我希望底层逻辑相同,以便我可以无缝登录到云/本地。我该怎么做呢?
想知道(也许)是否有某种方法可以创建本地记录器。如果在云上运行,则将这些本地日志解析到 GCP。
【问题讨论】:
-
GCP Logger 是指 Stackdriver 吗?你有什么问题?您要检测的问题是在云中运行吗?在 Google Cloud 中运行?或者您想同时支持本地日志文件和 Stackdriver? Stackdriver 日志记录可从您的桌面、Google Cloud 内部以及几乎任何地方使用。您确定本地日志与 Stackdriver 日志的标准是什么?使用详细信息编辑您的问题。
-
@JohnHanley 我想使用 python 记录器进行所有记录。如果我在云端运行,请将这些日志传递给 Stackdriver。所以主记录器:Python,如果云:Stackdriver。
-
@daudnadeem,我知道这个问题,我正在与 Google 讨论这个问题。 @JohnHanley,例如,当您在 Cloud Run(或 AppEngine)中记录事物时,例如
logging.debug,在堆栈驱动程序日志记录中未检测到级别,日志为灰色,因为以纯文本形式打印。如果您使用 Cloud Logging 格式化程序,它运行良好,但在本地,您的日志是 FluentD 格式(JSON,难以阅读)。如果你使用 Cloud Function,它运行良好,因为 Logger 在 Function Build 步骤中的格式很好。
标签: python logging google-cloud-platform