代码之家  ›  专栏  ›  技术社区  ›  jacob

如何在Java应用程序中从GKE登录到StAdvDebug

  •  0
  • jacob  · 技术社区  · 6 年前

    我在GKE上的一个容器中运行Java/Scala应用程序,而Stackdriver中没有日志。

    GCP控制台显示集群上启用了“StackDriver Kubernetes引擎监控”,并且禁用了“旧版StackDriver日志记录”。

    我试过两种类型的日志文件,一种使用 ConsoleAppender 一个使用 com.google.cloud.logging.logback.LoggingAppender 但都不起作用。

    如果我在gke中运行node.js应用程序,那么console.log条目会显示在stackdriver中。

    为了添加一些可以帮助澄清的细节,我的主要应用程序容器是一个生成Java应用程序的节点应用程序。Stackdriver的节点应用程序日志显示,但Java应用程序日志不显示。我确实设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量到一个服务帐户,我使用该帐户有权写入数据存储、云存储和pubsub。我没有向该帐户添加日志权限,因为我发现有另一个容器或更低级别的进程可以写入日志。

    我尝试的最后一个日志文件是:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
           <target>System.out</target>
           <encoder>
               <pattern>%X{akkaTimestamp} %-5level[%thread] %logger{0} - %msg%n</pattern>
           </encoder>
        </appender>
    
        <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
           <appender-ref ref="STDOUT"/>
        </appender>
    
        <logger name="akka" level="INFO" />
    
        <root level="INFO">
           <appender-ref ref="STDOUT"/>
        </root>
    
    </configuration>
    

    我错过了什么?

    0 回复  |  直到 6 年前
        1
  •  1
  •   jacob    6 年前

    我解决了问题。当节点应用程序生成Java进程时,它需要配置Java进程来继承父进程的STDIO,如下所示:

    const child = spawn(cmd, args, { stdio: 'inherit' ))
    
        2
  •  0
  •   Alan Rodriguez    6 年前

    目前这是beta版本,处于预发布状态,可能会更改或受到有限的支持。

    但你现在看到的是:

    推荐文章