将应用程序(由Spring Boot和Kotlin制成)部署到Google App Engine之后,我可以使用
$ gcloud app logs tail
监视最新日志:
但是它不显示应用程序输出的日志。
我必须使用浏览器转到StackDriver
来浏览在线日志。
这不方便。
另一种方法是使用命令行通过request_log
命令读取gcloud logging
:
gcloud logging read request_log --limit=10
但是它不支持tail
模式,并且它输出了太多的有效载荷数据(例如label,requestId,zone ... blah ...)。我尝试了多种格式,但仍然输出了太多的有效载荷。
我只想查看logger.info("...")
或更高级别的输出
gcloud app logs tail
是否还可以通过应用程序输出日志?或通过其他任何方式在控制台中 tail (监视)应用程序的日志?
记录代码很简单(通过slf4j):
@RestController
class WebhookController {
val logger = LoggerFactory.getLogger(javaClass)!!
@GetMapping("/")
fun index(req: HttpServletRequest): String {
logger.info("header : ")
for (headerName in req.headerNames) {
logger.info("\t{} = {}", headerName, req.getHeader(headerName))
}
logger.info("params : ")
req.parameterMap.forEach { (k, v) ->
logger.info("\t{} = {}", k, v)
}
return "Hello Spring Boot Kotlin "
}
}
环境:
logging.properties
.level = INFO
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=INFO
appengine-web.xml
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<version>1</version>
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
<system-properties>
<property name="java.util.logging.config.file" value="logging.properties"/>
</system-properties>
</appengine-web-app>
和
Google Cloud SDK 220.0.0
app-engine-java 1.9.66
<kotlin.version>1.2.71</kotlin.version>
<springboot.version>2.0.5.RELEASE</springboot.version>
<spring.version>5.0.8.RELEASE</spring.version>
已更新:浏览器示例中的StackDriver:
我只对红色圆圈部分感兴趣。但不会在gcloud app logs tail
答案 0 :(得分:0)
您的应用程序日志应该进入stdout
流,您可以使用--logs
命令的gcloud app logs tail
选项进行选择。
gcloud app logs tail --logs=stdout
请参阅:https://cloud.google.com/sdk/gcloud/reference/app/logs/tail
答案 1 :(得分:0)
尝试使用该工具的 beta 版本!
通过类似gcloud beta app logs tail --project=... --logs=stdout,stderr
之类的东西,我可以从实时代码中获得预期的踪迹。
答案 2 :(得分:0)
这有点棘手,但是您可以做的是:
watch -n 1
每秒运行一次命令(类似尾部的解决方法)gcloud logging read "request_log" --limit=10 --format=json
将其格式化为json,以便随后可以使用jq对其进行解析jq ".[].protoPayload.line | .[] | .logMessage"
因此完整的命令应该是:
watch -n 1 'gcloud logging read "request_log" --limit=10 --format=json | jq ".[].protoPayload.line | .[] | .logMessage"'
因此,如果日志条目是这样的:
[
{
"httpRequest": {
"status": 200
},
...,
"protoPayload": {
"@type": "type.googleapis.com/google.appengine.logging.v1.RequestLog",
...
"line": [
{
"logMessage": "This is an info message",
"severity": "INFO",
...
}
]
}
...
}
]
然后使用jq ".[].protoPayload.line | .[] | .logMessage"
,您将只获得以下内容:
"This is an info message"
您还可以添加.time
,以便获取日志消息的时间戳:
jq ".[].protoPayload.line | .[] | .logMessage ,.time"
答案 3 :(得分:-1)
我正在使用laravel并遇到相同的问题。最后,我添加了{{1} 添加
app.yaml
多数民众赞成在帮助我跟踪这样的应用程序日志:
env_variables:
...
LOG_CHANNEL: stderr
作为建议,$ data应该像JSON一样-便于通过控制台阅读。