java - 在 Google App Engine 中看不到我的自定义日志

标签 java google-app-engine

我正在尝试在 GAE 中进行一些简单的日志记录,但我认为我一定遗漏了一些简单的步骤。

我已按照此处的说明进行操作:https://developers.google.com/appengine/docs/java/runtime#Logging

我希望向日志中写入一条简单的消息,如下所示:

public class InsertServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static final Logger log = Logger.getLogger(InsertServlet.class.getName());

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

            log.info("Handled GET request - custom message");
            resp.setContentType("text/plain");
            resp.getWriter().println("HELLO");

    }

}

如果我使用网络浏览器访问我的应用程序,我可以看到它正在运行(在浏览器中收到“HELLO”消息)。

但是在此之后,如果我访问控制台中的日志,我可以看到它正在记录事件,但我在任何地方都看不到我的消息。

我选择了“显示:所有请求”,但这就是我在访问后在日志中看到的全部内容:

012-08-19 13:34:56.488 /insert 200 2922ms 0kb Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1

2602:306:ce97:de40:8dbd:ace7:14c3:89e2 - - [19/Aug/2012:13:34:56 -0700] "GET /insert HTTP/1.1" 200 52 - "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "karwosts-helloworld.appspot.com" ms=2923 cpu_ms=1213 api_cpu_ms=0 cpm_usd=0.000006 loading_request=1 instance=00c61b117cf339fa358dc217b91a9f45b8c30f

I 2012-08-19 13:34:56.487

This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.

Logging.Properties(只有一行):

.level = WARNING

appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>karwosts-helloworld</application>
  <version>1</version>

  <threadsafe>true</threadsafe>

  <!-- Configure java.util.logging -->
  <system-properties>
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
  </system-properties>

</appengine-web-app>

我的自定义 log.info 字符串在哪里?我看错地方了吗?

最佳答案

乍一看,我会说当您在“logging.properties”文件中使用此设置时:

.level = WARNING

而且,您(在您登录代码时不要指定任何级别,将使用默认级别,这肯定不是“警告”(我猜是 INFO^^) do 使用此行指定日志记录级别:

log.info(msg);

/* which is same as */
log.log(Level.INFO, msg);

所以结果是您仅在“信息”级别登录(在您的示例中),但您的配置文件说要在警告级别及更高级别登录。由于“信息”级别低于“警告”,它们将从您的日志文件中丢弃,并且不会显示在您的服务器日志中。

我建议改用这种方法,它会强制您指定日志记录级别。

import java.util.logging.Level;
import java.util.logging.Logger;
/* ... */
log.log(Level.INFO, "a info msg"); //info
log.log(Level.WARNING, "a warning msg"); //warning
log.log(Level.FINEST, "a fine(st) msg"); //debug (as finest)

之后,您可以使用logging.properties 文件为您想要的类设置您想要的日志记录级别:

# Set the default logging level for all loggers to WARNING
.level = WARNING

# Set level for your app
oed.server.level = INFO
oed.server.data.datastore.myInjector.level = FINEST

编辑2: 此日志记录配置在客户端运行时没有影响。当你想在GWT中记录消息时,有这个GWT.log(message);,但是不能指定级别。

这并不完全正确,这取决于 your-app.gwt.xml 文件中的配置。 所有详细信息都可以在 google dev guilde logging 上找到.我发现它非常有用并且做得很好。不过,简而言之,GWT 中有各种默认记录器(大约 5-6 个);所有这些都可以通过它们的 handlers*.gwt.xml 中配置(或者可以以实用的方式完成)。 在让侵入式弹出记录器在那里呆了太久之后......我选择从客户端远程登录到服务器以享受logging.properties的使用,这是使用时的配置gwt.xml:

<!-- Logging configuration -->
  <inherits name="com.google.gwt.logging.Logging"/>

  <set-property name="gwt.logging.logLevel" value="INFO"/>  <!-- # To change the default logLevel -->
  <set-property name="gwt.logging.enabled" value="TRUE"/>  
  <set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" /> <!-- Remote logging (linked with servlet) -->
  <set-property name="gwt.logging.popupHandler" value="DISABLED" />
  <set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />  
  <set-property name="gwt.logging.systemHandler" value="ENABLED" />
  <set-property name="gwt.logging.firebugHandler" value="DISABLED" />
  <set-property name="gwt.logging.consoleHandler" value="ENABLED"/>

如果您使用此设置,请不要忘记使用 servlet 定义来配置您的 web.xml 来处理日志记录(很遗憾,文档中没有提供):

<servlet>
        <servlet-name>remoteLogging</servlet-name>
        <servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>remoteLogging</servlet-name>
        <url-pattern>/your-app-name/remote_logging</url-pattern>
    </servlet-mapping>

祝你好运!

关于java - 在 Google App Engine 中看不到我的自定义日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12029838/

相关文章:

java - 在两个排序列表中查找匹配项比使用 for 循环更好的方法?

java - Spring 2.5 中枚举映射和依赖注入(inject)

java - Hibernate 和 Oracle native 函数

python - App Engine Python 开发服务器 + 任务队列 + 后端

ios - Google身份验证后的React-Native网络请求不携带身份验证cookie

java - Java中有没有动态实现接口(interface)的方法?

java - 按下主页按钮时如何停止媒体播放器

android - Google Developer - API key 每 24 小时过期一次

java - GoogleAppEngine 错误 403

java - 在 Google App Engine 的 VFS 中编译 JSP 文件