zoukankan      html  css  js  c++  java
  • myeclipse中控制台日志比实际晚8小时解决方法及java日志处理

    今天终于忍不住要解决myeclipse控制台中日志显示比实际晚8小时的问题,开始以为myeclipse编辑器时间问题,后来想想不对,myeclipse控制台打印的是tomcat的日志,随后以为是log4g日志显示问题,上网搜索还是没结果,意外发现是tomcat日志时间选择时区问题,试了下在preference中增加jvm的参数-Duser.timezone=GMT+08,重启tomcat后问题解决。

    另外今天代码走查提到日志处理,我想总结下目前接触到的日志处理方法,觉得有必要抛弃旧的system.out.println()日志调试方式,尽可能多的用log4g的方式:
     private static final Logger log = LoggerFactory.getLogger(Object.class);
    随后的代码中要输出日志只要log.debug();log.info();log.warn();log.error();就可以了。
    当然以上日志是记录到配置文件中的,对于要记录到数据库中的操作日志,则需自己框架再提供接口。
    最后转载下tomcat服务时间比实际晚8小时解决方法的文章。

    问题来源

    项目中有和当前时间比较的地方,发现不对后,经过跟踪分析发现是new Date()的时间要晚八个小时,估计Tomcat采用的是伦敦时间吧.

    在网上收集了资料,整理大致有下面三种解决方案.

    第一种:

    是由于你的系统注册表里的时区信息丢失了,将时区信息导进注册表即可.

    解决办法(windows系统):

    到别人的机器上运行regedit

    将[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionTime Zones 这个注册表分支导出为一个文件,(如time.reg)

    再将它合并到你的注册表里就行了(直接双击time.reg文件)

    第二种:


    打开tomcat服务管理器的java页


    在Java Options里面输入需要设置的参数,如设置permsize的内存
    -XX:PermSize=64M
    -XX:MaxPermSize=192m
    -XX:ReservedCodeCacheSize=48m
    -Duser.timezone=GMT+08
    注:每一行后面都不能有空格。

    第三种:

    方法二.修改{TOMCAT_HOME}/bin/catalina.bat文件

    在最后几句以%_EXECJAVA%开头的语句后面加上“ -Duser.timezone=GMT+08 ”

    如:
    rem Execute Java with the applicable properties
    if not "%JPDA%" == "" goto doJpda
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS%-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath"%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%"-Dcatalina.home="%CATALINA_HOME%" -Duser.timezone=GMT+08-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end
    :doSecurity
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS%-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath"%CLASSPATH%" -Djava.security.manager-Djava.security.policy=="%SECURITY_POLICY_FILE%"-Dcatalina.base="%CATALINA_BASE%"-Dcatalina.home="%CATALINA_HOME%" -Duser.timezone=GMT+08-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS%%ACTION%
    goto end
    :doJpda
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n%DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath"%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%"-Dcatalina.home="%CATALINA_HOME%" -Duser.timezone=GMT+08 -Djava.io.tmpdir="%CATALINA_TMPDIR%"%MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end
    :doSecurityJpda
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS%-Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n%DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath"%CLASSPATH%" -Djava.security.manager-Djava.security.policy=="%SECURITY_POLICY_FILE%"-Dcatalina.base="%CATALINA_BASE%"-Dcatalina.home="%CATALINA_HOME%" -Duser.timezone=GMT+08-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS%%ACTION%

    试想,能够在程序中控制为北京时间,这样具有更好的移植性.但经过尝试都不成功,估计原因还是Tomcat得到默认时区和语言环境获仍然是原来的.换句话说tomcat这个时间依赖于操作系统,如果系统时间不对,程序里是无法控制的.
                    SimpleDateFormat txtDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    // 直接new一个Date对象
                    Date date1 = new Date();
                    System.out.println(txtDate.format(date1));
                    //
                    Calendar cal = Calendar.getInstance(new SimpleTimeZone(8,"GMT"));
                    Date date2 = cal.getTime();
                    System.out.println(txtDate.format(date2));
                    //
                    Calendar bjTime= Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
                    Date date3 = bjTime.getTime();
                    System.out.println(txtDate.format(date3));
                    //
                    java.util.Locale   locale   =   java.util.Locale.getDefault();
                    java.util.Date   date4   =   new   java.util.Date();
                    SimpleDateFormat   sdf   =   new   SimpleDateFormat( "yyyy-MM-dd HH:mm:ss",locale);
                    System.out.println(sdf.format(date4));
     
    上面的代码在tomcat上运行,仍然相差8个小时.
     
       Calendar serverDateNextHour=Calendar.getInstance(Locale.CHINA);
       DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.CHINA);
       serverDateNextHour.add(Calendar.HOUR_OF_DAY, 1);
    更多0

     




  • 相关阅读:
    Java NIO(六)选择器
    Java NIO(五)套接字通道
    Java NIO(四)文件通道
    Java NIO(三)通道
    Java NIO(二)缓冲区
    Java NIO(一)概述
    gcc中的内嵌汇编语言(Intel i386平台)
    一些汇编指令
    403 Forbidden解决方案
    Linux从入门到放弃
  • 原文地址:https://www.cnblogs.com/doit8791/p/3439430.html
Copyright © 2011-2022 走看看