彻底解决tomcat6加入log4j后在linux平台下乱码的问题

来源:互联网 发布:如何参加淘宝客 编辑:程序博客网 时间:2024/04/30 13:37

   最近的开发过程中发生一件非常让人苦恼的事件: 在windows下的tomcat8+jdk1.8调试没问题, tomcat6+jdk1.6测试环境也没问题, 但分发到生产环境的linux(tomcat6+jdk1.6) , 使用不久用户反映输入的中文全部变乱码 !

   可幸事先有做备份,  于是赶紧恢复备份,接下来写了一个小小的测试 test.jsp丢到linux环境下:

<%@page import="org.apache.commons.logging.LogFactory"%><%@page import="org.apache.commons.logging.Log"%><% /* --------------------------------------------------------------------  Program:SAR920L1 -   Created:22/Oct/2008 by csmiswfl  Modify:   26/DEC/2008 by dgmishxw  Modify:05/Jan/2009 by csmiswfl  Modify:14/Jan/2010 by dgmislfb  * -------------------------------------------------------------------- */%><%@ include file="sardef.jsp" %><%@ include file="common/alco_lib.jsp" %><%@ include file="common/alco_header.jsp" %><script type="text/javascript" src="js/jq.js"></script><%//*  // Database Access  Connection w_conn = null;  Statement w_stmt = null;  ResultSet w_rs = null;  String lvName="";  String pvStaffName=X01getParameter(c_para, "staffname");  if (pvStaffName==null){  pvStaffName="";  }  Log log = LogFactory.getLog("test");  log.info("input value:"+pvStaffName);  try   {    w_conn = X60getConnection();    w_stmt = w_conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);    if (!pvStaffName.equals("")){    X62executeSQL(w_stmt,"update test set staffname='"+pvStaffName+"'");    }    w_rs=X61executeQuery(w_stmt, "select * from test limit 1");    w_rs.next();    lvName=w_rs.getString("staffname");    w_rs.close();  }finally   { X63closeConn(w_conn, w_stmt, w_rs); }   //%><div>   submit value:<%=pvStaffName %><br/>   database value: <%=lvName %></div><form action="./test.jsp" method="post"><label>Update Name:</label><input name="staffname" value="<%=lvName%>"/><input type="submit" /></form>

在新的web app下, 在test.jsp页面输入中文, input value是乱码的,各种排除后最终发现原来是log4j惹的祸!后来指定了log4j的日志输出encoding还是不行,无意中,将日志级别改为INFO再试,OK了!刚开始以为手误,再改为DEBUG,乱码!改为INFO正常!!! 真是无比奇葩! 但在linux下的tomcat8+jdk1.8是完全没问题的, 这是log4j的bug还是tomcat6的bug ?!

贴出这份log4j的配置,兼容tomcat6的中文/log输出也是中文,项目的编码是utf-8。

### logger的配置 ####配置根loggerlog4j.rootLogger=INFO,stdout,RollingAppender#配置子logger:org.lavasoft(在org.lavasoft包中类的日志在没有指定子logger名的情况下使用这个logger)#log4j.logger.org.lavasoft=ERROR,file#配置子logger:org.lavasoft.test(在org.lavasoft.test包中类的日志在没有指定子logger名的情况下使用这个logger)#log4j.logger.org.lavasoft.test=ERROR,file1,stdoutlog4j.appender.syslog.encoding=UTF-8log4j.appender.logfile.encoding=UTF-8### direct log messages to stdout ### (标准的终端输出)#控制台输出log4j.appender.stdout=org.apache.log4j.ConsoleAppender#自定义输出布局log4j.appender.stdout.layout=org.apache.log4j.PatternLayout#输出的格式log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file ttt.log ### (输入到文件ttt.log的配置)#输出到滚动文件log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender#输出文件最大为10Mlog4j.appender.RollingAppender.MaxFileSize=2MBlog4j.appender.RollingAppender.Threshold=INFO#输出文件最大序号为10log4j.appender.RollingAppender.MaxBackupIndex=10#输出文件路径log4j.appender.RollingAppender.File=/live/logs/dgsar#log4j.appender.Appender2.DatePattern=’_’yyyy-MM-dd’.log’log4j.appender.RollingAppender.DatePattern='.'yyyy-MM-dd#自定义输出布局log4j.appender.RollingAppender.layout=org.apache.log4j.PatternLayout#输出格式log4j.appender.RollingAppender.layout.ConversionPattern=%d %-5p [%t] (%13F:%L) %3x - %m%n 

project 的log4j版本:log4j-1.2.17

0 0