Приложение GAE регистрирует журнал, включающий журнал приложения, а не только журнал HTTP-запросов. - PullRequest
0 голосов
/ 13 октября 2018

После развертывания приложения (сделанного из весенней загрузки и kotlin) в Google App Engine я могу использовать $ gcloud app logs tail для отслеживания последних журналов:

tail logs

Но он не показывает журналы, выводимые приложениями.Я должен использовать браузер, чтобы перейти на StackDriver, чтобы просматривать онлайн-журналы.Это не удобно.

Другой способ - использовать командную строку для чтения request_log командой gcloud logging:

gcloud logging read request_log --limit=10

Но она не поддерживаетtail режим, и он выводит слишком много данных полезной нагрузки (таких как метки, requestId, zone ... blah ...).Я перепробовал много форматов, но по-прежнему выводил слишком много полезных данных.

Я просто хочу посмотреть, что выводится на logger.info("...") или более высоком уровне

Есть ли способ для gcloud app logs tail также выводить журналы приложениями?Или любым другим способом войти в консоль tail (monitor) приложения?

Код регистрации прост (от 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 в примере браузера: enter image description here Меня интересует только красная часть.Но не выводится в gcloud app logs tail

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Попробуйте бета версию инструмента!

С чем-то вроде gcloud beta app logs tail --project=... --logs=stdout,stderr я получаю ожидаемые следы от моего живого кода.

0 голосов
/ 29 апреля 2019

Это немного глупо, но вы можете сделать следующее:

  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"

0 голосов
/ 15 октября 2018

Журналы вашего приложения должны идти в поток stdout, который вы можете выбрать с помощью опции --logs команды gcloud app logs tail.

gcloud app logs tail --logs=stdout

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

...