当前位置: 首页 > 面试题库 >

如何在App Engine Flex Java环境中使用Stackdriver Structured日志记录

洪增
2023-03-14
问题内容

Google App
Engine灵活的环境会自动将stdout和stderr传递到Stackdriver(Google云日志)。但这仅支持纯文本日志消息,而没有任何元数据(甚至不包括日志级别)。

我找到了Google Cloud日志记录的Logback附加程序

https://cloud.google.com/logging/docs/setup/java

但这似乎还不支持结构化日志记录。而且,它还可以对内部的每个日志条目进行GRPC调用。因此,我想知道它的可扩展性(尤其是与具有单独Fluentd代理处理日志的当前应用程序引擎结构进行比较)。

是否有任何现成的或简单的解决方案将结构化日志从App Engine发送到Stackdriver?


问题答案:

您可以使用Logback附加程序+实施 LoggingEnhacer

public class LogEnhancer implements LoggingEnhancer {


  @Override
  public void enhanceLogEntry(LogEntry.Builder logEntry) {
    // add Labels
    logEntry.addLabel("project", "conversational-services");

    // Transform textPayload to JSONPayload
    ObjectMapper mapper = new ObjectMapper();
    Builder structBuilder = Struct.newBuilder();
    String textPayload = logEntry.build().getPayload().getData().toString();
    try {
      // Validate JSON Payload
      mapper.readTree(textPayload);
      JsonFormat.parser().merge(textPayload, structBuilder);
      logEntry.setPayload(JsonPayload.of(structBuilder.build()));
    } catch (InvalidProtocolBufferException e) {
      // Error reporting an error! FML
      System.err.println(e.getMessage());
    } catch (IOException e) {
      // Do nothing (there is not a JSON Payload)
    }

  }

}

此类添加标签并在JSONPayload中转换JSON字符串

你需要指定 LoggingEnhacerlogback.xml 文件

<!DOCTYPE configuration>
<configuration>
  <appender name="CLOUD" class="com.google.cloud.logging.logback.LoggingAppender">

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>INFO</level>
    </filter>
    <log>application.log</log> 
    <resourceType>gae_app</resourceType> 
    <!--  References to the LoggingEnhacer class -->
     <enhancer>[path_for_your_logging_enhancer_class]</enhancer>
    <flushLevel>WARN</flushLevel> 
  </appender>

  <root level="info">
    <appender-ref ref="CLOUD" />
  </root>
</configuration>


 类似资料:
  • 本文向大家介绍在Spring Boot中如何使用log4j记录日志,包括了在Spring Boot中如何使用log4j记录日志的使用技巧和注意事项,需要的朋友参考一下 前言 Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置

  • 问题内容: 我想将“跟踪”消息添加到我的所有公共方法中,如下所示: 现在,我想使用AOP(和字节码检测)将所有这些自动添加到我的方法中。我在想。是否有意义?您知道任何开放源代码吗? 问题答案: 我创建了一个简单的方面来捕获公共方法的执行。该AspectJ代码的核心是切入点定义: 在这里,我们将捕获任何包,任何类,具有任意数量的参数,具有任何返回类型的所有公共方法。 建议执行可以在下面的代码段中可视

  • 问题内容: 典型地,一个运行或或在终端局部地启动一个Jupyter笔记本网络服务器(和打开的浏览器中的URL)。使用conda 和conda环境时, 最常见的错误消息似乎是:在conda环境中安装XYZ软件包后, 可以在其中启动的python控制台中运行,但是在 Jupyter笔记本中 运行相同的代码 将导致ImportError 。 这个问题已经被问过很多次了,但是没有一个很好的答案,大多数Q&

  • 我下载了kafka-clients-0.9.0.0。jar与maven一起使用,我希望我会看到类似于Kafka日志链接中的日志记录 然而,我不知道为什么我没有得到任何日志记录,即使我设置了引导。purpuse上的服务器错误,但它只是在没有发出任何警告的情况下被卡住了。我添加了几行代码以使用log4j打印到一个文件中,这似乎是可行的,但不知道为什么Kafka不能将事件记录到log4j中。 请注意,s

  • 我正在为日志创建一个Spring Bootjar。我在我的主要spring boot项目中添加了这个依赖项。我可以在主项目的控制台中获取日志。但是没有登录到文件中。 我在文件中添加了以下application.yml 谁能帮我一下吗。提前谢谢!

  • 我正在使用Azure函数中相对较新的ILogger(vs.TraceWriter)选项,并试图了解日志是如何捕获的。 以下是我的功能: 当我查看服务器日志时,LogFiles目录有一个层次结构。 结构化目录在这里什么也不包含,但在我的real function applications目录中似乎有各种“CodedDiagnostic”日志语句。 在这里我该期待什么?最终,我希望有一个单一的接收器,