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

17 篇文章 0 订阅

   最近的开发过程中发生一件非常让人苦恼的事件: 在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的配置 ###
#配置根logger
log4j.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,stdout
log4j.appender.syslog.encoding=UTF-8
log4j.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
#输出文件最大为10M
log4j.appender.RollingAppender.MaxFileSize=2MB
log4j.appender.RollingAppender.Threshold=INFO
#输出文件最大序号为10
log4j.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值