??xml version="1.0" encoding="utf-8" standalone="yes"?>
Log4J的配|文?Configuration File)是用来讄记录器的U别、存攑֙和布局的,它可接key=value格式的设|或xml格式的设|信息。通过配置Q可以创建出Log4J的运行环境?br /> 作?matrix 来自:Matrix 2005 pq去了?br />
1. 配置文g
Log4J配置文g的基本格式如下:(x)
#配置根Logger
log4j.rootLogger
=
[
level
]
,
appenderName1
,
appenderName2
,
?br />
#配置日志信息输出目的地Appender
log4j.appender.appenderName
=
fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1
=
value1
…?br />
log4j.appender.appenderName.optionN
=
valueN
#配置日志信息的格式(布局Q?br />
log4j.appender.appenderName.layout
=
fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1
=
value1
…?br />
log4j.appender.appenderName.layout.optionN
=
valueN
其中 [level] 是日志输出别,共有5U:(x)
FATAL
0
ERROR
3
WARN
4
INFO
6
DEBUG
7
Appender
为日志输出目的地QLog4j提供的appender有以下几U:(x)
org.apache.log4j.ConsoleAppenderQ控制台Q,
org.apache.log4j.FileAppenderQ文ӞQ?br />
org.apache.log4j.DailyRollingFileAppenderQ每天生一个日志文ӞQ?br />
org.apache.log4j.RollingFileAppenderQ文件大到达指定尺寸的时候生一个新的文ӞQ?br />
org.apache.log4j.WriterAppenderQ将日志信息以流格式发送到L指定的地方)
LayoutQ日志输出格式,Log4j提供的layout有以下几U:(x)
org.apache.log4j.HTMLLayoutQ以HTML表格形式布局Q,
org.apache.log4j.PatternLayoutQ可以灵zd指定布局模式Q,
org.apache.log4j.SimpleLayoutQ包含日志信息的U别和信息字W串Q,
org.apache.log4j.TTCCLayoutQ包含日志生的旉、线E、类别等{信息)
打印参数: Log4J采用cMC语言中的printf函数的打印格式格式化日志信息Q如?
%m 输出代码中指定的消息
%p 输出优先U,即DEBUGQINFOQW(xu)ARNQERRORQFATAL
%r 输出自应用启动到输出该log信息耗费的毫U数
%c 输出所属的cȝQ通常是所在类的全名?br />
%t 输出产生该日志事件的U程名?br />
%n 输出一个回车换行符QW(xu)indowsq_为“\r\n”,Unixq_为“\n”?br />
%d 输出日志旉点的日期或时_(d)默认格式为ISO8601Q也可以在其后指定格式,比如Q?d{yyy MMM dd HH:mm:ss
,
SSS}Q输出类|(x)2002q?0?8日?/span>
22
Q?/span>
10
Q?/span>
28
Q?/span>
921
%l 输出日志事g的发生位|,包括cȝ名、发生的U程Q以及在代码中的行数。D例:(x)Testlog4.main(TestLog4.java:
10
)
2. 在代码中初始化Logger:
1Q在E序中调?strong>BasicConfigurator.configure()Ҏ(gu)Q给根记录器增加一个ConsoleAppenderQ输出格式通过PatternLayout设ؓ(f)"%-4r [%t] %-5p %c %x - %m%n"Q还有根记录器的默认U别?strong>Level.DEBUG.
2Q配|放在文仉Q通过命o行参C递文件名字,通过PropertyConfigurator.configure(args[x])解析q|;
3Q配|放在文仉Q通过环境变量传递文件名{信息,利用log4j默认的初始化q程解析q|;
4Q配|放在文仉Q通过应用服务器配|传递文件名{信息,利用一个特D的servlet来完成配|?br />
3. Z同的 Appender 讄日志输出U别Q?/strong>
当调试系l时Q我们往往注意的只是异常别的日志输出Q但是通常所有别的输出都是攑֜一个文仉的,如果日志输出的别是BUGQ?那就慢慢L吧?br />q时我们也许?x)想要是能把异常信息单独输出C个文仉该多好啊。当然可以,Log4j已经提供了这L(fng)功能Q我们只需要在配置中修?strong>Appender?font color="#990000">Threshold
p实现,比如下面的例子:(x)
[配置文g]
### set log levels ###
log4j.rootLogger
=
debug
,
stdout
,
D
,
E
### 输出到控制台 ###
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
=
%d{ABSOLUTE} %5p %c{
1
}:%L - %m%n
### 输出到日志文件?##
log4j.appender.D
=
org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File
=
logs/log.log
log4j.appender.D.Append
=
true
log4j.appender.D.Threshold
=
DEBUG ## 输出DEBUGU别以上的日?/strong>
log4j.appender.D.layout
=
org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern
=
%-d{yyyy-MM-dd HH:mm:ss}
[
%t:%r
]
-
[
%p
]
%m%n
### 保存异常信息到单独文件?##
log4j.appender.D
=
org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File
=
logs/error.log ## 异常日志文g?br />
log4j.appender.D.Append
=
true
log4j.appender.D.Threshold
=
ERROR ## 只输出ERRORU别以上的日?!!
log4j.appender.D.layout
=
org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern
=
%-d{yyyy-MM-dd HH:mm:ss}
[
%t:%r
]
-
[
%p
]
%m%n
[代码中用]
public
class
TestLog4j
{
public
static
void
main(String[] args)
{
PropertyConfigurator.configure(
"
D:/Code/conf/log4j.properties
"
);
Logger logger
=
Logger.getLogger(TestLog4j.
class
);
logger.debug(
"
debug
"
);
logger.error(
"
error
"
);
}
}
q行一下,看看异常信息是不是保存在了一个单独的文gerror.log中?/font>
q去的一q_(d)Mustang 没能出来QEJB3刚刚才提交最l草案,Ajax兴v但是五花八门不知道应该用谁,Aspectj 5出来了,但是~Z惊喜?br />
或许我们?x)说Q过ȝ2005QJava界缺乏成l,但是却毫无疑问,Java遥遥领先于其他语a。从11月的语言排行榜Java遥遥领先Q到今年的Java图书销售统计上QJava图书销售L是C#?倍,PHP?.5倍,Perl?倍,Ruby/Python??
q以让我们?006充满惌?br />
不过Q还是让我们先回下2005?...
1?005 ?Java Ҏ(gu)
q去?005QJava无疑是最受欢q的语言。但是Java也面临其他语a的挑战,其中Bruce A. TateQ在一文中Q提Z有可能挑战Java开发的4U技?/u>Q包括动态语aQContinuationQConventionsQ元~程{?br />
Ruby可以说是最有可能挑战Java的语aQ刚刚发布的Rails1.0引v了Fans的疯?/u>。Rails?x)不会(x)是下一代伟大的框架Q有可能。要做一个选择的话QRails应该?x)是在用Ruby或是其他动态编E语a的元~程框架潮流中的W一个。但是Java已经开始引qRuby的特性了Q比如TrailsQGroovy?br />
2?005 ?Java 新玩?/span>
·DroolsQDrools 是一个基于Charles Forgy's的Rete法的,专ؓ(f)Java语言所设计的规则引擎。Rete法应用于面向对象的接口Z商业对象的商业规则的表达更ؓ(f)自然。Drools是用Java写的Q但能同时运行在Java?Net上。Drools提供了声明式E序设计(Declarative Programming),q且使用域描q语a(Domain Specific Languages (DSL))。Web和持久层框架我们已经有很多选择了,但是处在中间层的商务逻辑有好的框架吗Q你希望每次l理l你一个新的命令就不得不重~译那些复杂的if ... then 意大利面条代码吗Q?a target="_new">Drools- 商务逻辑框架的选择q篇文章中,保罗布朗推荐的Drools的规则引擎或许是完成q类d的最好选择;Z的基于SPRING的应用增加简单规则引?/u>描述如何为流行的Spring框架开发简单的规则引擎Q?a target="_new">在你的企业java应用中用Drools一文则向你展示如何在企业Java应用中用Drools.
·PortletQ“Portlets是一UWeblgQ就像servletsQ是专ؓ(f)合成页面里的内容聚集在一赯设计的。通常h一个portal面?x)引发多个portlets被调用。每个portlet都会(x)生成标记D,q与别的portlets生成的标记段l合在一起嵌入到portal面的标记内。”(摘自Portlet规范QJSR 168Q?005QPortlet框架层出不穷?a target="_new">什么是Portlet ?让你的Portlet之旅从这里开始?br />
·AjaxQ?005q_(d)q有什么比Ajax更火呢?Ajax兴v, 传统Web框架走向何方? 引vq泛讨论Q一度让人感受到了Ajax的凶猛之ѝ虽然Ajax和Java没有直接关系Q但是毫无疑问Ajax也是Java界关心的东西?a target="_new">Ajax: Web应用的新Ҏ(gu)介绍了这个将令h们兴奋的技术?br />
Ajax的应用也层出不穷Q比如Google成功地使用了Ajax?a target="_new">用AJAX来控制书{֒回退按钮告诉我们如何用AJAX来控制书{֒回退按钮?br />
一pd框架也随之而出来,比如DWR, AjaxanywhereQAjaxtags。其中:(x)DWR让AJAX如此?/u>展示DWR如何使得AJAX的应用既单又快捷?a target="_new">初探AjaxTags展示如何使用Ajaxtagsq行Ajax开发?br />
·SOAQ当Ӟ2005不仅是框Ӟ2005q有SOAQBEA, IBM, ORACLE..... 一家又一家企业公布了他们的SOAҎ(gu), 宣称他们的品支持SOA功能. SCA和SDO也将l成新的SOA~程模型?a target="_new">SCA和SDO组成新的SOA~程模型说明了如何在实现了J2EE1.4规范的应用服务器之间Q比如Oracle Application Server 10gQ用J2EE1.4建立可互操作的,M灉|的服务;SOA架构中的事g驱动服务讨论使用Mule实现一个高效的事g驱动和面向服务的q_Q?面对SOA, 你准备好了吗?
·RPCQWeb应用的RPC方式调用Q随着Web2.0的兴PRPC方式逐渐成ؓ(f)Web调用的一U方式?br />
·分布式组件开?/b>Q在一个分布式应用当中Q提供一个统一对外接口Q通过可重用的外部API来满需求?a target="_new">Javalg开?一个概忉|?/u>提出了一个构建概忉|架地解决Ҏ(gu).
3。Hibernatel箋前进
Hibernate仍然是最受欢q的企业U开发持久层Ҏ(gu)QEjb 3.0 的出现是否会(x)让Hibernate的发展有什么变化吗Q?q无疑是让大安感兴的事情。过ȝ一q_(d)关于Hibernate也有很多有趣的东西:(x)Hibernate 3 的Formulas展现formula的各U特征是如何辅助模式转换的;?a target="_new">Magicgod的Hibernate的思?/u>则提Z提到了Hibernate的一些弱点;?br />
4。Spring大热
没有什么文章,?a target="_new">POJO应用框架QSpring与EJB3.0的比?/u> 夺得更多的h的眼球了。Spring框架虽然很流行但q不是一个标准的开源框ӞEJB3.0是由Java Community Process (JCP)制订的标准框Ӟ为所有主要的J2EE厂商支持。两者都大量C用了依赖注入?a target="_new">在SPRING中实C务暂?/u>讨论了Spring的事务管理特性?a target="_new">在Spring中配|Hibernate事务探讨了怎么用Spring来装配组件及其事务管理?a target="_new">׃Spring?个理?/u>里作者描qC他ؓ(f)何喜Ƣ上了SpringQ?a target="_new">使用EJB 3.0化企业Java开?/u>阐述了如何用EJB 3.0 注释来开发藕合松散的POJO应用及容器服务器如何理POJO?br />
2006Q看来还有一场大战?
5。在Eclipse的媄子下
调查表示Q超q?0%的开发者用Eclipseq行开发。Eclipse毫无疑问已经占据了IDE的主市场。Eclipse的兴P也间接引起了Borland的离厅R但是也引v了IDE工具的竞争加剧,对开发者是件不折不扣的好事?a target="_new">成ؓ(f)Eclipse热键高手提到了那些会(x)让你的手指动的飞快的热键l合。这只是Eclipse快捷方便的一个羃影。刚发布的WTP, 好用的MyeclipseQ都推动着Eclipse的不断发展,或许q就是社区的力量?br />
6。ANTQ?/span>
ANT仍然很受Ƣ迎。ANT不仅仅是一个Build工具Q它q可以作更多的事情?a target="_new">使用Antq行W(xu)eb开?/u>介绍WEB 应用E序的部|Ԍ包括get, serverdeploy, ?scp{?a target="_new">佉K目开发自动化描绘了用Ant自动化你的项目能带来的好处?br />
7?006的Java期待Q?/span>
·EJB3: EJB3最l草案提交,预示着EJB3的即到来了Q相信明q一定程度上是EJB3q_(d)化开发是否真的实臛_归?
·Mustang: 不知道Mustang 的出玎ͼ?x)给Java性能带来多大的改变,寄存器优化不知道是不是能带来革命的效果?
·JBI-ESBQJBIq个提了很多q的名词Q终于在今年大热Q相信明qJBI仍然?x)l发展?br />·JSFQJSF有太多对手了QStrutsQSpring mvcQ特别是Webwork加入Struts之后Q不q相信JSF也是值得我们期待
·AJAXQ虽然有很多AJAX框架出来Q但是killerU别的框架是谁呢Q?006?x)揭晓吗Q?br />·GroovyQ社区的力量使得Groovy来成熟和完善了?br />·RailsQRuby虽然和Java无关Q但是我惛_Ch都在兛_Rails。毕竟Railsq是我们所期待的东ѝ?br />·Spring2.0QSpring 2.0明年初就?x)发布了Q相信会(x)l箋带动SpringC的狂热?br />
怿在所有技术语a中,Java?006q的热点所在,让我们共同期?006?br />
2006, A Happy New Java-year and Matrix-year!
ant 是jakarta的一个编译工P如果你了解linux/Unix下的makefile你就很容?
理解ant的用途了。ant最适合你用UltraEdit(EditPlus)写javaE序Q然后你使用antȝ译,同时javadoc ,生成一个jar,warQ实现文件的copy都可以在build.xml通过不同的tagerd玎ͼq是很方便的一个东东强烈推荐是使用?br />
二:(x)下蝲
你可以从下面的地址下蝲到ant,目前版本Q?.41
http://jakarta.apache.org/builds/jakarta-ant/release/v1.4.1/bin/
三:(x)安装
a:)Windows
1:解压你下载的文gQ会(x)有一个jakarta-ant(版本L(fng))目录产生Q把他改名ؓ(f)ant
2:copy ant 目录C需要的位置?
3:在环境变量中dQANT_HOME=ant的安装目录,path中加$ANT_HOME$\\u0008in;注意你同时必dl安装了jdk,q添加了JAVA_HOME的环境变量,同时早path中加?JAVA_HOME$\\u0008in;
b:)Linux/Unix
1:解压你下载的文gQ会(x)有一个jakarta-ant(版本L(fng))目录产生Q把他改名ؓ(f)ant
2:copy ant 目录C需要的位置?
3:在环境变量中dQANT_HOME=ant的安装目录,path中加$ANT_HOME$\\u0008in;注意你同时必dl安装了jdk,q添加了JAVA_HOME的环境变量,同时早path中加?JAVA_HOME$\\u0008in;实现修改环境变量你需要修?bash_profile文g?
如下
ANT_HOME=/usr/local/ant
JAVA_HOME=/usr/local/jdk
PATH=$PATH:$HOME/bin:/usr/local/ant/bin:/usr/local/jdk/bin
export PATH ANT_HOME JAVA_HOME
?~写build.xml
build.xml相当Linux下的makefile,具体的实现都在build.xml中实现?
我给l例子说明一下?
build.xml
================================================================
<project name="bingo" default="build" basedir="../.." >
<!--basedir讑֮工作目录-->
<property name="version" value="1.0"/>
<!-- The base directory relative to which most targets are built -->
<property name="base" value="."/>
<!-- The directory where source files are stored. -->
<property name="java.source.dir" value="bingo/src"/>
<!--代码保存路径-->
<!-- Destination for compiled files -->
<property name="javac.dest" value="bingo/classes"/>
<!--class保存路径-->
<!-- Destination for generated jar files -->
<property name="jar.dest" value="bingo/jar"/>
<!--jar文g保存路径-->
<!-- Destination for documentation files generated or not -->
<property name="docs" value="bingo/docs"/>
<!--javadoc文g保存路径-->
<!-- Destination for javadoc generated files -->
<property name="javadoc.dest" value="bingo/docs"/>
<!-- The stem where most log4j source code is located. -->
<property name="stem" value="com/bingo"/>
<property name="base-files" value="include"/>
<!-- Original manifest.mf file before filtering. -->
<property name="manifest.src" value="bingo/build/manifest.mf"/>
<!-- Some targets needs a more precise stem. -->
<property name="BSTEM" value="${java.source.dir}/${stem}"/>
<property name="tomcat.dir" value="c:/Apache/Tomcat"/>
<property name="webapp.dir" value="${tomcat.dir}/webapps/ROOT/WEB-INF/classes"/>
<!--List all Package used in this project -->
<property name="PackageList" value="
com.bingo,
com.bingo.database,
com.bingo.dbocw,
com.bingo.util,
com.bingo.taglibs.jndi,
com.bingo.finance.database,
com.bingo.finance.entity,
com.bingo.finance.manager" />
<!--你的project中所有的?->
<!-- List all jar or file used in this project -->
<property name="classpath" value="${classpath};
${base-files}/tomcat/servlet.jar;
${base-files}/tomcat/webserver.jar;
${base-files}/log4j/log4j.jar;
${base-files}/log4j/log4j-core.jar" />
<!--你需要用到的?->
<target name="init">
<tstamp />
</target>
<target name="build" depends="init">
<echo>
Building...
</echo>
<mkdir dir="${javac.dest}" />
<javac srcdir="${java.source.dir}"
destdir="${javac.dest}"
classpath="${classpath}"
debug="on"/>
</target>
<!-- ================================================================= -->
<!-- Copy class files to tomcat dir. -->
<!-- ================================================================= -->
<target name="copy" depends="build">
<copy todir="${webapp.dir}/com/bingo">
<fileset dir="${javac.dest}/com/bingo">
<include name="*.class"/>
</fileset>
</copy>
<copy todir="${webapp.dir}/com/bingo/util">
<fileset dir="${javac.dest}/com/bingo/util">
<include name="*.class"/>
</fileset>
</copy>
<copy todir="${webapp.dir}/com/bingo/database">
<fileset dir="${javac.dest}/com/bingo/database">
<include name="*.class"/>
</fileset>
</copy>
<copy todir="${webapp.dir}/com/bingo/dbocw">
<fileset dir="${javac.dest}/com/bingo/dbocw">
<include name="*.class"/>
</fileset>
</copy>
<copy todir="${webapp.dir}/com/bingo/finance/database">
<fileset dir="${javac.dest}/com/bingo/finance/database">
<include name="*.class"/>
</fileset>
</copy>
<copy todir="${webapp.dir}/com/bingo/finance/entity">
<fileset dir="${javac.dest}/com/bingo/finance/entity">
<include name="*.class"/>
</fileset>
</copy>
<copy todir="${webapp.dir}/com/bingo/finance/manager">
<fileset dir="${javac.dest}/com/bingo/finance/manager">
<include name="*.class"/>
</fileset>
</copy>
</target>
<!-- ================================================================= -->
<!-- Remove all generated (compiled) class files. -->
<!-- ================================================================= -->
<target name="clean" depends="init">
<delete dir="${javac.dest}/" />
</target>
<!-- ================================================================= -->
<!-- Remove all backup files. -->
<!-- ================================================================= -->
<target name="delete" depends="init">
<delete >
<fileset dir="${java.source.dir}/com/bingo">
<include name="*.bak"/>
</fileset>
</delete>
<delete >
<fileset dir="${java.source.dir}/com/bingo/util">
<include name="*.bak"/>
</fileset>
</delete>
<delete >
<fileset dir="${java.source.dir}/com/bingo/database">
<include name="*.bak"/>
</fileset>
</delete>
<delete >
<fileset dir="${java.source.dir}/com/bingo/finance/database">
<include name="*.bak"/>
</fileset>
</delete>
<delete >
<fileset dir="${java.source.dir}/com/bingo/finance/entity">
<include name="*.bak"/>
</fileset>
</delete>
<delete >
<fileset dir="${java.source.dir}/com/bingo/finance/manager">
<include name="*.bak"/>
</fileset>
</delete>
</target>
<!-- ================================================================= -->
<!-- Remove the temporary manifest file, actual work is done in the -->
<!-- dependencies. -->
<!-- ================================================================= -->
<target name="prejar" depends="build">
<mkdir dir="${jar.dest}"/>
<filter token="version" value="${version}" />
<copy file="${manifest.src}" tofile="${jar.dest}/manifest.mf"
filtering="true"/>
</target>
<!-- ================================================================= -->
<!-- This target Create bingo.jar -->
<!-- ================================================================= -->
<target name="jar" depends="prejar">
<delete file="${jar.dest}/bingo.jar"/>
<jar jarfile="${jar.dest}/bingo.jar" basedir="${javac.dest}"
manifest="${jar.dest}/manifest.mf"
/>
</target>
<!-- ================================================================= -->
<!-- This target builds the javadoc files. -->
<!-- ================================================================= -->
<target name="javadoc" depends="build,init">
<mkdir dir="${javadoc.dest}" />
<javadoc sourcepath="${java.source.dir}"
destdir="${javadoc.dest}"
classpath="${classpath}"
packagenames="${PackageList}"
version="true"
protected="true"
author="true"
use="true"
windowtitle="Bingo Free Java Code Version ${version}"
header="Bingo Free Java Code${version}"
/>
</target>
</project>
一Q介l?
log4j是jakarta的一个项目主要是Z调试使用的,Z不让是在E序中写很多System.out.println();
我个得是一个不错的工具Q程序调试好以后你可以关掉log4j.
二:(x)下蝲
你可以从下面的地址下蝲到ant,目前版本Q?.13
http://jakarta.apache.org/builds/jakarta-log4j/release/v1.1.3/
三:(x)安装
log4j不需要安装,你只需要把log4j.jar,log4j-core.jar攑֜classpath中你可以用?
四:(x)使用log4j
1:)copy log4j.jar,log4j-core.jar到classpath中,在tomcat4.03中你可以把它攑֜
tomcat_home\common\lib目录下?
2:讄属性文?
log4j需要用C个log4j.properties文g内容如下Q?
log4j.properties
=====================================
log4j.rootCategory=, A1
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
最单的配置Q如果希望很复杂Q自q文档?
3Q写启动文g
log4j的初始化有几U方式,我下面只提供一U方式?
InitServlet.java (一个servlet)
==================================
import java.io.InputStream;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Locale;
import java.util.MissingResourceException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.*;
import java.io.*;
public class InitServlet extends HttpServlet {
protected String config = "/log4j.properties";
public void init() throws ServletException {
ServletContext sct = getServletContext();
System.out.println("[Log4j]: The Root Path: " + sct.getRealPath("/"));
System.out.println("[Log4j]: InitServlet init start...");
org.apache.log4j.PropertyConfigurator.configure(sct.getRealPath("/") + getServletConfig().getInitParameter("log4j"));
System.out.println("[Log4j]: InitServlet init over.");
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
;
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
;
}
}
4:讄web.xml
上面写的servlet的在AppServer启动是就要运行,所以你需要配|一下web.xml
加上如下内容Q?
<servlet>
<servlet-name>init</servlet-name>
<servlet-class>com.InitServlet</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>/log4j.properties</param-value>
<!--相对aplication的\径在ROOT/log4j.properties参照上面-->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
5:在程序中使用log4j;
private static org.apache.log4j.Category log =
org.apache.log4j.Category.getInstance(classname);
//classname java文g名\r
log.debug(".........");
log.error(".........");
.....
具体的运用你可以看log4j的文档?