GWT远程日志记录转到System.out而不是日志文件 [英] GWT remote logging going to System.out instead of log file

查看:80
本文介绍了GWT远程日志记录转到System.out而不是日志文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经根据gwt文档设置了gwt远程日志记录,但是我的日志将转到System.out而不是写入日志文件。



我的gwt模块看起来像:

 < module rename-to ='ezdappserver'> 

< inherits name =com.google.gwt.logging.Logging/>
< set-property name =gwt.logging.simpleRemoteHandlervalue =ENABLED/>
< set-property name =gwt.logging.logLevelvalue =FINEST/>
< set-property name =gwt.logging.enabledvalue =TRUE/>
< / module>

我的servlet定义是这样设置的:

 < 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> / ezdappserver / remote_logging< / url-pattern>
< / servlet-mapping>

当记录错误时,我在控制台中看到如下输出:

  2014年3月26日下午2点10分36秒com.google.gwt.logging.server.RemoteLoggingServiceUtil logOnServer 
SEVERE:捕获到异常:(NotFoundError )
....其余的错误....

我期待这个输出写入我的战争中某处的日志文件。此外,我真的想能够指定这个文件的位置,但我还没有找到任何文档。



任何帮助都可以非常感谢。



注意:我没有运行这种通过开发模式,这是与编译代码。



谢谢! / p>

解决方案

根据您的要求,在 gwt.xml

 <! - 此处理程序将日志消息发送到服务器,在那里它们将使用服务器端日志记录机制进行记录。 - > 
< set-property name =gwt.logging.simpleRemoteHandlervalue =ENABLED/>
<! - 通过调用方法GWT.log记录日志。这些消息只能在DevMode窗口的开发模式中看到。 - >
< set-property name =gwt.logging.developmentModeHandlervalue =ENABLED/>
<! - 这些消息只能在DevMode窗口的开发模式中看到。 - >
<! - 当这个句柄被启用时,记录到驻留在应用程序左上角的弹出窗口。 - >
<! - 记录到Firebug Lite(适用于IE),Safari和Chrome使用的JavaScript控制台。 - >
< set-property name =gwt.logging.consoleHandlervalue =DISABLED/>
<! - 记录到萤火虫控制台。 - >
< set-property name =gwt.logging.firebugHandlervalue =DISABLED/>






如果上述配置仍然不适用于您,尝试下面的代码以及上面的配置。

添加 log4j.xml 文件以定义日志文件位置

 <?xml version =1.0encoding =UTF-8?> 
<!DOCTYPE log4j:configuration SYSTEMlog4j.dtd>

< log4j:configuration xmlns:log4j =http://jakarta.apache.org/log4j/>

< appender name =STDOUTclass =org.apache.log4j.ConsoleAppender>
< layout class =org.apache.log4j.PatternLayout>
< param name =ConversionPatternvalue =DT =>%d [%.4t]%-5p%c {1} - %m%n/>
< / layout>
< / appender>

< appender name =SERVER_FILE_LOGclass =org.apache.log4j.RollingFileAppender>
< param name =Filevalue =$ {jboss.server.log.dir} /logs/DataTools_Server.log/>
< param name =Appendvalue =true/>
< param name =MaxFileSizevalue =5MB/>
< param name =MaxBackupIndexvalue =10/>
< layout class =org.apache.log4j.PatternLayout>
< param name =ConversionPatternvalue =%d [%.4t]%-5p [%c]%m%n/>
< / layout>
< / appender>

< appender name =CLIENT_FILE_LOGclass =org.apache.log4j.RollingFileAppender>
< param name =Filevalue =$ {jboss.server.log.dir} /logs/DataTools_Client.log/>
< param name =Appendvalue =true/>
< param name =MaxFileSizevalue =5MB/>
< param name =MaxBackupIndexvalue =10/>
< layout class =org.apache.log4j.PatternLayout>
< param name =ConversionPatternvalue =%d [%.4t]%-5p%m%n/>
< / layout>
< / appender>

< category name =com.x.y.server>
< priority value =DEBUG/>
< appender-ref ref =SERVER_FILE_LOG/>
< appender-ref ref =STDOUT/>
< / category>

< category name =gwtRemoteLogging>
< priority value =ERROR/>
< appender-ref ref =CLIENT_FILE_LOG/>
< / category>

