JSTL詳解(二)
摘要: 9.2.3? EL 表達式的操作符 ... 閱讀全文posted @ 2007-01-18 10:02 nbt 閱讀(5870) | 評論 (3) | 編輯 收藏
jBPM is an embeddable BPM engine, which means that you can take jBPM and embed it into your own java project, rather then installing a separate product and integrate with it. One of the key aspects that make this possible is minimizing the dependencies. This chapter discusses the jbpm libraries and their dependencies.
?? jBPM是一個嵌入式的BPM(業(yè)務程序管理)引擎。本章討論jbpm庫和它的依賴庫。
jBPM 3 requires J2SE
jbpm-[version].jar is the library with the core jbpm functionality.是jbpm的核心功能庫。
jbpm-identity-[version].jar is the (optional) library containing an identity component as described in Section?11.11, “The identity component”.
可選的,這個庫包含了身份驗證組件。用于流程的參與者的管理。
In a minimal deployment, you can create and run processes with jBPM by putting only the commons-logging and dom4j library in your classpath. Beware that persisting processes to a database is not supported. The dom4j library can be removed if you don't use the process xml parsing, but instead build your object graph programatically.
最小的jbpm部署,只需要核心jbpm庫和commons-logging庫,以及dom4j庫到你的classpath中。此時,不支持持久化業(yè)務程序到數(shù)據(jù)庫。
Library庫 | Usage用途 | Description描述 | Directory目錄 |
commons-logging.jar | logging in jbpm and hibernate | The jBPM code logs to commons logging. The commons logging library can be configured to dispatch the logs to e.g. java 1.4 logging, log4j, ... See the apache commons user guide for more information on how to configure commons logging. if you're used to log4j, the easiest way is to put the log4j lib and a log4j.properties in the classpath. commons logging will automatically detect this and use that configuration. | lib/jboss (from jboss |
dom4j- | process definitions and hibernate persistence | xml parsing | lib/dom4j |
A typical deployment for jBPM will include persistent storage of process definitions and process executions. In that case, jBPM does not have any dependencies outside hibernate and its dependent libraries.
典型的jBPM部署包括持久化業(yè)務程序定義和執(zhí)行的功能。 需要Hibernate
Of course, hibernate's required libraries depend on the environment and what features you use. For details refer to the hibernate documentation. The next table gives an indication for a plain standalone POJO development environment.
下面的表給出了簡單的標準POJO部署環(huán)境需要的第三方庫。
jBPM is distributed with hibernate 3.1 final. But it can also work with 3.0.x. In that case, you might have to update a few hibernate queries in the hibernate.queries.hbm.xml configuration file. For more info about customizing queries, see Section?7.6, “Customizing queries”
Library庫 | Usage | Description | Directory |
hibernate3.jar | hibernate persistence | the best O/R mapper | lib/hibernate (hibernate 3.1 final) |
antlr- | used in query parsing by hibernate persistence | parser library | lib/jboss (from jboss |
cglib-2.1_2jboss.jar | hibernate persistence | reflection library used for hibernate proxies | lib/jboss (from jboss |
commons-collections.jar | hibernate persistence | ? | lib/jboss (from jboss |
ehcache-1.1.jar | hibernate persistence (in the default configuration) | second level cache implementation.二級緩存實現(xiàn)。 When configuring a different cache provider for hibernate, this library is not required. | lib/hibernate |
jaxen-1.1-beta-4.jar | process definitions and hibernate persistence | XPath library (used by dom4j) | lib/hibernate |
jdbc2_0-stdext.jar | hibernate persistence | ? | lib/hibernate |
asm.jar | hibernate persistence | asm byte code library 二進制代碼修改庫 | lib/hibernate |
asm-attrs.jar | hibernate persistence | asm byte code library | lib/hibernate |
The beanshell library is optional. If you don't include it, you won't be able to use the beanshell integration in the jbpm process language and you you'll get a log message saying that jbpm couldn't load the Script class and hence, the script element won't be available.
Beanshell庫是可選的。
Library | Usage | Description | Directory |
bsh- | beanshell script interpreter | Only used in the script's and decision's. When you don't use these process elements, the beanshell lib can be removed, but then you have to comment out the Script.hbm.xml mapping line in the hibernate.cfg.xml | lib/jboss |
posted @ 2006-10-08 18:25 nbt 閱讀(1298) | 評論 (0) | 編輯 收藏
posted @ 2006-10-08 18:22 nbt 閱讀(1872) | 評論 (0) | 編輯 收藏
posted @ 2006-10-08 18:19 nbt 閱讀(1513) | 評論 (0) | 編輯 收藏
Chapter?2.?Getting started起步
This chapter takes you through the first steps of getting JBoss jBPM and provides the initial pointers to get up and running in no time.
初始化JBpm3.12
Listed below are the different jBPM packages that are available today. Each of these packages contains one or more downloadable files. Along with each of these files goes a description of its contents and a pointer to any relevant installation instructions if they are available.
All downloads described below can be found on the sourceforge jbpm downloads page.
Download JBoss jBPM 3 at sourceforge.net. This is the main distribution package containing the core engine and a number of additional modules that you may need to work with jBPM. 包括JBpm核心和其他包。
包含了包括圖形化設計器在內的所有模塊,能夠幫助你快速啟動。
核心,包括核心引擎和身份組建,內有用戶指南文檔。
jBPM過程設計器
Download JBoss jBPM Process Designer at sourceforge.net. The designer is an eclipse plugin and enables you to author 創(chuàng)作your process definitions過程定義 and to easily deploy them. The plug-in is available for download either as a zipped Eclipse feature or as a zipped Eclipse update site. There is no difference in content, the only difference is in the way you have to do the installation.
使用本地站點更新方式部署。
這個是手工部署。
Download JBoss jBPM BPEL extension at sourceforge.net. It contains only one file : jbpm-bpel-<version>.zip. To get started with the BPEL extensions, look in the User's Guide in the 'doc' subfolder of the toplevel folder.
jbpm-bpel:含有JBoss jBPM的BPEL擴展件方面的信息。
BPEL是一個規(guī)范的SOA組件。因為與JBoss jBPM使用的許可證不同,所以被獨立了出來。
2.2.?The JBoss jBPM project directory
Alternatively, you can get JBoss jBPM from cvs with the following information:
To get cvs developer access, you must sign contributors agreement and you need an ssh key. More information on both can be found on the JBoss cvs repository wiki page
posted @ 2006-10-08 18:16 nbt 閱讀(2726) | 評論 (0) | 編輯 收藏
利用JBPM開發(fā)一個工作流應用,相對于使用shark是比較簡單直觀的。我們之前提到過,一個工作流管理系統(tǒng)最基本的組件包括流程定義組件,流程執(zhí)行組件和流程客戶端組件。下面從這三個方面看一下JBPM對開發(fā)工組流應用的支持。
1. ??流程的定義
JBPM
沒有采用WfMC提出的流程定義語言XPDL,而是自己開發(fā)了一種稱為JPDL的語言來定義流程。因此,在開發(fā)一個應用時我們最終需要生成一個符合該XML schema的文件processdefinition.xml來表示定義好的流程。它可以manually獲得,也可以使用可視化的定義工具自動生成。
JBPM
專門提供了一個開發(fā)流程的環(huán)境,稱為process development environment(pde)。可以
在
jbpm
根目錄下執(zhí)行命令
ant create.pde
來生成
pde
工作目錄
。生成的包結構如下所示:
?????????Build.xml
文件用于配置一個流程,即利
用
ant
工具解析
processdefinition.xml
文件,并將運行流程時所需的相關信息存儲到數(shù)據(jù)庫中。
Lib
存放了開發(fā)和配置流程所需的全部庫文件,包括數(shù)據(jù)庫的
jdbc
驅動。
Src
包括開發(fā)和配置流程的全部源文件和所需資源。
Src/config
只有兩個文件,
jbpm.properties
和
log4j.properties
。其中,
jbpm.propertie
文件包含了數(shù)據(jù)庫的配置信息。因此,更換數(shù)據(jù)庫或數(shù)據(jù)庫的
jdbc
驅動都需要修改這里。
Scr/java
存放
java
源文件。
Src/process
存放工作流定義文件
(processdefinition.xml)
和相關的資源文件,如圖片和
form
文件。
Src/test
存放測試代碼。
Target/classes
是
src/java
中源碼的輸出目錄,存放編譯后的
class
文件。
Target/par
存放用命令
ant build.process.archives
生成的
par
包。
Par
包實際上就是把
src/process
中的流程定義及相關文件打包成
zip
形式存儲。
Target/test-classes
存放測試程序的編譯結果。
Target/test-report
存放測試報告。
2.?? 流程的執(zhí)行
JBPM
把負責執(zhí)行流程的類庫打包成jbpm.core.jar,它也是JBPM工作流引擎的核心。在開發(fā)一個工作流應用時,只需將該jar文件放到相應的lib目錄下面。而開發(fā)人員就可以專注于開發(fā)一個流程模型,完成對流程的定義,而無需過多考慮流程執(zhí)行的細節(jié)。
3. ??流程的客戶端
客戶端組件的開發(fā),需要一個應用服務器作為servlet container,我們這里選擇了tomcat。JBPM將開發(fā)一個webapp所需的類打包成jbpm.web.jar,包括自定義的tag和Struts用到的類等等。開發(fā)應用時,將該jar放到WEB-INF\lib下面就可以了。
一個基于工作流的webapp應用的開發(fā)和普通webapp的開發(fā)方式很相似。包結構也保持一貫作風:
??????
所以,我們需要做的主要工作是完成客戶端應用所需的
jsp
頁面的開發(fā),可以選用
Struts
來進行開發(fā)。需要注意的是,我們要對
lib
目錄下的
jbpm.properties
文件進行配置,主要是對數(shù)據(jù)庫
jdbc
驅動的配置。
4. ?? 系統(tǒng)數(shù)據(jù)庫的創(chuàng)建
JBPM
可以支持多種數(shù)據(jù)庫系統(tǒng),包括MSSQL,,Mysql,Oracle,hdbsql等。它提供了很靈活的配置方式,只需要修改jbpm.properties文件,同時將相應的JDBC Driver拷貝到lib目錄就可以了。利用ant的generate.ddl命令,JBPM還支持自動生成用于創(chuàng)建系統(tǒng)表的sql腳本,而且可以生成對應于各種數(shù)據(jù)庫系統(tǒng)的腳本,非常便于數(shù)據(jù)庫系統(tǒng)的更換和系統(tǒng)數(shù)據(jù)庫的創(chuàng)建。
5.?? 開發(fā)過程
環(huán)境配置如下:
JBPM 2.0
Ant
Tomcat
SQL Server 2000
SQL Server 2000 Driver for JDBC
仍以之前演示過的request a payraise為例(見下圖),介紹一下利用JBPM開發(fā)一個工作流應用需要完成的工作。
1)?????? 首先,我們需要完成流程的定義。這不僅包括定義processdefinition.xml,還要對流程執(zhí)行時使用到的其他資源進行定義。比如,在web應用中用到的圖片,form等。還需要配置form.xml,該文件確定了流程中不同狀態(tài)和form的關系,如request a payraise狀態(tài)下,需要如下圖所示的form:
補充Processdefinition.xml
示例:
<?xml version="1.0" encoding="UTF-8"?>
<swimlane name="requester" />
??? <delegation class="org.jbpm.delegation.assignment.ActorAssignmentHandler">cg</delegation>
</swimlane>
??? <delegation class="org.jbpm.delegation.assignment.ActorAssignmentHandler">pf</delegation>
</swimlane>
<!-- START-STATE -->
? <start-state name="request a payraise" swimlane="requester">
??? <transition to="evaluating"/>
? </start-state>
<!-- NODES -->
? <state name="evaluating">
??? <assignment swimlane="boss" />
??? <transition name="approve"???? to="fork"/>
??? <transition name="disapprove"? to="done"/>
? </state>
?
? <fork name="fork">
? ?<transition to="updating erp asynchronously" />
? ?<transition to="treating collegues on cake and pie" />
? </fork>
????? <state name="updating erp asynchronously">
??? <assignment swimlane="erp operator" />
??? <transition to="join" />
? </state>
????? <state name="treating collegues on cake and pie">
??? <assignment swimlane="requester" />
??? <transition to="join" />
? </state>
?
? <join name="join">
? ?<transition to="done" />
? </join>
<!-- END-STATE -->
? <end-state name="done" />
</process-definition>
2)??????
有了processdefinition.xml文件,我們就可以配置流程。即使用ant命令,解析這個文件并且將執(zhí)行時需要的信息存儲在數(shù)據(jù)庫中。如下圖:
3)??????
我們無需關心流程將怎么執(zhí)行,完全交給jbpm.core.jar就好。
4)??????
剩下的另外一項比較繁重的工作就是開發(fā)一個用于該流程的客戶端應用。前面已經提到過,
我們需要做的主要工作是完成客戶端應用所需的
jsp
頁面的開發(fā)。包括登錄頁面,查看自己的
tasklist
頁面,執(zhí)行
task
的頁面等。除此之外,還可以通過日志來完成流程的監(jiān)控和管理界面。這些都由應用的需求來決定。
posted @ 2006-10-08 18:14 nbt 閱讀(1318) | 評論 (1) | 編輯 收藏
目錄
第一章緒論
?JBoss jBPM 是一個靈活的,易擴展的工作流管理系統(tǒng)。JBoss jBPM有一套直觀的流程建模語言,這套語言能用任務(task),異步通信的等待狀態(tài)(wait state ),定時器(timer),自動化的動作(automated action)等來圖形化的表示業(yè)務流程。為了把這些操作集成在一
起,JBoss jBPM擁有強大的,易擴展的控制流程機制。
JBoss jBPM對外依賴程度很小,你完全可以像用java的類庫一樣用它。并且它也可以被部署在高性能的J2EE集群應用服務器上。
JBoss jBPM能配置在任何數(shù)據(jù)庫上,并且能被部署在任何的應用服務器上。
1.1 總覽
?工作流和業(yè)務流程處理功能的核心部分被打包成一個簡單的java類庫。這個類庫包括了這樣一個服務:流程信息的存儲,更新,和從數(shù)據(jù)庫中重新取回。
?
圖1.1:JBoss jBPM組成模塊的概略圖
1.2 JBoss jBPM starter kit
starter kit是一個包含jbpm所有模塊的下載包。這個下載包中包括以下模塊:
·???????????????????????????????? jbpm-server, 一個預選配置好的jboss應用服務器。
·???????????????????????????????? jbpm-designer, 圖形化定制流程的eclipse插件。
·???????????????????????????????? jbpm-db, jBPM的數(shù)據(jù)庫兼容包 (見后邊論述)。
·???????????????????????????????? jbpm, jbpm的核心模塊,其中包括libs文件夾和這個用戶說明。
·???????????????????????????????? jbpm-bpel, JBoss jBPM對BPEL擴展的一些參考資料
預先配置好的JBoss應用服務器具有如下組成部分:
jBPM核心模塊,被打包成一個用于提供服務的存檔文件
帶有jbpm表的集成數(shù)據(jù)庫:默認的hypersonic數(shù)據(jù)庫擁有jbpm表,并且這個表已經擁有一個流程了。
Jbpm的web控制臺,它既可以被Jbpm管理員用也可以被流程的參與者使用。
執(zhí)行定時器的Jbpm的調度程序,這個調度程序在starter kit里邊被配置成一個servlet。這個servlet會產生一個新的線程來監(jiān)視和執(zhí)行定時器。
一個具體流程的例子,它已經被部署在jbpm數(shù)據(jù)庫中了。
1.3 JBoss jBPM 流程圖形定制器
JBoss jBPM還擁有一套圖形化的設計工具。這個設計器是一個圖形化的業(yè)務流程定制工具。
JBoss jBPM流程圖形定制器是eclipse的一個插件。單獨安裝這個定制器非常簡單。
這個圖形設計器最重要的特性是:業(yè)務分析人員也能像技術開發(fā)人員一樣用它來完成任務。這使得業(yè)務流程建模能平滑的轉換到具體技術實現(xiàn)。
這個插件可以利用eclipse的一般升級機制通過一個升級站點得到安裝(zip文件格式)。也可以通過解壓一個特定的包到eclipse的安裝目錄來安裝此插件。
1.4 JBoss jBPM的核心模塊
JBoss jBPM的核心模塊是一個用來管理流程定義和流程實例的執(zhí)行環(huán)境的普通java程序。
JBoss jBPM是一個java類庫。所以它可以被用在任何java環(huán)境中,比如:web應用程序,swing應用程序,EJB,web service……。JBPM類庫還可以被打包并被當成無狀態(tài)會話EJB(stateless session EJB)使用。這樣可使它被部署在集群上并且適應高性能應用。這些無狀態(tài)會話EJB必須符合J2EE1.3規(guī)范這樣才能使它可以被部署在任何應用服務器上。
JBoss jBPM的核心模塊被打包成一個簡單的java庫文件。依你功能的需要,jbpm-3.0.jar這個庫文件對一些第三方的類庫比如hibernate, dom4j有所依賴。這些依賴在第五章(部署)中作了詳細的說明。
至于持久化,JBPM在內部用了hibernate。除了傳統(tǒng)的O/R映射功能,hibernate還解決了不同數(shù)據(jù)SQL dialect差異的問題,這使得JBPM能適應現(xiàn)在所有的數(shù)據(jù)庫。
JBoss jBPM API可以被你工程中任何的java代碼調用,比如,你的web應用程序,EJB,web service 模塊,消息驅動bean或其它任何java模塊。
1.5 JBoss jBPM web應用程序的控制臺
jBPM web應用程序的控制臺提供兩種服務。首先,它被用來當作一個用來和流程執(zhí)行過程中產生的任務進行交互的主要用戶接口,其次,它還是一個用來檢查和操作運行實例的管理和監(jiān)控平臺。
1.6 JBoss jBPM人員組織模塊
JBoss jBPM可以和任何包括人員和其他組織信息的公司結構集成在一起。但是對那些組織結構信息模塊很難獲取的項目,JBoss jBPM提供了這個模塊。這個模塊使用的模型要比傳統(tǒng)的servlet, ejb,portlet模型豐富的多。
更多信息,請參照第九章第九節(jié)人員組織模塊
1.7 JBoss jBPM調度程序
JBoss jBPM調度程序是一個用來監(jiān)測和執(zhí)行在流程執(zhí)行過程中設置的定時器的模塊。
定時器模塊被打包在jbpm的核心包中,但是它必須被部署在以下環(huán)境中:或者你必須訂制一個調度servlet,它來產生一個監(jiān)測線程,或者你必須啟動一個單獨的JVM來執(zhí)行調度程序。
1.8 JBoss jBPM 數(shù)據(jù)庫兼容包
JBoss jBPM 數(shù)據(jù)庫兼容包是一個下載包,它包括所有的資料,drivers和scripts,用這些你可以使jbpm運行在你選擇的數(shù)據(jù)庫上。
1.9 JBoss jBPM BPE的擴展
JBoss jBPM BPE的擴展是一個為了支持BPEL獨立的擴展包。BPEL的本質就是一組用來參照別的web service寫web service的xml腳本語言。
posted @ 2006-10-08 18:11 nbt 閱讀(1661) | 評論 (0) | 編輯 收藏
??? 依照該規(guī)則,在 1996 年初,EU SEMPER(歐洲安全電子市場)項目就決定編寫自己的跟蹤 API。 在無數(shù)次改進、幾次具體化和許多工作之后,該 API 已經演變成 log4j,一種流行的 Java 日志記錄包。? 這個包按 IBM 公共許可證分發(fā),由開放源碼權威機構認證。
??? 日志記錄有其自己的缺點。它會降低應用程序的速度。如果太詳細,它可能會使屏幕滾動變得看不見。? 為了減低這些影響,log4j 被設計成快速且靈活的。由于應用程序很少將日志記錄當作是主要功能,? log4j API 力爭易于了解和使用。
???? log4j,它可以控制以任意間隔輸出哪些日志語句。
二、主要組件
1、根類別(在類別層次結構的頂部,即全局性的日志級別)
?
配置根Logger,其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, ...
level 是日志記錄的類別
appenderName就是指定日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。
類別level 為 OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定義的優(yōu)先級。
og4j常用的優(yōu)先級FATAL>ERROR>WARN>INFO>DEBUG
配置根Logger,其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
如果為log4j.rootLogger=WARN,則意味著只有WARN,ERROR,FATAL被輸出,DEBUG,INFO將被屏蔽掉。
舉例:log4j.rootCategory=INFO,stdout,Runlog,Errorlog
根日志類別為INFO,DEBUG將被屏蔽,其他的將被輸出。 stdout,Runlog,Errorlog分別為3個輸出目的地。
?2、常用輸出格式
?-X號:X信息輸出時左對齊;
?%p:日志信息級別
?%d{}:日志信息產生時間
?%c:日志信息所在地(類名)
?%m:產生的日志具體信息
?%n:輸出日志信息換行
?舉例:
log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
3、布局
使用的輸出布局,其中l(wèi)og4j提供4種布局:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
舉例:
輸出格式為HTML表格
log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout
輸出格式為可以靈活地指定布局模式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
輸出格式為包含日志信息的級別和信息字符串
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
輸出格式為包含日志產生的時間、線程、類別等等信息
log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout
4、目的地
配置日志信息輸出目的地Appender,其語法為
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
appenderName就是指定日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。
log4j支持的輸出目的地:
org.apache.log4j.ConsoleAppender 控制臺
org.apache.log4j.FileAppender 文件
org.apache.log4j.DailyRollingFileAppender 每天產生一個日志文件
org.apache.log4j.RollingFileAppender (文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender (將日志信息以流格式發(fā)送到任意指定的地方)
org.apache.log4j.net.SMTPAppender 郵件
org.apache.log4j.jdbc.JDBCAppender 數(shù)據(jù)庫
其他如:GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等
舉例:
輸出到控制臺
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender(指定輸出到控制臺)
log4j.appender.Threshold=DEBUG(指定輸出類別)
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout(指定輸出布局)
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定輸出格式)
輸出到文件
?? log4j.appender.FILE=org.apache.log4j.FileAppender(指定輸出到文件)
?? log4j.appender.FILE.File=file.log(指定輸出的路徑及文件名)
?? log4j.appender.FILE.Append=false
?? log4j.appender.FILE.layout=org.apache.log4j.PatternLayout(指定輸出的布局)
?? log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定輸出的格式)
輸出到文件(輪換"日志文件",當日志文件達到指定大小時,該文件就被關閉并備份,然后創(chuàng)建一個新的日志文件)
? log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender(指定輸出到文件)
? log4j.appender.ROLLING_FILE.Threshold=ERROR(指定輸出類別)
? log4j.appender.ROLLING_FILE.File=rolling.log(指定輸出的路徑及文件名)
? log4j.appender.ROLLING_FILE.Append=true
? log4j.appender.ROLLING_FILE.MaxFileSize=10KB(指定輸出到文件的大小)
? log4j.appender.ROLLING_FILE.MaxBackupIndex=1
? log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout(指定采用輸出布局)
? log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定采用輸出格式)
輸出到Socket
?log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender(指定輸出到Socket)
?log4j.appender.SOCKET.RemoteHost=localhost(遠程主機)
?log4j.appender.SOCKET.Port=5001(遠程主機端口)
?log4j.appender.SOCKET.LocationInfo=true
?log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout(布局)
?log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n(輸出格式)
輸出到郵件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender(指定輸出到郵件)
?log4j.appender.MAIL.Threshold=FATAL
?log4j.appender.MAIL.BufferSize=10
?log4j.appender.MAIL.From=chenyl@hollycrm.com(發(fā)件人)
?log4j.appender.MAIL.SMTPHost=mail.hollycrm.com(SMTP服務器)
?log4j.appender.MAIL.Subject=Log4J Message
?log4j.appender.MAIL.To=chenyl@hollycrm.com(收件人)
?log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout(布局)
?log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(格式)
?
輸出到數(shù)據(jù)庫
?log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender(指定輸出到數(shù)據(jù)庫)
?log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test(指定數(shù)據(jù)庫URL)
?log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver(指定數(shù)據(jù)庫driver)
?log4j.appender.DATABASE.user=root(指定數(shù)據(jù)庫用戶)
?log4j.appender.DATABASE.password=root(指定數(shù)據(jù)庫用戶密碼)
?log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')(組織SQL語句)
?log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout(布局)
?log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(格式)
5、日志類別補充
有時我們需要對某個特定的部分指定有別于根類別的日志類別,可以指定某個包的優(yōu)先級
如:
? log4j.category.com.neusoft.mbip.dm.util=ERROR ,其中com.neusoft.mbip.dm.util為我們需要特別指定日志類別的部分。
?
? 或者可以指定輸出文件的優(yōu)先級
? log4j.appender.Errorlog.Threshold=ERROR
?
?
?三、 常用log4j配置?
常用log4j配置,一般可以采用兩種方式,.properties和.xml,下面舉兩個簡單的例子:
1、log4j.properties
### 設置org.zblog域對應的級別INFO,DEBUG,WARN,ERROR和輸出地A1,A2 ##
log4j.category.org.zblog=ERROR,A1
log4j.category.org.zblog=INFO,A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
### 設置輸出地A1,為ConsoleAppender(控制臺) ##
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
### 設置A1的輸出布局格式PatterLayout,(可以靈活地指定布局模式)##
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
### 配置日志輸出的格式##
log4j.appender.A2=org.apache.log4j.RollingFileAppender
### 設置輸出地A2到文件(文件大小到達指定尺寸的時候產生一個新的文件)##
log4j.appender.A2.File=E:/study/log4j/zhuwei.html
### 文件位置##
log4j.appender.A2.MaxFileSize=500KB
### 文件大小##
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
##指定采用html方式輸出
2、log4j.xml
<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="org.zblog.all" class="org.apache.log4j.RollingFileAppender">
<!-- 設置通道ID:org.zblog.all和輸出方式:org.apache.log4j.RollingFileAppender -->
??? <param name="File" value="E:/study/log4j/all.output.log" /><!-- 設置File參數(shù):日志輸出文件名 -->
??? <param name="Append" value="false" /><!-- 設置是否在重新啟動服務時,在原有日志的基礎添加新日志 -->
??? <layout class="org.apache.log4j.PatternLayout">
??????? <param name="ConversionPattern" value="%p (%c:%L)- %m%n" /><!-- 設置輸出文件項目和格式 -->
??? </layout>
</appender>
<appender name="org.zblog.zcw" class="org.apache.log4j.RollingFileAppender">
??? <param name="File" value="E:/study/log4j/zhuwei.output.log" />
??? <param name="Append" value="true" />
??? <param name="MaxFileSize" value="10240" /> <!-- 設置文件大小 -->
??? <layout class="org.apache.log4j.PatternLayout">
??????? <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
??? </layout>
</appender>
<logger name="zcw.log"> <!-- 設置域名限制,即zcw.log域及以下的日志均輸出到下面對應的通道中 -->
??? <level value="debug" /><!-- 設置級別 -->
??? <appender-ref ref="org.zblog.zcw" /><!-- 與前面的通道id相對應 -->
</logger>
<root> <!-- 設置接收所有輸出的通道 -->
??? <appender-ref ref="org.zblog.all" /><!-- 與前面的通道id相對應 -->
</root>
</log4j:configuration>
3、配置文件加載方法:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
public class Log4jApp {
??? public static void main(String[] args) {
??????? DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加載.xml文件
??????? //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加載.properties文件
??????? Logger log=Logger.getLogger("org.zblog.test");
??????? log.info("測試");
??? }
}
4、項目使用log4j
在web應用中,可以將配置文件的加載放在一個單獨的servlet中,并在web.xml中配置該servlet在應用啟動時候加載。
對于在多人項目中,可以給每一個人設置一個輸出通道,這樣在每個人在構建Logger時,用自己的域名稱,讓調試信
息輸出到自己的log文件中。
四、log4j配置舉例(properties)
#log4j.rootLogger = [ level ] , appenderName, appenderName,
#類別level 為 OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定義的優(yōu)先級
#Log4j常用的優(yōu)先級FATAL>ERROR>WARN>INFO>DEBUG
#stdout為控制臺 ,Errorlog為錯誤記錄日志 ,
log4j.rootCategory=INFO,stdout,Runlog,Errorlog
#輸出的appender的格式為
#log4j.appender.appenderName = fully.qualified.name.of.appender.class
#log4j.appender.appenderName.option1 = value1
#log4j.appender.appenderName.option = valueN
#Log4j中appender支持的輸出
#org.apache.log4j.ConsoleAppender 控制臺
#org.apache.log4j.FileAppender 文件
#org.apache.log4j.DailyRollingFileAppender 每天產生一個日志文件
#org.apache.log4j.RollingFileAppender (文件大小到達指定尺寸的時候產生一個新的文件),
#org.apache.log4j.WriterAppender (將日志信息以流格式發(fā)送到任意指定的地方)
#org.apache.log4j.net.SMTPAppender 郵件
#org.apache.log4j.jdbc.JDBCAppender 數(shù)據(jù)庫
#定義輸出的形式
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Runlog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Errorlog=org.apache.log4j.DailyRollingFileAppender
#可以指定輸出文件的優(yōu)先級
log4j.appender.Errorlog.Threshold=ERROR
#指定輸出的文件
log4j.appender.Runlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\runlog\\runlog.log
log4j.appender.Errorlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\errorlog\\errorlog.log
#Log4j的layout布局
#org.apache.log4j.HTMLLayout 以HTML表格形式布局
#org.apache.log4j.PatternLayout 可以靈活地指定布局模式
#org.apache.log4j.SimpleLayout? 包含日志信息的級別和信息字符串
#org.apache.log4j.TTCCLayout??? 包含日志產生的時間、線程、類別等等信息
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Runlog.layout=org.apache.log4j.PatternLayout
log4j.appender.Errorlog.layout=org.apache.log4j.PatternLayout
#輸出格式,log4j javadoc org.apache.log4j.PatternLayout
#-X號:X信息輸出時左對齊;
#%p:日志信息級別
# %d{}:日志信息產生時間
# %c:日志信息所在地(類名)
# %m:產生的日志具體信息
# %n:%n:輸出日志信息換行
log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
#指定某個包的優(yōu)先級
log4j.category.com.neusoft.mbip.dm.util=ERROR
#示例
###################
# Console Appender
###################
#log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#log4j.appender.Threshold=DEBUG
#log4j.appender.CONSOLE.Target=System.out
#log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#####################
# File Appender
#####################
#log4j.appender.FILE=org.apache.log4j.FileAppender
#log4j.appender.FILE.File=file.log
#log4j.appender.FILE.Append=false
#log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis
########################
# Rolling File????? RollingFileAppender??????????????????
########################
#log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
#log4j.appender.ROLLING_FILE.Threshold=ERROR
# 文件位置
#log4j.appender.ROLLING_FILE.File=rolling.log
#log4j.appender.ROLLING_FILE.Append=true
#文件大小
#log4j.appender.ROLLING_FILE.MaxFileSize=10KB
#指定采用輸出布局和輸出格式
#log4j.appender.ROLLING_FILE.MaxBackupIndex=1
#log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
####################
# Socket Appender
####################
#log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
#log4j.appender.SOCKET.RemoteHost=localhost
#log4j.appender.SOCKET.Port=5001
#log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
#log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
#log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
########################
# SMTP Appender
#######################
#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
#log4j.appender.MAIL.Threshold=FATAL
#log4j.appender.MAIL.BufferSize=10
#log4j.appender.MAIL.From=chenyl@hollycrm.com
#log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
#log4j.appender.MAIL.Subject=Log4J Message
#log4j.appender.MAIL.To=chenyl@hollycrm.com
#log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
#log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
########################
# JDBC Appender
#######################
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
#log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
#log4j.appender.DATABASE.user=root
#log4j.appender.DATABASE.password=
#log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
########################
# Log Factor 5 Appender
########################
#log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
#log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
###################
#自定義Appender
###################
#log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
#log4j.appender.im.host = mail.cybercorlin.net
#log4j.appender.im.username = username
#log4j.appender.im.password = password
#log4j.appender.im.recipient = corlin@cybercorlin.net
#log4j.appender.im.layout=org.apache.log4j.PatternLayout
#log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
posted @ 2006-10-07 13:53 nbt 閱讀(722) | 評論 (0) | 編輯 收藏
posted @ 2006-10-07 13:41 nbt 閱讀(890) | 評論 (0) | 編輯 收藏