为resource
类提供CloudLoggingHandler
参数是行不通的,也就是说,它无法登录到stackdriver
。如果我将resource
注释掉,则可以正常工作。我还尝试了一个不能在Django中运行的简单python脚本,它也可以正常工作。
这实际上是我的Django LOGGING处理程序设置:
'handlers': {
'stderr': {
'class': 'google.cloud.logging.handlers.CloudLoggingHandler',
'name': "name",
'resource': Resource(
type="container",
labels={
...
},
),
'client': google.cloud.logging.Client()
},
},
没有resource
,没问题:
'handlers': {
'stderr': {
'class': 'google.cloud.logging.handlers.CloudLoggingHandler',
'name': "name",
'client': google.cloud.logging.Client()
},
},
一个简单的脚本也可以工作:
import logging
import google.cloud.logging # Don't conflict with standard logging
from google.cloud.logging.handlers import CloudLoggingHandler, setup_logging
from google.cloud.logging.resource import Resource
client = google.cloud.logging.Client()
logging.getLogger().setLevel(logging.INFO) # defaults to WARN
res = Resource(
type="container",
labels={
...
},
)
handler = CloudLoggingHandler(client, name='name', resource=res)
setup_logging(handler)
logging.error('logging!')
我使用的google-cloud-logging
版本是1.10.0
。
有人可以提供一些有关调试stackdriver
日志记录的建议吗?
答案 0 :(得分:0)
此问题最有可能是由于资源格式错误而引起的,或者是由于不支持(或不再支持)类型,由于标签与给定类型的标签不匹配,缺少必需的标签或者是因为需要针对特定资源类型写日志的特殊权限。
在这种情况下,使用container
而不是k8s_container
似乎是可疑的。基于this conversation以及Stackdriver Monitoring resource types和Stackdriver Logging resource types列表中k8s_container
的存在,而container
仅记录在后者上,可能是已被k8s_container
取代的不推荐使用的资源类型。
如果这不起作用,则编写远程日志的失败应在本地生成日志(或使用background thread transport附带的任何处理程序);尽管这些日志显然更难访问,但如果可以访问这些日志,则应该可以看到尝试写入Stackdriver Logging出了什么问题。