我同时使用了Python的Stackdriver日志和Python记录器。我使用函数google.cloud.logging.logger.log_struct
(https://gcloud-python.readthedocs.io/en/latest/logging/logger.html)将JSON记录到Stackdriver。在
当我使用Google Compute Engine VM instance
运行脚本时,我能够在日志查看器中使用所选资源Global
查看日志。我正在记录的结构正确地记录在jsonPayload
中。在
但是,当日志记录来自Google Kubernetes Engine
时,logger视图不会显示我传递的结构,而是显示在stdout
上打印的结构。如何确保从Google Compute Engine VM instance
和Google Kubernetes Engine
观察到相同的行为?在
这是一个片段,显示了我如何进行日志记录:
import google.cloud.logging
import logging
logging_client = google.cloud.logging.Client()
# connects the logger to the root logging handler
cloud_logger = logging_client.logger('email_adaptor')
formatter = logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s - %(lineno)d - %(filename)s')
# get the logger a name
logger = logging.getLogger('email_adaptor')
# set a level for the logger
logger.setLevel(logging.DEBUG)
# make the logger write on stdout
stdout_alarm_log = logging.StreamHandler(sys.stdout)
stdout_alarm_log.setFormatter(formatter)
logger.addHandler(stdout_alarm_log)
struct = {'message':'Processed Alarm', 'valid': True}
cloud_logger.log_struct(struct, severity='INFO')
logger.info(str(struct))
这是我在VM instance
和Kubernetes Engine
上得到的标准输出的一个示例:
这是我在Google日志查看器中的资源Global
下看到的(日志是来自我的VM实例的日志,与我在片段代码中给出的示例不符):
Stackdriver库调用针对“global”编写的代码,GKE容器中的结构化日志条目将显示在“global”资源下。在
“gkecontainer”资源将显示写入stdout和stderr的日志记录,它们在默认情况下被摄取。在
要将结构化日志写入stdout/stderr并在Stackdriver中访问它们,日志代理唯一接受的结构化格式是JSON。您必须将记录器配置为输出JSON,以便将其作为结构化日志条目拾取。更多信息请访问https://cloud.google.com/logging/docs/agent/configuration#process-payload。在
相关问题 更多 >
编程相关推荐