< root>
< priority value =ERROR/>
< appender-ref ref =SERVER_FILE_LOG/>
< / root>
< / log4j:配置>

通过执行 RemoteLoggingService 来定义您自己的日志记录servlet。

  import java.util.logging.Level; 
import java.util.logging.LogRecord;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;

import com.google.gwt.logging.server.StackTraceDeobfuscator;
import com.google.gwt.logging.shared.RemoteLoggingService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import org.apache.log4j.Logger;

/ **
*类GwtRemoteLogging。
* /
@SuppressWarnings(serial)
public class GwtRemoteLogging extends RemoteServiceServlet实现RemoteLoggingService {

/ **常量记录器。 * /
private StackTraceDeobfuscator deobfuscator = null;
private final static Logger logger = Logger.getLogger(gwtRemoteLogging);

@Override
public void init(ServletConfig config)throws ServletException {
super.init(config);
}

/ **
*记录已在服务器上使用GWT RPC进行序列化的日志记录。
*
* @返回错误信息,如果记录成功则返回null。
* /
public final String logOnServer(LogRecord lr){
try {
if(lr.getLevel()。equals(Level.SEVERE)){
logger .error(lr.getMessage(),lr.getThrown());
} else if(lr.getLevel()。equals(Level.INFO)){
logger.info(lr.getMessage(),lr.getThrown());
} else if(lr.getLevel()。equals(Level.WARNING)){
logger.warn(lr.getMessage(),lr.getThrown());
} else if(lr.getLevel()。equals(Level.FINE)){
logger.debug(lr.getMessage(),lr.getThrown());
} else {
logger.trace(lr.getMessage(),lr.getThrown());

} catch(Exception e){
logger.error(Remote logging failed,e);
返回远程记录失败,请查看堆栈跟踪以了解详细信息。;
}
返回null;
}

/ **
*默认情况下,该服务不会执行任何反混淆处理。为了执行服务器端
*反混淆处理,必须将symbolMaps文件复制到服务器可见的目录,并使用此方法设置目录
*。
*
* @param symbolMapsDir
* /
public void setSymbolMapsDirectory(String symbolMapsDir){
if(deobfuscator == null){
deobfuscator = new StackTraceDeobfuscator(symbolMapsDir);
} else {
deobfuscator.setSymbolMapsDirectory(symbolMapsDir);
}
}
}

web.xml

 < servlet> 
< servlet-name> remoteLogServlet< / servlet-name>
< servlet-class> com.x.y.server.servlet.GwtRemoteLogging< / servlet-class>
< / servlet>
< servlet-mapping>
< servlet-name> remoteLogServlet< / servlet-name>
< url-pattern> / ezdappserver / remote_logging< / url-pattern>
< / servlet-mapping>


I have setup gwt remote logging based on the gwt documentation, however my logs are going to System.out instead of being written to a log file.

My gwt module looks like:

<module rename-to='ezdappserver'>

    <inherits name="com.google.gwt.logging.Logging"/>
    <set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" />
    <set-property name="gwt.logging.logLevel" value="FINEST"/>
    <set-property name="gwt.logging.enabled" value="TRUE"/>
    <set-property name="gwt.logging.consoleHandler" value="ENABLED" />
    <set-property name="gwt.logging.popupHandler" value="DISABLED" />
</module>

My servlet definition is setup like:

<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>/ezdappserver/remote_logging</url-pattern>
</servlet-mapping>

When an error is logged I see output in my console like so:

Mar 26, 2014 2:10:36 PM com.google.gwt.logging.server.RemoteLoggingServiceUtil logOnServer
SEVERE: Exception caught: (NotFoundError) 
....Rest of error....

I was expecting this output to be written to a log file somewhere in my war. Also, I would really like to be able to specify where this file is located, however I haven't been able to find any documentation on that either.

Any help would be much appreciated.

NOTE: I am not running this through dev mode, this is with compiled code.

Thanks!

解决方案

Try below options also in gwt.xml based on your requirement:

<!-- This handler sends log messages to the server, where they will be logged using the server side logging mechanism. -->     
<set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" />  
<!-- Logs by calling method GWT.log. These messages can only be seen in Development Mode in the DevMode window. -->
<set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />  
<!-- These messages can only be seen in Development Mode in the DevMode window. -->
<set-property name="gwt.logging.systemHandler" value="ENABLED" />
<!-- Logs to the popup which resides in the upper left hand corner of application when this handler is enabled. -->
<set-property name="gwt.logging.popupHandler" value="DISABLED" />
<!-- Logs to the javascript console, which is used by Firebug Lite (for IE), Safari and Chrome. -->
<set-property name="gwt.logging.consoleHandler" value="DISABLED"/> 
<!-- Logs to the firebug console. -->
<set-property name="gwt.logging.firebugHandler" value="DISABLED" /> 


If above configuration are still not working for you then try below code along with above configuration.

Add log4j.xml file to define the log file location with log level

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="DT=> %d [%.4t] %-5p %c{1} - %m%n" />
        </layout>
    </appender>

