Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 如何在日志查看器中查看托管VM的JSON日志?_Google App Engine_Logging_Google Compute Engine_Google Cloud Platform_Fluentd - Fatal编程技术网

Google app engine 如何在日志查看器中查看托管VM的JSON日志?

Google app engine 如何在日志查看器中查看托管VM的JSON日志?,google-app-engine,logging,google-compute-engine,google-cloud-platform,fluentd,Google App Engine,Logging,Google Compute Engine,Google Cloud Platform,Fluentd,我试图在计算引擎VM实例上获取JSON格式的日志,以显示在GoogleDeveloper控制台的日志查看器中。根据法律规定,应该可以这样做: 使用App Engine管理的VM的应用程序应编写自定义日志 在/var/log/app\u engine/custom\u logs处将文件发送到VM的日志目录。 这些文件将自动收集并在日志中可用 观众 自定义日志文件必须具有后缀.log或.log.json。如果后缀 如果是.log.json,则日志必须为json格式,每个日志必须有一个json对象 线

我试图在计算引擎VM实例上获取JSON格式的日志,以显示在GoogleDeveloper控制台的日志查看器中。根据法律规定,应该可以这样做:

使用App Engine管理的VM的应用程序应编写自定义日志 在/var/log/app\u engine/custom\u logs处将文件发送到VM的日志目录。 这些文件将自动收集并在日志中可用 观众

自定义日志文件必须具有后缀.log或.log.json。如果后缀 如果是.log.json,则日志必须为json格式,每个日志必须有一个json对象 线路。如果后缀为.log,则日志条目将被视为纯文本

这似乎对我不起作用:以
.log
结尾的日志在日志查看器中可见,但显示为纯文本。以
.log.json
结尾的日志根本不可见

这也与最近的另一篇文章相矛盾

据我所知,谷歌使用日志查看器。在GitHub存储库中,我找不到任何证据表明
.log.json
文件正在被索引


有人知道如何让它工作吗?或者文档是否已过时,并且该功能是否因某种原因被删除?

我目前正在开发一个运行在托管虚拟机上的NodeJS应用程序,我还试图将我的日志打印到Google Developer控制台上。我在“/var/log/app_engine”目录中创建了日志文件,如文档中所述。不幸的是,这似乎对我不起作用,甚至对“.log”文件也是如此


你能描述一下你的日志是在哪里创建的吗?另外,您的托管VM配置为“由谷歌管理”还是“由用户管理”?谢谢

以下是为托管VMs logviewer生成JSON日志的一种方法:

所需的JSON格式 目标是为每个日志行创建一个单行JSON对象,其中包含:

{
“消息”:“发生错误!”,
“严重性”:“错误”,
“时间戳”:{
“秒”:1437712034000,
“纳米”:905
}
}
(来自谷歌的信息:)

使用python json记录器 见:

def get_timestamp_dict(当=无时):
“”“将datetime.datetime转换为自历元以来的整数毫秒。
需要特殊处理以保持微秒。
Args:
什么时候:
datetime.datetime实例。如果没有,则为“now”的时间戳
将使用。
返回:
自历元起的整数时间(毫秒)。如果提供的“when”为
无,返回值将为无。
"""
如果“无”,则为:
when=datetime.datetime.utcnow()
ms_since_epoch=float(time.mktime(when.utctimetuple())*1000.0)
返回{
“秒”:int(毫秒,自世纪起),
“纳秒”:int(当为0.5微秒/1000.0时),
}
def设置_json_记录器(后缀=“”):
尝试:
从pythonjsonlogger导入jsonlogger
类GoogleJsonFormatter(jsonlogger.JsonFormatter):
格式化_字符串=“{message}”
def添加字段(自我、日志记录、记录、消息记录):
超级(GoogleJsonFormatter,self)。添加字段(日志记录,
记录,
信息(口述)
日志记录['severity']=record.levelname
日志记录['timestamp']=get_timestamp_dict()
日志记录['message']=self.FORMAT\u STRING.FORMAT(
message=record.message,
filename=record.filename,
)
formatter=GoogleJsonFormatter()
log_path='/var/log/app_引擎/custom_日志/worker'+后缀+'.log.json'
确保路径存在(日志路径)
file\u handler=logging.FileHandler(日志路径)
文件\u handler.setFormatter(格式化程序)
logging.getLogger().addHandler(文件处理程序)
除操作错误外:
logging.warn(“未找到用于生产日志记录的自定义日志路径”)
除恐怖外:
logging.warn(“JSON格式不可用”)

要使用,只需调用
setup\u json\u logger
-您可能还需要更改日志的
工作者的名称。

我们将日志写入目录
/var/log/app\u engine/custom\u logs
。为了简化测试,您可以SSH到一个VM实例中,然后使用docker在运行的映像中启动bash提示符,然后使用一些测试数据创建文件
/var/log/app\u engine/custom\u logs/app.log
。不管你的虚拟机是由谷歌还是用户管理。非常感谢Arjen!我的问题是我忘了启动Docker的bash提示符。我是在托管虚拟机而不是容器中进行测试。。。顺便说一下,下面是启动docker提示符的命令:“docker ps”检索id,然后是“docker exec-i-t bash”。我还可以确认.log.json文件不可见。这个问题在不久前提交给谷歌,请给出你的+1s:谢谢,Josh!我还没有试过你的答案,但在试过之前我会把它作为答案。在AppEngine的问题跟踪程序中,您提到了许多空白日志。这是否意味着它仍然存在一些问题?@Arjen你是对的。我发布这篇文章是因为这是谷歌的回应,而且它“应该”是这样工作的。我将在继续取得进展的同时更新答案。