无法在Google App Engine中看到我的自定义日志

时间:2012-08-19 20:42:54

标签: 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   实例= 00c61b117cf339fa358dc217b91a9f45b8c30f

     

I 2012-08-19 13:34:56.487

     

此请求导致为您的应用程序启动新进程,   因此导致您的应用程序代码首次加载。   因此,该请求可能花费更长时间并且使用比典型更多的CPU   请求申请。

Logging.Properties(只有一行):

.level = WARNING

应用服务引擎-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字符串在哪里?我不是在找正确的地方吗?

2 个答案:

答案 0 :(得分:9)

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

.level = WARNING

并且,你(在你登录代码时没有指定任何级别,将使用默认级别,这肯定不是'警告'(我猜想信息^^) 执行使用此行指定日志记录级别:

log.info(msg);

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

因此,结果是您只记录'INFO'级别(在您的示例中),但您的配置文件表示要记录警告级别及更高级别。由于“信息”级别低于“警告”,它们将从您的日志文件中丢弃,而不会显示在服务器的日志中。

我建议尝试使用此方法,这会强制您指定日志记录级别。

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

Edit2: 在客户端运行时,此日志记录配置没有任何影响。如果要在GWT中记录消息,可以使用GWT.log(message);,但不能指定级别。

这不完全正确,这取决于your-app.gwt.xml文件中的配置。 所有细节都可以在google dev guilde logging找到。我发现它非常有用且做得很好。不过,在坚果壳中,GWT中有各种默认记录器(大约5-6个);所有这些都可以在*.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>

祝你好运!

答案 1 :(得分:0)

您应该检查“严重性最低的日志”,然后从下拉列表中选择“信息”,而不是选中“所有请求”。