    <appender name="SERVER_FILE_LOG" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="${jboss.server.log.dir}/logs/DataTools_Server.log" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="5MB" />
        <param name="MaxBackupIndex" value="10" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%.4t] %-5p [%c] %m%n" />
        </layout>
    </appender>

    <appender name="CLIENT_FILE_LOG" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="${jboss.server.log.dir}/logs/DataTools_Client.log" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="5MB" />
        <param name="MaxBackupIndex" value="10" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%.4t] %-5p %m%n" />
        </layout>
    </appender>

    <category name="com.x.y.server">
        <priority value="DEBUG" />
        <appender-ref ref="SERVER_FILE_LOG" />
        <appender-ref ref="STDOUT" />
    </category>

    <category name="gwtRemoteLogging">
        <priority value="ERROR" />
        <appender-ref ref="CLIENT_FILE_LOG" />
    </category>

    <root> 
        <priority value ="ERROR" />
        <appender-ref ref="SERVER_FILE_LOG" />
    </root>
</log4j:configuration>

Define you own logging servlet by implementing RemoteLoggingService

import java.util.logging.Level;
import java.util.logging.LogRecord;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;

import com.google.gwt.logging.server.StackTraceDeobfuscator;
import com.google.gwt.logging.shared.RemoteLoggingService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import org.apache.log4j.Logger;

/**
 * The Class GwtRemoteLogging.
 */
@SuppressWarnings("serial")
public class GwtRemoteLogging extends RemoteServiceServlet implements RemoteLoggingService {

    /** The Constant logger. */
    private StackTraceDeobfuscator deobfuscator = null;
    private final static Logger logger = Logger.getLogger("gwtRemoteLogging");

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }

    /**
     * Logs a Log Record which has been serialized using GWT RPC on the server.
     * 
     * @return either an error message, or null if logging is successful.
     */
    public final String logOnServer(LogRecord lr) {
        try {
            if (lr.getLevel().equals(Level.SEVERE)) {
                logger.error(lr.getMessage(),lr.getThrown());
            } else if (lr.getLevel().equals(Level.INFO)) {
                logger.info(lr.getMessage(),lr.getThrown());
            } else if (lr.getLevel().equals(Level.WARNING)) {
                logger.warn(lr.getMessage(),lr.getThrown());
            } else if (lr.getLevel().equals(Level.FINE)) {
                logger.debug(lr.getMessage(),lr.getThrown());
            } else {
                logger.trace(lr.getMessage(),lr.getThrown());
            }
        } catch (Exception e) {
            logger.error("Remote logging failed", e);
            return "Remote logging failed, check stack trace for details.";
        }
        return null;
    }

    /**
     * By default, this service does not do any deobfuscation. In order to do server side
     * deobfuscation, you must copy the symbolMaps files to a directory visible to the server and
     * set the directory using this method.
     * 
     * @param symbolMapsDir
     */
    public void setSymbolMapsDirectory(String symbolMapsDir) {
        if (deobfuscator == null) {
            deobfuscator = new StackTraceDeobfuscator(symbolMapsDir);
        } else {
            deobfuscator.setSymbolMapsDirectory(symbolMapsDir);
        }
    }
}

web.xml

<servlet>
    <servlet-name>remoteLogServlet</servlet-name>
    <servlet-class>com.x.y.server.servlet.GwtRemoteLogging</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>remoteLogServlet</servlet-name>
    <url-pattern>/ezdappserver/remote_logging</url-pattern>
</servlet-mapping>

这篇关于GWT远程日志记录转到System.out而不是日志文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