锘??xml version="1.0" encoding="utf-8" standalone="yes"?> org.springframework.dao.InvalidDataAccessApiUsag 闂錛?span style="font-family: 瀹嬩綋; color: #0055ff; font-size: 14px">鍙妯″紡涓?FlushMode.NEVER/MANUAL)鍐欐搷浣滀笉琚厑璁革細鎶婁綘鐨凷ession鏀規(guī)垚FlushMode.COMMIT/AUTO鎴栬呮竻闄や簨鍔″畾涔変腑鐨剅eadOnly鏍囪銆?/span> 閿欒鍘熷洜: web.xml閰嶇疆閲屾坊鍔?/span> 濡傛灉鍦ㄤ氦緇檚pring 綆$悊鐨勬儏鍐典笅錛屽湪beans.xml 閲岀殑閰嶇疆 Hibernate鐨凣enerator灞炴ф湁7縐峜lass錛屾湰鏂囩畝鐣ユ弿榪頒簡榪?縐峜lass鐨勬剰涔夊拰鐢ㄦ硶銆?/p>
1銆乮dentity錛氱敤浜嶮ySql鏁版嵁搴撱傜壒鐐癸細閫掑 娉細瀵逛簬MySql鏁版嵁搴撲嬌鐢ㄩ掑搴忓垪鏃墮渶瑕佸湪寤鴻〃鏃跺涓婚敭鎸囧畾涓篴uto_increment灞炴с?/p>
2銆乻equence錛氱敤浜嶰racle鏁版嵁搴? 3銆乶ative錛氳法鏁版嵁搴撴椂浣跨敤錛岀敱搴曞眰鏂硅█浜х敓銆? 娉細浣跨敤native鏃禜ibernate榛樿浼氬幓鏌ユ壘Oracle涓殑hibernate_sequence搴忓垪銆? 4銆乭ilo錛氶氳繃楂樹綆浣嶅悎鎴恑d錛屽厛寤鴻〃hi_value錛屽啀寤哄垪next_value銆傚繀欏昏鏈夊垵濮嬪箋?/p>
5銆乻equencehilo錛氬悓榪囬珮浣庝綅鍚堟垚id錛屽緩涓涓猻equence搴忓垪錛屼笉鐢ㄥ緩琛ㄣ? 6銆乤ssigned錛氱敤鎴瘋嚜瀹氫箟id; 7銆乫oreign錛氱敤浜庝竴瀵逛竴鍏崇郴鍏變韓涓誨仴鏃訛紝涓d鍊間竴鏍楓?/p>
鏈枃璁茶ВHibernate涓環(huán)bm鐨刧enerator瀛愬厓绱犵殑涓浜涘唴緗敓鎴愬櫒鐨勫揩鎹峰悕瀛椼侴enerator瀛愬厓绱犳槸涓涓潪甯哥畝鍗曠殑鎺ュ彛錛涙煇浜涘簲鐢ㄧ▼搴忓彲浠ラ夋嫨鎻愪緵浠栦滑鑷繁鐗瑰畾鐨勫疄鐜般?/p>
鍦?.hbm.xml蹇呴』澹版槑鐨?lt; generator>瀛愬厓绱犳槸涓涓狫ava綾葷殑鍚嶅瓧錛岀敤鏉ヤ負璇ユ寔涔呭寲綾葷殑瀹炰緥鐢熸垚鍞竴鐨勬爣璇嗐?/p>
榪欐槸涓涓潪甯哥畝鍗曠殑鎺ュ彛錛涙煇浜涘簲鐢ㄧ▼搴忓彲浠ラ夋嫨鎻愪緵浠栦滑鑷繁鐗瑰畾鐨勫疄鐜般傚綋鐒訛紝Hibernate鎻愪緵浜嗗緢澶氬唴緗殑瀹炵幇銆備笅闈㈡槸Generator瀛愬厓绱犵殑涓浜涘唴緗敓鎴愬櫒鐨勫揩鎹峰悕瀛楋細 increment錛堥掑錛?/strong> 鐢ㄤ簬涓簂ong, short鎴栬卛nt綾誨瀷鐢熸垚鍞竴鏍囪瘑銆傚彧鏈夊湪娌℃湁鍏朵粬榪涚▼寰鍚屼竴寮犺〃涓彃鍏ユ暟鎹椂鎵嶈兘浣跨敤銆?鍦ㄩ泦緹や笅涓嶈浣跨敤銆?/p>
identity 瀵笵B2,MySQL, MS SQL Server, Sy锝傦絹锝擄絽鍜孒ypersonicSQL鐨勫唴緗爣璇嗗瓧孌墊彁渚涙敮鎸併傝繑鍥炵殑鏍囪瘑絎︽槸long, short 鎴栬卛nt綾誨瀷鐨勩?/p>
sequence 錛堝簭鍒楋級 鍦―B2,PostgreSQL, Oracle, SAP DB, McKoi涓嬌鐢ㄥ簭鍒楋紙sequence)錛岃屽湪Inter锝傦絹锝擄絽涓嬌鐢ㄧ敓鎴愬櫒(generator)銆傝繑鍥炵殑鏍囪瘑絎︽槸long, short鎴栬?int綾誨瀷鐨勩?/p>
hilo 錛堥珮浣庝綅錛?/strong> 浣跨敤涓涓珮/浣庝綅綆楁硶鏉ラ珮鏁堢殑鐢熸垚long, short鎴栬?int綾誨瀷鐨勬爣璇嗙銆傜粰瀹氫竴涓〃鍜屽瓧孌碉紙榛樿鍒嗗埆鏄槸hibernate_unique_key 鍜宯ext_hi錛変綔涓洪珮浣嶅煎緱鏉ユ簮銆傞珮/浣庝綅綆楁硶鐢熸垚鐨勬爣璇嗙鍙湪涓涓壒瀹氱殑鏁版嵁搴撲腑鏄敮涓鐨勩傚湪浣跨敤JTA鑾峰緱鐨勮繛鎺ユ垨鑰呯敤鎴瘋嚜琛屾彁渚涚殑榪炴帴涓紝涓嶈浣跨敤榪欑鐢熸垚鍣ㄣ?/p>
seqhilo錛堜嬌鐢ㄥ簭鍒楃殑楂樹綆浣嶏級 浣跨敤涓涓珮/浣庝綅綆楁硶鏉ラ珮鏁堢殑鐢熸垚long, short鎴栬?int綾誨瀷鐨勬爣璇嗙錛岀粰瀹氫竴涓暟鎹簱搴忓垪錛坰equence)鐨勫悕瀛椼?/p>
uuid.hex 鐢ㄤ竴涓?28-bit鐨刄UID綆楁硶鐢熸垚瀛楃涓茬被鍨嬬殑鏍囪瘑絎︺傚湪涓涓綉緇滀腑鍞竴錛堜嬌鐢ㄤ簡IP鍦板潃錛夈俇UID琚紪鐮佷負涓涓?2浣?6榪涘埗鏁板瓧鐨勫瓧絎︿覆銆?/p>
uuid.string 浣跨敤鍚屾牱鐨刄UID綆楁硶銆俇UID琚紪鐮佷負涓涓?6涓瓧絎﹂暱鐨勪換鎰廇SCII瀛楃緇勬垚鐨勫瓧絎︿覆銆備笉鑳戒嬌鐢ㄥ湪PostgreSQL鏁版嵁搴撲腑 native錛堟湰鍦幫級 鏍規(guī)嵁搴曞眰鏁版嵁搴撶殑鑳藉姏閫夋嫨identity, sequence 鎴栬卙ilo涓殑涓涓?/p>
assigned錛堢▼搴忚緗級 璁╁簲鐢ㄧ▼搴忓湪save()涔嬪墠涓哄璞″垎閰嶄竴涓爣紺虹銆?/p>
foreign錛堝閮ㄥ紩鐢級 浣跨敤鍙﹀涓涓浉鍏寵仈鐨勫璞$殑鏍囪瘑絎︺傚拰< one-to-one>鑱斿悎涓璧蜂嬌鐢ㄣ?/p>
Generator瀛愬厓绱犵殑鐢ㄦ硶錛?
http://fd.itedu-g.cn/login.php
]]>
Write operations are not allowed in read-only mode 鍙妯″紡涓?FlushMode.NEVER/MANUAL)鍐欐搷浣滀笉鍏?/h2>
瑙e喅鏂規(guī)硶:
<filter>
</filter>
<filter-mapping>
</filter-mapping>
]]>鏈枃璁茶堪Hibernate鐨刧enerator灞炴х殑鎰忎箟銆侴enerator灞炴ф湁7縐峜lass錛屾湰鏂囩畝鐣ユ弿榪頒簡榪?縐峜lass鐨勬剰涔夊拰鐢ㄦ硶銆?
Default.sequence涓篽ibernate_sequence
濡傛灉Oracle涓病鏈夎搴忓垪錛岃繛Oracle鏁版嵁搴撴椂浼氭姤閿欍?/p>
]]>
鍏朵腑“${WORKDIR}/”鏄釜鍙橀噺錛屼細琚玈ystem Property涓殑“WORKDIR”鐨勫間唬鏇褲傝繖鏍鳳紝鎴戜滑灝卞彲浠ュ湪log4j鍔犺澆閰嶇疆鏂囦歡涔嬪墠錛屽厛鐢⊿ystem.setProperty ("WORKDIR", WORKDIR);璁劇疆濂芥牴璺緞錛屾鎿嶄綔鍙氳繃涓鍒濆鐨剆ervlet榪涜銆?
鏂規(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濡備負榛樿鍚嶏紝鍙斁緗湪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璁句負0錛屼互渚垮湪Web瀹瑰櫒鍚姩鏃跺嵆瑁呭叆璇ervlet銆俵og4j.properties鏂囦歡鏀懼湪鏍圭殑properties瀛愮洰褰曚腑錛屼篃鍙互鎶婂畠鏀懼湪鍏跺畠鐩綍涓傚簲璇ユ妸.properties鏂囦歡闆嗕腑瀛樻斁錛岃繖鏍鋒柟渚跨鐞嗐?
(3).log4j.properties涓嵆鍙厤緗甽og4j.appender.file.File涓哄綋鍓嶅簲鐢ㄧ殑鐩稿璺緞.
浠ヤ笂鏄綉涓妉og4j鏃ュ織鏂囦歡鐨勭浉瀵硅礬寰勯厤緗殑涓夌鏂規(guī)硶錛堟垜鑳芥壘鍒扮殑灝變笁縐嶏級錛屽垎鏋愶細
鏂規(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鏃ュ織鏂囦歡鐨勭浉瀵逛簬褰撳墠搴旂敤鐨勮礬寰勩傝
緇嗕唬鐮佸涓嬶細
紼嬪簭浠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絳夌洰褰曚腑鏈濂芥敼鍚嶏紝鍥犱負鍦ㄥ姞杞芥Servlet涔嬪墠錛屾湇鍔″櫒濡倀omcat鍚姩鏃朵細鑷姩鎼滅儲web-inf鐩綍鍜寃eb-inf/classes鐩綍涓璴og4j.properties鏂囦歡錛屽鏈夊垯鑷姩鍔犺澆銆俵og4j灞炴ф枃浠跺姞杞藉悗,鐢變簬璇ュ睘鎬ф枃浠朵腑log4j.appender.A1.File鐨勫肩敤鐨勬槸鐩稿璺緞錛岃嚜鍔ㄥ姞杞介厤緗究浼氬嚭閿欙細
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: WEB-INF\logs\bysxxglxt.log (緋葷粺鎵句笉鍒版寚瀹氱殑璺緞銆?
涓嶇煡閬搇og4j涓轟粈涔堜細榪欎箞鏃╄嚜鍔ㄥ惎鍔ㄣ傚敖綆″悗闈㈠姞杞芥墿灞曠殑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
澶у鍦ㄧ紪紼嬫椂緇忓父涓嶅彲閬垮厤鍦拌浣跨敤鍒頒竴浜涙棩蹇楁搷浣滐紝姣斿寮鍙戦樁孌電殑璋冭瘯淇℃伅銆佽繍琛屾椂鐨勬棩蹇楄褰曞強瀹¤銆傝皟鏌ユ樉紺猴紝鏃ュ織浠g爜鍗犱唬鐮佹婚噺鐨?錛呫傞氬父澶у鍙互綆鍗曞湴浣跨敤System.out.println()璇彞杈撳嚭鏃ュ織淇℃伅錛屼絾鏄線寰浼氭湁涓浜涘垽鏂紝姣斿錛?
if (someCondition)
{
System.out.println("some information.");
}
榪欎簺鍒ゆ柇閫犳垚姝e父鐨勭▼搴忛昏緫涓販鏉備簡澶ч噺鐨勮緭鍑鴻鍙ャ傝屽湪寮鍙戦樁孌靛啓涓嬬殑榪欎簺鍒ゆ柇浠呬負浜嗚皟璇曠殑璇彞錛屽湪寮鍙戝畬鎴愭椂闇瑕佹煡鎵懼茍縐婚櫎銆傞儴緗茶繍琛屽悗錛屽挨鍏舵槸鍦ㄤ竴浜涗紒涓氬簲鐢ㄧ郴緇熶腑錛岃繕緇忓父闇瑕佽繘涓姝ヨ皟璇曪紝榪欐椂灝遍亣鍒頒簡鏇村ぇ鐨勯夯鐑︺傛墍浠ワ紝鎴戜滑闇瑕佷竴濂楀畬澶囩殑銆佺伒媧葷殑銆佸彲閰嶇疆鐨勬棩蹇楀伐鍏穕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>
public class Test {
public static void main(String[] args) {
Course course=new Course();
CourseDAO cdao=new CourseDAO();
Student stu=new Student();
StudentDAO sdao=new StudentDAO();
History his=new History();
HistoryId hid=new HistoryId();
HistoryDAO hdao=new HistoryDAO();
course.setCName("c++");
course.setCTer("寮犱笁");
stu.setSName("寮犲悓瀛?);
stu.setSAge(22);
hid.setCourse(course);
hid.setStudent(stu);
his.setId(hid);
cdao.save(course);
sdao.save(stu);
hdao.save(his);
}
}