锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
http://fd.itedu-g.cn/login.php
]]>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 鐢ㄦ埛鏁版嵁搴撹闂殑綾?br /> *@浣滆匒dministrator
*@createTime 2011-12-5 涓婂崍11:55:18
*@version 1.0
*/
public class DButil1 {
private Connection conn;
private Statement st;
private PreparedStatement pps;
private ResultSet rs;
public String url="jdbc:oracle:thin:@localhost:1521:orcl";
private String user="hyl";
private String password="hyl";
//鍔犺澆椹卞姩銆佹斁鍦ㄩ潤鎬佷唬鐮佸潡涓紝淇濊瘉椹卞姩鍦ㄦ暣涓」鐩腑鍙姞杞戒竴嬈★紝鎻愰珮鏁堢巼
static{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 鑾峰彇榪炴帴鐨勬柟娉?br /> * @return Connection 涓涓湁鏁堢殑鏁版嵁搴撹繛鎺?br /> */
public Connection getConnection()
{
try {
//娉ㄦ剰閾炬帴鏃訛紝瑕佹崲鎴愯嚜宸辯殑鏁版嵁搴撳悕錛屾暟鎹簱鐢ㄦ埛鍚嶅強(qiáng)瀵嗙爜
Connection con=DriverManager.getConnection(url,user,password);
return con;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 鐢ㄤ簬鎵ц鏇存柊鐨勬柟娉?鍖呮嫭錛坕nsert delete update錛夋搷浣?br /> * @param sql String 綾誨瀷鐨凷QL璇彞
* @return Integer 琛ㄧず鍙楀獎(jiǎng)鍝嶇殑琛屾暟
*/
public int update(String sql)
{
//瀹氫箟鍙橀噺鐢ㄦ潵鍒ゆ柇鏇存柊鎿嶄綔鏄惁鎴愬姛錛屽鏋滆繑鍥?1璇存槑娌℃湁褰卞搷鍒版洿鏂版搷浣滅殑鏁版嵁搴撹褰曟潯鏁幫紝鍗蟲洿鏂版搷浣滃け璐?br /> int row=-1;
try {
//濡傛灉鏁版嵁搴撻摼鎺ヨ鍏抽棴浜嗭紝灝辮鏃㈠緱涓涓柊鐨勯摼鎺?br /> if(conn==null||conn.isClosed()){
conn=getConnection();
}
//浣跨敤Connection瀵硅薄conn鐨刢reateStatement()鍒涘緩Statement錛堟暟鎹簱璇彞瀵硅薄錛塻t
st=conn.createStatement();
//鎵ц鏇存柊鎿嶄綔錛岃繑鍥炲獎(jiǎng)鍝嶇殑璁板綍鏉℃暟row
row=st.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
finally{
close();
}
return row;
}
/**
* 鍩轟簬PreparedStatement鐨勪慨鏀規(guī)柟娉?PreparedStatement:琛ㄧず棰勭紪璇戠殑 SQL 璇彞鐨勫璞?br /> * @param sql String 綾誨瀷鐨凷QL璇彞錛坕nsert delete update錛?br /> * @param obj 瀛樻斁鍔ㄦ佸弬鏁扮殑鏁扮粍
* @return Integer 琛ㄧず鍙楀獎(jiǎng)鍝嶇殑琛屾暟
*/
public int update(String sql,Object ...obj)
{
try {
//鑾峰彇閾炬帴
if(conn==null||conn.isClosed()){
conn=getConnection();
}
//鍒涘緩棰勭紪璇戠殑 SQL 璇彞瀵硅薄
pps=conn.prepareStatement(sql);
//瀹氫箟鍙橀噺length浠h〃鏁扮粍闀垮害錛屼篃灝辨槸棰勫鐞嗙殑sql璇彞涓殑鍙傛暟涓暟
int length=0;
//ParameterMetaData錛氱敤浜庤幏鍙栧叧浜?PreparedStatement 瀵硅薄涓瘡涓弬鏁扮殑綾誨瀷鍜屽睘鎬т俊鎭殑瀵硅薄
ParameterMetaData pmd=pps.getParameterMetaData();
length=pmd.getParameterCount();
//寰幆灝唖ql璇彞涓殑?璁劇疆涓簅bj鏁扮粍涓搴旂殑鍊鹼紝娉ㄦ剰浠?寮濮嬶紝鎵浠瑕佸姞1
for(int i=0;i<length;i++)
{
pps.setObject(i+1, obj[i]);
}
//鎵ц鏇存柊鎿嶄綔
return pps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
close();
}
return -1;
}
/**
* 鑾峰彇涓鏉¤褰曠殑鏂規(guī)硶錛岃渚濊禆浜庝笅闈㈢殑queryToList鏂規(guī)硶錛屾敞鎰忔硾鍨嬬殑浣跨敤
* @param sql
* @return銆Map<String,Object>
*/
public Map<String,Object> getOneRow(String sql)
{
//鎵ц涓嬮潰鐨剄ueryToList鏂規(guī)硶
List<Map<String,Object>> list=queryToList(sql);
//涓夌洰榪愮畻錛屾煡璇㈢粨鏋渓ist涓嶄負(fù)絀鴻繑鍥瀕ist涓涓涓璞?鍚﹀垯榪斿洖null
return list.size()>0?list.get(0):null;
}
/**
* 榪斿洖鏌ヨ緇撴灉鍒楄〃錛屽艦濡傦細(xì)[{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}, {TEST_NAME=bbb, TEST_NO=3, TEST_PWD=bbb}...]
* @param sql
* @return List<Map<String,Object>>
*/
public List<Map<String,Object>> queryToList(String sql)
{
//鍒涘緩闆嗗悎鍒楄〃鐢ㄤ互淇濆瓨鎵鏈夋煡璇㈠埌鐨勮褰?br /> List<Map<String, Object>> list=new LinkedList<Map<String, Object>>();
try {
if(conn==null||conn.isClosed()){
conn=getConnection();
}
st=conn.createStatement();
rs=st.executeQuery(sql);
//ResultSetMetaData 鏄粨鏋滈泦鍏冩暟鎹紝鍙幏鍙栧叧浜?ResultSet 瀵硅薄涓垪鐨勭被鍨嬪拰灞炴т俊鎭殑瀵硅薄 渚嬪錛氱粨鏋滈泦涓叡鍖呮嫭澶氬皯鍒楋紝姣忓垪鐨勫悕縐板拰綾誨瀷絳変俊鎭?br /> ResultSetMetaData rsmd=rs.getMetaData();
//鑾峰彇緇撴灉闆嗕腑鐨勫垪鏁?br /> int columncount=rsmd.getColumnCount();
//while鏉′歡鎴愮珛琛ㄦ槑緇撴灉闆嗕腑瀛樺湪鏁版嵁
while(rs.next())
{
//鍒涘緩涓涓狧ashMap鐢ㄤ簬瀛樺偍涓鏉℃暟鎹?br /> HashMap<String, Object> onerow=new HashMap<String, Object>();
//寰幆鑾峰彇緇撴灉闆嗕腑鐨勫垪鍚嶅強(qiáng)鍒楀悕鎵瀵瑰簲鐨勫鹼紝姣忔寰幆閮藉緱鍒頒竴涓璞★紝褰㈠錛歿TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}
for(int i=0;i<columncount;i++)
{
//鑾峰彇鎸囧畾鍒楃殑鍚嶇О錛屾敞鎰弌rcle涓垪鍚嶇殑澶у皬鍐?br /> String columnName=rsmd.getColumnName(i+1);
onerow.put(columnName, rs.getObject(i+1));
}
//灝嗚幏鍙栧埌鐨勫璞newrow={TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}鏀懼埌闆嗗悎鍒楄〃涓?br /> list.add(onerow);
}
}catch (SQLException e) {
e.printStackTrace();
}
finally{
close();
}
return list;
}
/**
* 榪斿洖鏌ヨ緇撴灉鍒楄〃,浣跨敤鐨勬槸棰勭紪緇嶴QL 璇彞瀵硅薄PreparedStatement
* 褰㈠錛歔{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}, {TEST_NAME=bbb, TEST_NO=3, TEST_PWD=bbb}]
* @param sql
* @param paramValues
* @return List<Map<String,Object>>
*/
public List<Map<String,Object>> queryWithParam(String sql,Object ...paramValues){
//鍒涘緩闆嗗悎鍒楄〃鐢ㄤ互淇濆瓨鎵鏈夋煡璇㈠埌鐨勮褰?br /> List<Map<String, Object>> list=new LinkedList<Map<String, Object>>();
try {
if(conn==null||conn.isClosed()){
conn=getConnection();
}
pps = conn.prepareStatement(sql);
for (int i = 0; i < paramValues.length; i++) {
pps.setObject(i + 1, paramValues[i]);
}
rs = pps.executeQuery();
//ResultSetMetaData 鏄粨鏋滈泦鍏冩暟鎹紝鍙幏鍙栧叧浜?ResultSet 瀵硅薄涓垪鐨勭被鍨嬪拰灞炴т俊鎭殑瀵硅薄 渚嬪錛氱粨鏋滈泦涓叡鍖呮嫭澶氬皯鍒楋紝姣忓垪鐨勫悕縐板拰綾誨瀷絳変俊鎭?br /> ResultSetMetaData rsmd=rs.getMetaData();
//鑾峰彇緇撴灉闆嗕腑鐨勫垪鏁?br /> int columncount=rsmd.getColumnCount();
//while鏉′歡鎴愮珛琛ㄦ槑緇撴灉闆嗕腑瀛樺湪鏁版嵁
while (rs.next()) {
//鍒涘緩涓涓狧ashMap鐢ㄤ簬瀛樺偍涓鏉℃暟鎹?br /> HashMap<String, Object> onerow=new HashMap<String, Object>();
//寰幆鑾峰彇緇撴灉闆嗕腑鐨勫垪鍚嶅強(qiáng)鍒楀悕鎵瀵瑰簲鐨勫鹼紝姣忔寰幆閮藉緱鍒頒竴涓璞★紝褰㈠錛歿TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}
for(int i=0;i<columncount;i++)
{
//鑾峰彇鎸囧畾鍒楃殑鍚嶇О錛屾敞鎰弌rcle涓垪鍚嶇殑澶у皬鍐?br /> String columnName=rsmd.getColumnName(i+1);
onerow.put(columnName, rs.getObject(i+1));
}
//灝嗚幏鍙栧埌鐨勫璞newrow={TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}鏀懼埌闆嗗悎鍒楄〃涓?br /> list.add(onerow);
}
}catch (SQLException e) {
e.printStackTrace();
}
finally{
close();
}
return list;
}
/**
* 瀹炵幇oracle鍒嗛〉鍔熻兘
* @param sql
* @param pagesize
* @param pagenow
* @return PageBean
*/
public PageBean getPage(String sql,int pagesize,int pagenow)
{
PageBean pb=new PageBean();
int end=pagenow*pagesize;
int start=end-pagesize+1;
String exesql="select a.* from (select t.*,rownum as rowindex from ("+sql+") t where rownum<="+end+" ) a where a.rowindex>="+start;
String countsql="select count(*) as rowcount from ("+sql+")";
pb.setResult(queryToList(exesql));
pb.setPagenow(pagenow);
pb.setPagesize(pagesize);
Map<String,Object> map=this.getOneRow(countsql);
int rows=Integer.parseInt(map.get("ROWCOUNT").toString());
pb.setRows(rows);
int pages=rows%pagesize==0?rows/pagesize:rows/pagesize+1;
pb.setPages(pages);
pb.setSql(sql);
return pb;
}
/**
* 鍏抽棴鏁版嵁搴撳悇縐嶈祫婧怌onnection Statement PreparedStatement ResultSet鐨勬柟娉?br /> */
private void close()
{
if(rs!=null)
{
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null)
{
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pps!=null){
try {
pps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
if(conn!=null&&!conn.isClosed())
{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
鏂規(guī)硶浜屻佸彲浠ヤ嬌鐢ㄦ湇鍔″櫒鐜鍙橀噺
log4j鐨勯厤緗枃浠舵敮鎸佹湇鍔″櫒鐨剉m鐨勭幆澧冨彉閲忥紝鏍煎紡綾諱技${catalina.home}
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log
log4j.appender.R.MaxFileSize=10KB
鍏朵腑鐨?{catalina.home}騫墮潪windows緋葷粺鐨勭幆澧冨彉閲忥紝榪欎釜鐜鍙橀噺灝變笉闇瑕佸湪Windows緋葷粺鐨勭幆澧冨彉閲忎腑璁劇疆銆備箣鎵浠ヨ繖鏍鳳紝浣犲彲浠ョ湅鐪媡omcat\bin\catalina.bat(startup,shutdown閮芥槸璋冪敤榪欎釜)閲岄潰鑷甫鏈?Dcatalina.home= "%CATALINA_HOME%" 銆傜戶鎵胯繖涓濇兂錛屾墍浠ヤ綘涔熷彲浠ヨ嚜宸辮瀹氫竴涓弬鏁?Dmylog.home="D:/abc/log"鍒板搴旂殑鏈嶅姟鍣╦ava鍚姩鐨剉m鍙傛暟涓?
鏂規(guī)硶涓夈侀氳繃servlet鍒濆鍖杋nit()鏂規(guī)硶涓姞杞絝ile灞炴у疄鐜扮浉瀵硅礬寰?
鍏蜂綋瀹炵幇:鍋氫竴涓猻ervlet,鍦ㄧ郴緇熷姞杞界殑鏃跺?灝辨妸properties鐨勬枃浠惰鍒頒竴涓猵roperties鏂囦歡涓?閭d釜file鐨勫睘鎬у?鎴戜嬌鐢ㄧ殑鏄浉瀵圭洰褰?鏀規(guī)帀(鍓嶉潰鍔犱笂緋葷粺鐨勬牴鐩綍),璁╁悗鎶婅繖涓猵roperties瀵硅薄璁劇疆鍒皃ropertyConfig涓幓,榪欐牱灝卞垵濮嬪寲浜唋og鐨勮緗?鍦ㄥ悗闈㈢殑浣跨敤涓氨鐢ㄤ笉鐫鍐嶉厤緗簡
涓鑸湪鎴戜滑寮鍙戦」鐩繃紼嬩腑,log4j鏃ュ織杈撳嚭璺緞鍥哄畾鍒版煇涓枃浠跺す,榪欐牱濡傛灉鎴戞崲涓涓幆澧?鏃ュ織璺緞鍙堥渶瑕侀噸鏂頒慨鏀?姣旇緝涓嶆柟渚?鐩墠鎴戦噰鐢ㄤ簡鍔ㄦ佹敼鍙樻棩蹇楄礬寰勬柟娉曟潵瀹炵幇鐩稿璺緞淇濆瓨鏃ュ織鏂囦歡
(1).鍦ㄩ」鐩惎鍔ㄦ椂,瑁呭叆鍒濆鍖栫被:
public class Log4jInit extends HttpServlet {
static Logger logger = Logger.getLogger(Log4jInit.class);
public Log4jInit() {
}
public void init(ServletConfig config) throws ServletException {
String prefix = config.getServletContext().getRealPath("/");
String file = config.getInitParameter("log4j");
String filePath = prefix + file;
Properties props = new Properties();
try {
FileInputStream istream = new FileInputStream(filePath);
props.load(istream);
istream.close();
//toPrint(props.getProperty("log4j.appender.file.File"));
String logFile = prefix + props.getProperty("log4j.appender.file.File");//璁劇疆璺緞
props.setProperty("log4j.appender.file.File",logFile);
PropertyConfigurator.configure(props);//瑁呭叆log4j閰嶇疆淇℃伅
} catch (IOException e) {
toPrint("Could not read configuration file [" + filePath + "].");
toPrint("Ignoring configuration file [" + filePath + "].");
return;
}
}
public static void toPrint(String content) {
System.out.println(content);
}
}
瀹為檯涓妉og4j鐨勯厤緗枃浠秎og4j.properties濡備負(fù)榛樿鍚嶏紝鍙斁緗湪JVM鑳借鍒扮殑classpath閲岀殑浠繪剰鍦版柟錛屼竴鑸槸鏀懼湪WEB- INF/classes鐩綍涓嬨傚綋log4j鐨勯厤緗枃浠朵笉鍐嶆槸榛樿鍚嶏紝鍒欓渶瑕佸彟澶栧姞杞藉茍緇欏嚭鍙傛暟錛屽涓?“ropertyConfigurator.configure(props);//瑁呭叆log4j閰嶇疆淇℃伅”
(2).Web.xml涓殑閰嶇疆
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
娉ㄦ剰錛氫笂闈㈢殑load-on-startup璁句負(fù)0錛屼互渚垮湪Web瀹瑰櫒鍚姩鏃跺嵆瑁呭叆璇ervlet銆俵og4j.properties鏂囦歡鏀懼湪鏍圭殑properties瀛愮洰褰曚腑錛屼篃鍙互鎶婂畠鏀懼湪鍏跺畠鐩綍涓傚簲璇ユ妸.properties鏂囦歡闆嗕腑瀛樻斁錛岃繖鏍鋒柟渚跨鐞嗐?
(3).log4j.properties涓嵆鍙厤緗甽og4j.appender.file.File涓哄綋鍓嶅簲鐢ㄧ殑鐩稿璺緞.
浠ヤ笂鏄綉涓妉og4j鏃ュ織鏂囦歡鐨勭浉瀵硅礬寰勯厤緗殑涓夌鏂規(guī)硶錛堟垜鑳芥壘鍒扮殑灝變笁縐嶏級(jí)錛屽垎鏋愶細(xì)
鏂規(guī)硶涓涓昏鏄墿灞曚簡log4j鐨凴ollingFileAppender綾伙紝鍏朵粬鐨凢ileAppender鍚屾牱閬撶悊銆傛墿灞曠殑鏂規(guī)硶錛屽氨鏄敤涓涓瓙綾誨幓瑕嗙洊setFile鏂規(guī)硶錛岃繖涓柟娉曞湪log4j璇誨彇閰嶇疆鏂囦歡鐢熸垚appender鐨勬椂鍊欒皟鐢紝浼犲叆鐨勫氨鏄厤
緗枃浠朵腑鐨勮礬寰勶紝榪欐牱鎴戝氨鍙互鎸夌収鑷繁鐨勬兂娉曞湪璺緞鍓嶉潰鍔犱笂鏍硅礬寰勪簡銆傝繖縐嶆柟娉曞彲浠ュ湪log4j.properties涓敤鐩稿璺緞鑷敱閰嶇疆log4j.appender.A1.File灞炴ф潵鍐沖畾鐢熸垚鐨勬棩蹇楃浉瀵箇eb搴旂敤鏍?
鐩綍鐨勪綅緗?
鏂規(guī)硶浜屾槸鍒╃敤鏈嶅姟鍣╲m涓凡緇忓瓨鍦ㄧ殑鐜鍙橀噺濡?{catalina.home}鏉ヨ緗浉瀵逛簬${catalina.home}鐨勬棩蹇楄礬寰勶紝鏃ュ織鍙兘鏀懼埌鏈嶅姟鍣ㄥ瓙鐩綍閲岋紝鑰屼笖濡傛灉鏄敤鐨勫叾瀹冩湇鍔″櫒錛屽垯瑕佹敼瀵瑰簲鐨勭幆澧冨彉閲忋傛鏂規(guī)硶騫沖彴縐繪涓嶆柟渚褲?
鏂規(guī)硶涓夋槸鎵╁睍ActionServlet綾伙紝瑕嗙洊鍏秈nit()鏂規(guī)硶錛屾柊鏂規(guī)硶涓澆鍏og4j.properties浣嶇疆鐨勫弬鏁幫紝鍙互鑷敱閰嶇疆log4j鐨勯厤緗枃浠剁殑鍚嶅瓧鍜屽瓨鏀句綅緗備篃鍙嚜鐢遍厤緗甽og4j鏃ュ織鏂囦歡鐨勭浉瀵逛簬褰撳墠搴旂敤鐨勮礬寰勩傝
緇嗕唬鐮佸涓嬶細(xì)
紼嬪簭浠g爜
package wbb.bysxxglxt.util;
import org.apache.struts.action.*;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
import javax.servlet.ServletException;
import java.util.Properties;
import java.io.InputStream;
import org.apache.log4j.PropertyConfigurator;
import java.io.FileInputStream;
import java.io.IOException;
public class ExtendedActionServlet extends ActionServlet {
private Log log = LogFactory.getLog(this.getClass().getName());
public ExtendedActionServlet() {}
public void init() throws ServletException {
log.info(
"Initializing, My MyActionServlet init this System's Const Variable");
String prefix = this.getServletConfig().getServletContext().getRealPath(
"/");
String file = this.getServletConfig().getInitParameter("log4j");
String filePath = prefix + file;
Properties props = new Properties();
System.out.println(prefix);
System.out.println(file);
System.out.println(filePath);
try {
FileInputStream log4jStream = new FileInputStream(filePath);
props.load(log4jStream);
log4jStream.close();
String logFile = prefix +
props.getProperty("log4j.appender.A1.File"); //璁劇疆璺緞
System.out.println(logFile);
props.setProperty("log4j.appender.A1.File", logFile);
PropertyConfigurator.configure(props); //瑁呭叆log4j閰嶇疆淇℃伅
} catch (IOException e) {
e.printStackTrace();
}
log.info("Initializing, end My Init");
super.init();//搴旂敤浜唖truts,姝ゆ柟娉曚笉鑳界渷錛孉ctionServlet瑕嗙洊浜嗙殑姝ゆ柟娉曚腑鏈夊緢澶氶噸瑕佹搷浣?
}
}
**********************搴旂敤web.xml 鍏抽敭閮ㄥ垎***************************
紼嬪簭浠g爜
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>wbb.bysxxglxt.util.ExtendedActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>log4j</param-name>
<param-value>properties\log4j.properties</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
娉ㄦ剰log4j鍙傛暟涓浉瀵硅礬寰勭殑鏂滄潬綰跨殑鍐欐硶錛岃屼笖log4j灞炴ф枃浠跺鏀劇疆鍦╳eb-inf/classes鐩綍鎴杦eb-inf絳夌洰褰曚腑鏈濂芥敼鍚嶏紝鍥犱負(fù)鍦ㄥ姞杞芥Servlet涔嬪墠錛屾湇鍔″櫒濡倀omcat鍚姩鏃朵細(xì)鑷姩鎼滅儲(chǔ)web-inf鐩綍鍜寃eb-inf/classes鐩綍涓璴og4j.properties鏂囦歡錛屽鏈夊垯鑷姩鍔犺澆銆俵og4j灞炴ф枃浠跺姞杞藉悗,鐢變簬璇ュ睘鎬ф枃浠朵腑log4j.appender.A1.File鐨勫肩敤鐨勬槸鐩稿璺緞錛岃嚜鍔ㄥ姞杞介厤緗究浼?xì)鍑洪敊锛?xì)
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: WEB-INF\logs\bysxxglxt.log (緋葷粺鎵句笉鍒版寚瀹氱殑璺緞銆?
涓嶇煡閬搇og4j涓轟粈涔堜細(xì)榪欎箞鏃╄嚜鍔ㄥ惎鍔ㄣ傚敖綆″悗闈㈠姞杞芥墿灞曠殑ActionServlet涓紜緗簡log4j灞炴ф枃浠跺茍姝e父鍔犺澆浜嗭紝浣嗘姤鐨勮繖涓敊榪樻槸鎬笉鐖界殑錛屼簬鏄彧鏈夋洿鏀筶og4j灞炴ф枃浠跺悕瀛楁垨鑰呮洿鏀瑰叾瀛樻斁浣嶇疆錛岃鍏朵笉鑳借嚜鍔ㄥ姞杞戒簡錛屼笉榪囪繕鏄湁涓や釜璀﹀憡錛?
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
log4j:WARN Please initialize the log4j system properly.
榪欐牱鍋氬氨綆楁槸鎺╄崇洍閾冧簡錛屽鏋滀綘鏈夋洿濂界殑瑙e喅鍔炴硶錛屽笇鏈涜兘鍦ㄦ璐村嚭鏉ワ紝澶у涓璧風(fēng)爺絀躲?
********************log4j.properties*****************************
### 璁劇疆logger綰у埆 ###
紼嬪簭浠g爜
log4j.rootLogger=DEBUG,stdout,A1
### appender.stdout杈撳嚭鍒版帶鍒跺彴 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= [%5p] [BYSXXGLXT] %d{yyyy-MM-dd HH:mm:ss}: %-4r [%-5p] [%t] ( %F,%L ) - %m%n
### appender.A1杈撳嚭鍒版棩蹇楁枃浠?###
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=WEB-INF\\logs\\bysxxglxt.log
##娉ㄦ剰涓婇潰鏃ュ織鏂囦歡鐩稿搴旂敤鏍圭洰褰曡礬寰勭殑鍐欐硶
log4j.appender.A1.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.A1.Append=true
## 杈撳嚭DEBUG綰у埆浠ヤ笂鐨勬棩蹇?
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern= [%5p] [BYSXXGLXT] %d{yyyy-MM-dd HH:mm:ss}: %-4r [%t] ( %F,%L ) - %m%n
鍦╯rc涓嬬紪鍐?涓?properties鏂囦歡
1.log4j.properties 涓嬮潰鏄唴瀹?/p>
##LOGGERS
#define a logger
log4j.rootLogger=INFO,console,file
##APPENDERS
#define an appender named console
log4j.appender.console=org.apache.log4j.ConsoleAppender
#define an appender named file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=d:/demo_log.txt
#set the log's size
log4j.appender.file.MaxFileSize=1000KB
log4j.appender.file.MaxBackupIndex=20
##LAYOUTS
#assign a SimpleLayout to console appender
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
#assign a PatternLayout to file appender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}]%m%n
2.
simplelog.properties涓嬮潰鏄唴瀹?/p>
log.apache.commons.logging.simplelog.defaultlog=info
3.
commons-logging.properties涓嬮潰鏄唴瀹?/p>
##set Log as Log4J
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
涓銆佷粈涔堟槸log4j
Log4j 鏄疉pache鐨勪竴涓紑鏀炬簮浠g爜欏圭洰錛岄氳繃浣跨敤Log4j錛屾垜浠彲浠ユ帶鍒舵棩蹇椾俊鎭緭閫佺殑鐩殑鍦版槸鎺у埗鍙般佹枃浠躲丟UI緇勪歡銆佺敋鑷蟲槸濂楁帴鍙f湇鍔″櫒銆丯T鐨勪簨浠惰褰曞櫒銆乁NIX Syslog瀹堟姢榪涚▼絳夛紱鎴戜滑涔熷彲浠ユ帶鍒舵瘡涓鏉℃棩蹇楃殑杈撳嚭鏍煎紡錛涢氳繃瀹氫箟姣忎竴鏉℃棩蹇椾俊鎭殑綰у埆錛屾垜浠兘澶熸洿鍔犵粏鑷村湴鎺у埗鏃ュ織鐨勭敓鎴愯繃紼嬨傛渶浠や漢鎰熷叴瓚g殑灝辨槸錛岃繖浜涘彲浠ラ氳繃涓涓厤緗枃浠舵潵鐏墊椿鍦拌繘琛岄厤緗紝鑰屼笉闇瑕佷慨鏀瑰簲鐢ㄧ殑浠g爜銆?
浜屻佹棩蹇楃畝浠?br />鏃ュ織鎸囧湪紼嬪簭涓彃鍏ヨ鍙ヤ互鎻愪緵璋冭瘯淇℃伅銆備嬌鐢ㄦ棩蹇楄兘澶熺洃瑙嗙▼搴忕殑鎵ц銆備緥濡傦紝鐢ㄦ埛鍒╃敤鏃ュ織鍙互鑾峰緱鍏充簬搴旂敤紼嬪簭鏁呴殰鐨勫畬鏁翠俊鎭傜敤鎴峰彲浠ュ皢璋冭瘯璇彞錛堝 System.out.println錛夋彃鍏ュ埌紼嬪簭涓互鑾峰緱璇︾粏鐨勮皟璇曚俊鎭?
涓夈侀」鐩腑涓轟粈涔堣鐢╨og4j
澶у鍦ㄧ紪紼嬫椂緇忓父涓嶅彲閬垮厤鍦拌浣跨敤鍒頒竴浜涙棩蹇楁搷浣滐紝姣斿寮鍙戦樁孌電殑璋冭瘯淇℃伅銆佽繍琛屾椂鐨勬棩蹇楄褰曞強(qiáng)瀹¤銆傝皟鏌ユ樉紺猴紝鏃ュ織浠g爜鍗犱唬鐮佹婚噺鐨?錛呫傞氬父澶у鍙互綆鍗曞湴浣跨敤System.out.println()璇彞杈撳嚭鏃ュ織淇℃伅錛屼絾鏄線寰浼?xì)鏈変竴浜涘垽鏂紝姣斿錛?
if (someCondition)
{
System.out.println("some information.");
}
榪欎簺鍒ゆ柇閫犳垚姝e父鐨勭▼搴忛昏緫涓販鏉備簡澶ч噺鐨勮緭鍑鴻鍙ャ傝屽湪寮鍙戦樁孌靛啓涓嬬殑榪欎簺鍒ゆ柇浠呬負(fù)浜嗚皟璇曠殑璇彞錛屽湪寮鍙戝畬鎴愭椂闇瑕佹煡鎵懼茍縐婚櫎銆傞儴緗茶繍琛屽悗錛屽挨鍏舵槸鍦ㄤ竴浜涗紒涓氬簲鐢ㄧ郴緇熶腑錛岃繕緇忓父闇瑕佽繘涓姝ヨ皟璇曪紝榪欐椂灝遍亣鍒頒簡鏇村ぇ鐨勯夯鐑?chǔ)銆傛墍浠ワ紝鎴戜滑闇瑕佷竴濂楀畬澶囩殑銆佺伒媧葷殑銆佸彲閰嶇疆鐨勬棩蹇楀伐鍏穕og4J灝辨槸浼樼鐨勯夋嫨銆?
鍥涖乴og4j緇勪歡
Log4j 鐢?logger銆乤ppender 鍜?layout 涓変釜緇勪歡緇勬垚銆傚彲浠ラ氳繃鍚屽悕鐨?Java 綾昏闂?Log4j 鐨勮繖涓変釜緇勪歡銆?/font>
Logger - 鍦ㄦ墽琛屽簲鐢ㄧ▼搴忔椂錛屾帴鏀舵棩蹇楄鍙ョ敓鎴愮殑鏃ュ織璇鋒眰銆傚畠鏄竴縐嶉噸瑕佺殑鏃ュ織澶勭悊緇勪歡錛?鍙互閫氳繃 log4j API 鐨?logger 綾誨鍏惰繘琛岃闂傚畠鐨勬柟娉曟湁錛歞ebug銆乮nfo銆亀arn銆乪rror銆乫atal 鍜?log銆傝繖浜涙柟娉曠敤浜庤褰曟秷鎭?
Appender - 綆$悊鏃ュ織璇彞鐨勮緭鍑虹粨鏋溿傛墽琛屾棩蹇楄鍙ユ椂錛孡ogger 瀵硅薄灝嗘帴鏀舵潵鑷棩蹇楄鍙ョ殑璁板綍璇鋒眰銆傛璇鋒眰鏄氳繃 logger 鍙戦佽嚦 appender 鐨勩傜劧鍚庯紝Appender 灝嗚緭鍑虹粨鏋滃啓鍏ュ埌鐢ㄦ埛閫夋嫨鐨勭洰鐨勫湴銆傚浜庝笉鍚岀殑鏃ュ織鐩殑鍦幫紝鎻愪緵涓嶅悓鐨?appender 綾誨瀷銆傝繖浜?appender 鍖呮嫭錛氱敤浜庢枃浠剁殑 file appender銆佺敤浜庢暟鎹簱鐨?JDBC appender 鍜岀敤浜?SMTP 鏈嶅姟鍣ㄧ殑 SMTP appender銆?
Layout - 鐢ㄤ簬鎸囧畾 appender 灝嗘棩蹇楄鍙ュ啓鍏ユ棩蹇楃洰鐨勫湴鎵閲囩敤鐨勬牸寮忋俛ppender 鍙互鐢ㄦ潵鏍煎紡鍖栬緭鍑虹粨鏋滅殑鍚勭甯冨眬鍖呮嫭錛氱畝鍗曞竷灞銆佹ā寮忓竷灞鍜?HTML 甯冨眬銆?/font>