使用日志.属性与标准的Appengine Java 11



我正在尝试使用logging.properties文件对我的标准AppEngine Java 11应用程序进行一些日志修改,我的应用程序是一个Jetty web服务器,我通过向我的app.yaml文件添加以下入口点来运行

runtime: java11
entrypoint: 'java -cp "*" com.jettymain.Main webapp.war'

现在谷歌文档在这里建议,为了使用logging.properties。配置文件的路径必须作为系统属性提供给应用程序:-Djava.util.logging.config.file=/path/to/logging.properties

我已经尝试在代码中设置,首先在com.jettymain.Main类中启动Jetty嵌入式web服务器,执行以下操作

System.setProperty("java.util.logging.config.file", "WEB-INF/logging.properties")

但这不起作用,修改app.yaml的入口点确实使web服务器加载这些配置,但它未能加载谷歌云日志处理程序类com.google.cloud.logging.LoggingHandler,我需要将这些日志写入Google Stackdriver,我有谷歌云日志依赖项添加到我的应用程序和web服务器,但这没有帮助。

<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-logging</artifactId>
<version>3.0.1</version>
</dependency>

修改entry-pint

runtime: java11
entrypoint: 'java -cp "*" com.jettymain.Main webapp.war -Djava.util.logging.config.file=WEB-INF/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 Cloud 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=FINE
# default : ERROR
com.google.cloud.logging.LoggingHandler.flushLevel=EMERGENCY
# 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=%3$s: %5$s%6$s
# Level for all logs coming from GWT client (can't filter by specific classes on client)
com.google.gwt.logging.server.RemoteLoggingServiceUtil.level = WARNING
com.beoui.geocell.level=WARNING

这可能是一个老问题,但这个答案仍然可能对有同样问题的人有所帮助。

我已经设法添加自定义logging.properties使用Gradle Java 11标准环境:

  1. 首先,您必须添加依赖于云日志,因为它不再由环境提供:

    dependencies {
    runtimeOnly("com.google.cloud:google-cloud-logging:3.11.3")
    // your other dependencies
    }
    
  2. 然后你需要指定一个文件夹包含你的logging.properties文件,由Gradlecom.google.cloud.tools.appengine插件上传:

    configure<AppEngineAppYamlExtension> {
    stage {
    setArtifact("build/libs/server.jar")
    // can be some other folder of your choice where logging.properties is located
    setExtraFilesDirectories("src/main/resources")
    }
    deploy {
    version = "GCLOUD_CONFIG"
    projectId = "GCLOUD_CONFIG"
    }
    }
    
  3. app.yaml中指定入口点。这里的技巧是属性文件可以在GAE容器的/workspace/目录中找到:

    runtime: java11
    entrypoint: 'java -jar -Djava.util.logging.config.file=/workspace/logging.properties server.jar'
    
  4. 使用

    部署应用
    ./gradlew appengineDeploy
    

我的logging.properties文件:

.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 Cloud internals and can result in verbose / initialization problems.
io.grpc.netty.level=INFO
sun.net.level=INFO
handlers=com.google.cloud.logging.LoggingHandler
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s

System.setProperty放入任何方法中。它也可以是主要的方法。我认为问题是";the logging.properties必须放在WEB-INF/classes directory"按照这个链接,而不是代码中提到的WEB-INF/目录。

System.setProperty("java.util.logging.config.file", "WEB-INF/classes/logging.properties")

相关内容

  • 没有找到相关文章

最新更新