【问题标题】:Not able to see logs on stackdriver while using logging appender in java在 Java 中使用日志记录附加程序时无法查看堆栈驱动程序上的日志
【发布时间】:2019-01-22 04:06:00
【问题描述】:
我的应用程序在 dropwizard 中,最近我已将其上传到 gcp。对于日志记录,我们需要使用 stackdriver。我不是 gcp 专家,只是关注 https://cloud.google.com/logging/docs/setup/java 。我使用 logging appender 方式在 stackdriver 上显示日志。
据我所知,要使用日志记录附加程序实现堆栈驱动程序日志记录,我们需要做两件事:
- 在 logback.xml 中为云添加 appender
- 添加依赖 'com.google.cloud:google-cloud-logging-logback:0.77.0-alpha'
build.gradle。
每当我选择部署应用程序的实例时,我都无法在 stackdriver 上看到日志。
【问题讨论】:
标签:
java
logging
google-cloud-platform
stackdriver
【解决方案1】:
对于 dropwizard,它稍微复杂一些,因为它非常固执己见。以下是将 stackdriver 日志与云日志结合使用所需的步骤。注意:我使用的是com.google.cloud:google-cloud-logging-logback 库的0.77.0-alpha 版本。
- 创建一个实现
AppenderFactory<ILoggingEvent> 的类,该类具有 JsonTypeName 注释:
@JsonTypeName("stackdriver")
public class StackdriverLoggingAppenderFactory implements AppenderFactory<ILoggingEvent> {
@Override
public Appender<ILoggingEvent> build(LoggerContext context, String applicationName,
LayoutFactory<ILoggingEvent> layoutFactory,
LevelFilterFactory<ILoggingEvent> levelFilterFactory,
AsyncAppenderFactory<ILoggingEvent> asyncAppenderFactory) {
final LoggingAppender appender = new LoggingAppender();
appender.setName("stackdriver");
appender.setContext(context);
appender.start();
return appender;
}
}
- 将注释的值添加到 dropwizard 配置 (yaml) 文件的日志记录部分:
logging:
level: INFO
appenders:
- type: stackdriver
- 将名为
io.dropwizard.logging.AppenderFactory 的文件添加到src/main/resources/META-INF.services。该文件应包含在步骤 1 中创建的完全限定的包和类名,例如,
com.acme.gcp.logging.StackdriverLoggingAppenderFactory
- 最后,添加一个环境变量,键为
GOOGLE_CLOUD_PROJECT,值为运行实例的项目ID。
我通过在笔记本电脑上本地运行应用程序对此进行了测试,我可以在 Google Cloud Console 中的 Stackdriver Logging 下看到日志条目。