有没有办法在GAE GWT应用程序中记录日志?

时间:2013-12-30 17:08:06

标签: java google-app-engine gwt logging log4j

我是GAE GWT应用程序的新手。我正在开发一个GAE-GWT应用程序,其中spring MVC 3作为服务提供者,GWT作为UI客户端(我不习惯使用GWT的RPC概念,所以我开始使用spring)和log4j(v1.2.17)& log4j-gwt-1.0`用于记录。现在我需要在文件中记录“日志”。

但在编码时,似乎GWT接受ConsoleAppender但不接受FileAppenderRollingFileAppender

如何在GWT中配置log4j以在单独的文件中记录“(服务器)日志”?

我的log4j.properties文件

# A default log4j configuration for log4j users.
#
# To use this configuration, deploy it into your application's WEB-INF/classes
# directory.  You are also encouraged to edit it as you like.

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# Configure the console as our one appender
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n
log4j.appender.A1.File=/logger.log
log4j.appender.A1.MaxFileSize=10MB
# Keep one backup file
log4j.appender.A1.MaxBackupIndex=1


# tighten logging on the DataNucleus Categories
log4j.category.DataNucleus.JDO=WARN, A1
log4j.category.DataNucleus.Persistence=WARN, A1
log4j.category.DataNucleus.Cache=WARN, A1
log4j.category.DataNucleus.MetaData=WARN, A1
log4j.category.DataNucleus.General=WARN, A1
log4j.category.DataNucleus.Utility=WARN, A1
log4j.category.DataNucleus.Transaction=WARN, A1
log4j.category.DataNucleus.Datastore=WARN, A1
log4j.category.DataNucleus.ClassLoading=WARN, A1
log4j.category.DataNucleus.Plugin=WARN, A1
log4j.category.DataNucleus.ValueGeneration=WARN, A1
log4j.category.DataNucleus.Enhancer=WARN, A1
log4j.category.DataNucleus.SchemaTool=WARN, A1

# A default log4j configuration for log4j users. # # To use this configuration, deploy it into your application's WEB-INF/classes # directory. You are also encouraged to edit it as you like. # Set root logger level to DEBUG and its only appender to A1. log4j.rootLogger=DEBUG, A1 # Configure the console as our one appender log4j.appender.A1=org.apache.log4j.FileAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n log4j.appender.A1.File=/logger.log log4j.appender.A1.MaxFileSize=10MB # Keep one backup file log4j.appender.A1.MaxBackupIndex=1 # tighten logging on the DataNucleus Categories log4j.category.DataNucleus.JDO=WARN, A1 log4j.category.DataNucleus.Persistence=WARN, A1 log4j.category.DataNucleus.Cache=WARN, A1 log4j.category.DataNucleus.MetaData=WARN, A1 log4j.category.DataNucleus.General=WARN, A1 log4j.category.DataNucleus.Utility=WARN, A1 log4j.category.DataNucleus.Transaction=WARN, A1 log4j.category.DataNucleus.Datastore=WARN, A1 log4j.category.DataNucleus.ClassLoading=WARN, A1 log4j.category.DataNucleus.Plugin=WARN, A1 log4j.category.DataNucleus.ValueGeneration=WARN, A1 log4j.category.DataNucleus.Enhancer=WARN, A1 log4j.category.DataNucleus.SchemaTool=WARN, A1 和我的代码片段。

import org.apache.log4j.Logger;
final private static Logger LOGGER = Logger.getLogger("RegistrationController");

例外:

import org.apache.log4j.Logger; final private static Logger LOGGER = Logger.getLogger("RegistrationController");

有没有办法将日志记录在文件而不是控制台? 如果没有,如何在GAE中部署控制台日志?

1 个答案:

答案 0 :(得分:1)

在我看来你记录时遇到了更大的问题。第一个GWT和GAE是两个不同的东西。 GWT是用Java构建JavaScript应用程序的工具包,GAE是服务器端框架。所以当你说I am not comfortable using GWT's RPC concept, so I started using spring它看起来好像你不完全明白发生了什么。 Spring在服务器上运行,在浏览器中运行GWT应用程序。为了在浏览器和服务器之间进行通信,GWT除此之外还有RPC,它负责浏览器和服务器之间的通信。 Spring仅在服务器上运行,因此无法帮助您在浏览器中的GWT应用程序与服务器之间进行通信。所以你的评论对我来说听起来像是一面红旗。

所以继续记录。这个故事有两个方面。

首先登录服务器或GAE。 GAE拥有自己的日志记录。见(https://developers.google.com/appengine/docs/java/?csw=1#Java_Logging)。这里简短的回答是当使用log4j时,您需要将其配置为登录到stdout和stderr。 stackoverflow上有几个关于如何配置它的问题(https://stackoverflow.com/questions/tagged/google-app-engine+log4j)。

其次,如果您希望在部署后看到GWT日志,技术意味着,您将日志记录从浏览器发送回服务器,然后在服务器上将它们放入服务器的标准日志记录中。幸运的是,GWT支持开箱即用,您只需启用远程日志记录即可。在gwt.xml文件中添加以下行:

<set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" />

有关GWT日志记录和远程日志记录的更多信息,请参阅:http://www.gwtproject.org/doc/latest/DevGuideLogging.html#Remote_Logging