??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产综合视频在线观看,国产女主播在线直播,男操女在线观看http://www.aygfsteel.com/shooper/category/10944.htmlBeginning Javazh-cnWed, 28 Feb 2007 03:57:04 GMTWed, 28 Feb 2007 03:57:04 GMT60[Log4j] 配置Log4j http://www.aygfsteel.com/shooper/articles/56599.htmlShooper.JavaShooper.JavaTue, 04 Jul 2006 14:10:00 GMThttp://www.aygfsteel.com/shooper/articles/56599.htmlhttp://www.aygfsteel.com/shooper/comments/56599.htmlhttp://www.aygfsteel.com/shooper/articles/56599.html#Feedback0http://www.aygfsteel.com/shooper/comments/commentRss/56599.htmlhttp://www.aygfsteel.com/shooper/services/trackbacks/56599.html [Log4j] 配置Log4j

Log4J的配|文?Configuration File)是用来讄记录器的U别、存攑֙和布局的,它可接key=value格式的设|或xml格式的设|信息。通过配置Q可以创建出Log4J的运行环境?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>


Shooper.Java 2006-07-04 22:10 发表评论
]]>
2005 Java lD&2006 Java 展望http://www.aygfsteel.com/shooper/articles/45320.htmlShooper.JavaShooper.JavaTue, 09 May 2006 16:29:00 GMThttp://www.aygfsteel.com/shooper/articles/45320.htmlhttp://www.aygfsteel.com/shooper/comments/45320.htmlhttp://www.aygfsteel.com/shooper/articles/45320.html#Feedback0http://www.aygfsteel.com/shooper/comments/commentRss/45320.htmlhttp://www.aygfsteel.com/shooper/services/trackbacks/45320.html

作?matrix 来自:Matrix

2005 pq去了?br />
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!  



Shooper.Java 2006-05-10 00:29 发表评论
]]>
jakarta-ant的?java~译工具)http://www.aygfsteel.com/shooper/articles/45317.htmlShooper.JavaShooper.JavaTue, 09 May 2006 16:13:00 GMThttp://www.aygfsteel.com/shooper/articles/45317.htmlhttp://www.aygfsteel.com/shooper/comments/45317.htmlhttp://www.aygfsteel.com/shooper/articles/45317.html#Feedback0http://www.aygfsteel.com/shooper/comments/commentRss/45317.htmlhttp://www.aygfsteel.com/shooper/services/trackbacks/45317.html 一Q介l:(x)
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>



Shooper.Java 2006-05-10 00:13 发表评论
]]>
jakarta-log4j的?java调试工具)http://www.aygfsteel.com/shooper/articles/45316.htmlShooper.JavaShooper.JavaTue, 09 May 2006 16:12:00 GMThttp://www.aygfsteel.com/shooper/articles/45316.htmlhttp://www.aygfsteel.com/shooper/comments/45316.htmlhttp://www.aygfsteel.com/shooper/articles/45316.html#Feedback0http://www.aygfsteel.com/shooper/comments/commentRss/45316.htmlhttp://www.aygfsteel.com/shooper/services/trackbacks/45316.html

一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的文档?



Shooper.Java 2006-05-10 00:12 发表评论
]]>
վ֩ģ壺 | | ̨| Ҵ| | Ϊ| | ½| | | ˳| ޻| Դ| | ̫| | | | | ɽ| | | մ| | Ӵ| | ̨| | | | | | | | ̨| | | | | | |