今天终于忍不住要解决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_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Time 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

myeclipse中控制台日志比实际晚8小时解决方法及java日志处理的更多相关文章

  1. myeclipse中svn图标状态不显示问题的解决办法

    myeclipse中svn图标状态不显示问题的解决办法 博客分类: svn SVNMyeclipse工作WindowsC  myeclipse中使用 svn 插件,原本正常,未作任何更改,突然有一天, ...

  2. 检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下:

    检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下: 第 一步:首先将msvcr71.dll,  SQLD ...

  3. universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

    在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...

  4. MySQL中遇到的几种报错及其解决方法

    MySQL中遇到的几种报错及其解决方法 1.[Err] 1064 - You have an error in your SQL syntax; check the manual that corre ...

  5. [datatable]关于在DataTable中执行DataTable.Select("条件")返回DataTable的解决方法

    -- :09关于在DataTable中执行DataTable.Select("条件")返回DataTable的解决方法 在实际编程工程中,常常遇到这样的情况:DataTable并不 ...

  6. Eclipse中SVN修改的*星号没了,解决方法

    Eclipse中SVN修改的*星号没了,解决方法 打开Preference 第一步:去掉外加的 ">" 第二步:勾选Outgoing changes 这样做之后," ...

  7. Python3中使用HTMLTestRunner报No module named 'StringIO'解决方法

    今天在学习使用HTMLTestRunner生成测试报告时遇到一个报错,如图所示: 网上搜索了下“No module named 'StringIO'”解决方法,原来我用的是Python 3.X版本,而 ...

  8. 在MonoGame中SetRenderTarget会把后备缓冲区清除的解决方法

    在MonoGame中SetRenderTarget会把后备缓冲区清除的解决方法: 在构造函数中添加事件:graphics.PreparingDeviceSettings += Graphics_Pre ...

  9. MySQL中同时存在创建和更新时间戳字段解决方法浅析

    MySQL中同时存在创建和更新时间戳字段解决方法浅析 明确我的MySQL版本.mysql> SELECT VERSION();+------------+| VERSION() |+------ ...

随机推荐

  1. @@ROWCOUNT 含义

    返回受上一语句影响的行数. 如果行数大于 20 亿,请使用 ROWCOUNT_BIG. Transact-SQL 语句可以通过下列方式设置 @@ROWCOUNT 的值: 将 @@ROWCOUNT 设置 ...

  2. Maven--多模块依赖实例解析(五)

    <Maven--搭建开发环境(一)> <Maven--构建企业级仓库(二)> <Maven—几个需要补充的问题(三)> <Maven—生命周期和插件(四)&g ...

  3. c语言筛选质数

    #include <stdio.h> #include <stdlib.h> #include <math.h> int isit(int num) { int i ...

  4. c语言else匹配问题

    #include <stdio.h> #include <stdlib.h> //实现 依次输入三个递增的数 然后正确输出 //为什么得不到我们想要的结果呢 这就是else匹配 ...

  5. MySQL server version for the right syntax to use near &#39;type=InnoDB&#39; at line 1

    转载请注明出处:http://blog.csdn.net/bettarwang/article/details/40180271 在执行一个Hibernate的演示样例时,配置了<propert ...

  6. Android自定义控件(四)——让每一个Activity UI都具有弹性

    前面我们已经介绍了如何让你的ScrollView,ListView具有弹性, 今天,我们在前面的基础上,做一下适当的修改,让那些既不是ScrollView,也不是ListView的Activity页面 ...

  7. OC教程10-NSNumber具体

    NSNumber简单介绍 NSNumber是数字的对象形式,由于在OC的数组和字典中仅仅同意存放对象,所以我们有时候须要转化 我们普通的类型是   123 那么 NSNumber类型的是  @123, ...

  8. 字符串匹配之horspool算法(简化的BM算法)

    前面介绍在BF,KMP这些算法的时候老是提到BM这个东西,究竟这什么东西,有啥高深的,这些问题我们如今不去考虑.不知道,认真读前几篇文章的读者有没有发现前面的算法都是从模式串的前面開始匹配的,那我们就 ...

  9. Key lock 的秘密

    研究死锁,或者观察sp_lock,有时候最恼人的莫过于你看到下面研究成果的key lock,但是却不知道究竟是哪个page 哪个row被lock住了: Exec sp_lock:   就说上面的key ...

  10. va_list/va_start/va_arg/va_end深入分析

    http://www.cnblogs.com/justinzhang/archive/2011/09/29/2195969.html