gwt - 配置 gwt-log 的 remoteLogger;使用log4j把它放在一个单独的文件中

标签 gwt log4j tomcat6 smartgwt

我有一个(智能)GWT 应用程序,它在服务器端使用 Spring,并通过 log4j 记录它的内容。这有效(部署在 tomcat6/ubuntu 10.04 LTS 上)。

在客户端,我使用正确配置的 gwt-log 远程日志记录库。运行 Debug模式时,我在 Eclipse 的“开发模式” Pane 中看到了 gwt 日志。但是,部署后,我看不到 gwt-log 日志。我已经配置如下:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
...
<appender name="FILE_LOG2" class="org.apache.log4j.FileAppender">
  <param name="File"   value="${PuzzelVandaag-instance-root}WEB-INF/logs/Sytematic.log" />
  <param name="Append" value="true" />          
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="--- %d [%.4t] %-5p %c{1} - %m%n"/>
  </layout>     
</appender>
...
<!-- this one works, normal server-side code -->
<category name="com.isomorphic">
   <priority value="DEBUG" />
   <appender-ref ref="FILE_LOG2" />
</category>
<!-- currently I use this to configure gwt-log stuff. Is this the right way? --> 
<category name="gwt-log"> 
  <level value="DEBUG" />
  <appender-ref ref="FILE_LOG2"/> 
</category> 

服务器端包日志记录有效,但我在客户端遇到问题。我相当确定远程日志记录 servlet 可以工作,因为我没有看到任何错误。我在 web.xml 中配置如下:

<servlet> 
  <servlet-name>gwt-log-remote-logger-servlet</servlet-name>  
  <servlet-class>com.allen_sauer.gwt.log.server.RemoteLoggerServiceImpl</servlet-class> 
 </servlet>  
 <servlet-mapping> 
   <servlet-name>gwt-log-remote-logger-servlet</servlet-name>  
   <url-pattern>/[modulename]/gwt-log</url-pattern> 
 </servlet-mapping> 

当我记录东西时,我会调用 Log.debug("some msg"),同时导入 com.allen_sauer.gwt.log.client.Log .

总而言之,我认为我采用了正确的方法。我还使用 -Dlog4j.debug 参数运行托管模式,这就是它告诉我的内容:

log4j: Retreiving an instance of org.apache.log4j.Logger.
log4j: Setting [gwt-log] additivity to [true].
log4j: Level value for gwt-log is  [DEBUG].
log4j: gwt-log level set to DEBUG
log4j: Adding appender named [STDOUT] to category [gwt-log].
log4j: Adding appender named [SmartClientLog] to category [gwt-log].
log4j: Adding appender named [FILE_LOG2] to category [gwt-log].

为了完成,这里是 .gwt.xml 的相关部分:

<inherits name="com.allen_sauer.gwt.log.gwt-log-DEBUG"/>  
<set-property name="log_DivLogger" value="DISABLED"/>  
<!-- In gwt-log-3.0.3 or later -->  
<inherits name="com.allen_sauer.gwt.log.gwt-log-RemoteLogger"/> 

我是否遗漏了一些明显的东西?我是 log4j 新手...任何帮助将不胜感激!

最佳答案

如果您查看 com.google.gwt.logging.server.RemoteLoggingServiceImpl 代码,您会发现它使用 java.util.logging.Logger 来执行日志记录。

您正在使用 Log4j。

有两个选项可以让您的日志出现在 Log4j 中。

  1. 实现您自己的 RemoteLoggingService
  2. 使用 slf4j 将 java.util.logging 与 log4j 日志“桥接”

选项 1 并不太难。 我在为此创建的类(class)下面。请记住将您的 web.xml 指向这个新类。

    import java.util.logging.LogRecord;

    import com.google.gwt.logging.shared.RemoteLoggingService;
    import com.google.gwt.user.server.rpc.RemoteServiceServlet;

    import java.util.logging.Level;
    import org.springframework.stereotype.Component;

    public class MyRemoteLoggingServlet extends RemoteServiceServlet implements RemoteLoggingService {

        private final MyLogger logger = MyLoggerFactory.getLogger(getClass());

        @Override
        public String logOnServer(LogRecord record) {

            Level level = record.getLevel();
            String message = record.getMessage();

            if (Level.INFO.equals(level)) {
                logger.info(message);
            } else if (Level.SEVERE.equals(level)) {
                logger.error(message);
            } else if (Level.WARNING.equals(level)) {
                logger.warn(message);
            } else if (Level.FINE.equals(level)) {
                logger.debug(message);
            }

            return null;
        }

    }

选项 2

在此选项中,您使用 SLF4J 进行日志记录,并配置一个将 java.util.logging.Logger 重定向到 Log4j 的桥。 我自己还没有实现这个方法,但你可以在这里阅读: JUL to SLF4J Bridge

关于gwt - 配置 gwt-log 的 remoteLogger;使用log4j把它放在一个单独的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7222124/

相关文章:

java - 如何使用 GWTQuery 获取对 Window 对象的引用?

java - 如何阻止我的小程序刷新我的 GWT 页面?

java - log4j:WARN 在 org.apache.log4j.RollingFileAppender 中没有这样的属性 [rollingPolicy]

java - 在log4j中使用MDC动态命名日志文件

java - 在 Tomcat Web 应用程序中编辑 javascript 文件

java - 是否可以没有任何与 Smart GWT ComboBoxItem 关联的文本?

java - GWT 网格的 DoubleClick 事件处理程序

java - Log4j 与 Logback : concurrent writing to same log?

java - 无法在 Tomcat 6 服务器中解压缩 WAR 文件

java - 防止在不使用 .htaccess/apache conf 的情况下访问 war 文件