TL,DR; ,当使用CloudLoggingHandler从Docker容器中使用Google Cloud Logging driver进行Stackdriver logging API调用时,日志级别将被忽略。
详细信息; 从运行在Google Compute Engine上的Docker容器中获取日志的建议方法是使用Stackdriver Logging Agent:
最佳做法是在所有计算机上运行Stackdriver Logging代理 VM实例。该代理可在Linux和Windows下运行。安装 Stackdriver Logging代理,请参阅安装日志代理。
以下步骤已成功完成:
Editor
和Logs Writer
角色。然后我从Google的CloudLoggingHandler example复制了示例Cloud Platform Python docs。
import logging
import google.cloud.logging
from google.cloud.logging.handlers import CloudLoggingHandler
client = google.cloud.logging.Client()
handler = CloudLoggingHandler(client)
cloud_logger = logging.getLogger('cloudLogger')
cloud_logger.setLevel(logging.INFO)
cloud_logger.addHandler(handler)
cloud_logger.error('bad news error')
cloud_logger.warning('bad news warning')
cloud_logger.info('bad news info')
Docker容器以Google Cloud Logging Driver标志(--log-driver=gcplogs
)开始:
sudo docker run --log-driver=gcplogs --name=server gcr.io/my-project/server:latest
这有效,但是 all 日志,无论级别如何,仅在查看“任何日志级别”时在Stackdriver中可见。奇怪的是,消息本身包含级别:
2018-08-22 22:34:42.176 BST
ERROR:bad news error
2018-08-22 22:34:42.176 BST
WARNING:bad news warning
2018-08-22 22:34:42.176 BST
WARNING:bad news info
这使得无法在Stackdriver UI中按级别进行过滤:
在下面的屏幕截图中,每个日志条目的LHS上的所有图标将级别显示为Any
:
答案 0 :(得分:0)
据我所知,UIView
是一个独立的处理程序,它将日志发送到CloudLoggingHandler
日志级别。要与Global
驱动程序正确集成,请尝试使用ContainerEngineHandler