徹底解決tomcat6加入log4j後在linux平台下亂碼的問題__linux

來源:互聯網
上載者:User

   最近的開發過程中發生一件非常讓人苦惱的事件: 在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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.