【问题标题】:GAE app logs tail to include app's log , not just http request logGAE 应用程序日志尾部包含应用程序的日志,而不仅仅是 http 请求日志
【发布时间】:2019-03-18 13:48:34
【问题描述】:

将应用程序(由 spring boot 和 kotlin 制成)部署到 Google App Engine 后,我可以使用 $ gcloud app logs tail 监控最新日志:

但它不显示应用程序输出的日志。 我必须使用浏览器去StackDriver 浏览在线日志。 这不方便。

另一种方法是使用命令行通过gcloud logging命令读取request_log

gcloud logging read request_log --limit=10

但是它不支持tail模式,并且输出了太多的payload数据(比如labels,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中没有输出

【问题讨论】:

    标签: java spring-boot google-app-engine gcloud google-cloud-stackdriver


    【解决方案1】:

    我正在使用 laravel 并且遇到了同样的问题。最后,我添加我的app.yaml 添加

    env_variables:
        ...
        LOG_CHANNEL: stderr
    

    这有助于我像这样跟踪应用程序日志:

    Log::info( $data );
    

    作为建议,$data 应该像 JSON - 以便通过控制台轻松阅读。

    【讨论】:

    • 请考虑在您的答案中添加一些解释或细节。虽然它可能会回答问题,但只是添加一段代码作为答案,并不能帮助 OP 或未来的社区成员理解问题或建议的解决方案。
    【解决方案2】:

    这有点老套,但你可以做的是:

    1. 使用watch -n 1 每秒运行一次命令(类似尾部的解决方法)
    2. 使用gcloud logging read "request_log" --limit=10 --format=json将其格式化为json,以便您可以使用jq对其进行解析
    3. 管道输出到 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】:

      试试测试版工具!

      使用gcloud beta app logs tail --project=... --logs=stdout,stderr 之类的东西,我可以从我的实时代码中获得预期的跟踪。

      【讨论】:

        【解决方案4】:

        您的应用程序日志应该进入stdout 流,您可以使用gcloud app logs tail 命令的--logs 选项进行选择。

        gcloud app logs tail --logs=stdout
        

        见:https://cloud.google.com/sdk/gcloud/reference/app/logs/tail

        【讨论】:

        • 对不起,它不起作用。事实上,默认的--logs包含stderr,stdout,crash.log,nginx.request,request_log
        • 是的,我提到了I have to use browser to go to StackDriver to browse online logs . This is not convenient.它有很多payload。
        • 那么,在浏览器中,日志出现在哪个日志流下?是stdout吗?在这种情况下,您是说 gcloud 中存在错误。对吗?
        • 我附加了 StackDriver 快照,仅供参考。有&lt;stdout&gt;,但gcloud app logs tail没有输出
        猜你喜欢
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        相关资源
        最近更新 更多