Журнал приложения Google AppEngine назначен неверному журналу запросов - PullRequest
0 голосов
/ 15 марта 2020

Когда я просматриваю журналы в Google Log Viewer для моего проекта GAE, я вижу, что часто журналы, которые я сам пишу в коде, присваиваются неверному запросу. Большую часть времени журнал назначается запросу непосредственно после запроса, который создал запись журнала.
Поскольку root каждого журнала приложения в GAE должен быть запросом, это означает, что неправильный запрос иногда помечается как ошибка, потому что другой запрос раньше приводил к ошибке, но после этого каким-то образом был назначен журнал.

Я действительно ничего особенного не делаю, я использую Ktor в качестве моего сервлета и у меня есть перехватчик, который создает протоколировать, когда возникает исключение, прежде чем возвращать статус 500.
Я использую Java вход через SLF4J с помощью обработчика ведения журнала в облаке Google, но до этого я использовал возврат через SLf4J, и у меня возникла та же проблема.

Содержание из самого логов тоже правильно, возвращен статус запроса, уровень записи в журнале, сообщение, все ок.

Я подумал, что это может быть потому, что я использую kotlin и переключаю контексты сопрограмм во время одного запроса, но в некоторых случаях точка, где я записываю журнал, и куда я отправляю ответ, находятся точно рядом друг с другом. , поэтому я не уверен, имеет ли kotlin какое-либо отношение к этому.

Мои logging.properties:

# To use this configuration, add to system properties : -Djava.util.logging.config.file="/path/to/file"
#
.level = INFO

# it is recommended that io.grpc and sun.net logging level is kept at INFO level,
# as both these packages are used by Stackdriver internals and can result in verbose / initialization problems.
io.grpc.netty.level=INFO
sun.net.level=INFO

handlers=com.google.cloud.logging.LoggingHandler
# default : java.log
com.google.cloud.logging.LoggingHandler.log=custom_log

# default : INFO
com.google.cloud.logging.LoggingHandler.level=INFO

# default : ERROR
com.google.cloud.logging.LoggingHandler.flushLevel=WARNING

# default : auto-detected, fallback "global"
#com.google.cloud.logging.LoggingHandler.resourceType=container

# custom formatter
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$-6s %2$s %5$s%6$s%n

#optional enhancers (to add additional fields, labels)
#com.google.cloud.logging.LoggingHandler.enhancers=com.example.logging.jul.enhancers.ExampleEnhancer

Мои относящиеся к журналу зависимости:

  implementation "org.slf4j:slf4j-jdk14:1.7.30"
  implementation "com.google.cloud:google-cloud-logging:1.100.0"

Пример регистрации звонка:

exception<Throwable> { e ->
      logger().error("Error", e)
      call.respondText(e.message ?: "", ContentType.Text.Plain, HttpStatusCode.InternalServerError)
    }

с logger():

import org.slf4j.Logger
import org.slf4j.LoggerFactory

inline fun <reified T : Any> T.logger(): Logger = LoggerFactory.getLogger(T::class.java)

Редактировать:
Пример журнала в облаке Google. Первый запрос имеет параметр запроса GAID=cdda802e-fb9c-47ad-0794d394c913, но, как вы можете видеть, журнал ошибок для этого запроса приведен ниже, отмечен красным.

log viewer example

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...