??xml version="1.0" encoding="utf-8" standalone="yes"?> 一、快速体?br>okQ现在就可以来体验一下Log4j的功能,按以下步骤在E序中快速加入了日志功能?br>参看下面q个单的例子一Q?br>W一? 用import导入Log4j需要用的相关的类 大功告成Q是不是非常单呢Q完全可以取代以前常用来调试E序的System.out.println("xxxxxxxxxxxx")q样的语?而且log4j可以通过自定义配|文件来灉|地对日志输出的别进行控制?br>Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q?br>例子一Q?br>package com.study; /**导入Log4j需要用的相关的类*/ /** //定义日志记录器loggerQ所有的日志由它来负责记? public static void main(String[] args) { //插入日志信息 看一个简单的java属性配|文件testLog4j.propertiesQ?br>Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q?br>#指定根LoggerQ及日志输出U别Q大于等于该U别的日志将被输出( DEBUG < INFO < WARN < ERROR < FATAL Q?设ؓOFF可以关闭日志 #把A2输出到控制台 #q可以单独指定输出某个包的日志?br>#log4j.logger.com.study.HelloLog4j=INFO 1、配|根LoggerQ其语法为: 2、配|log输出目的?br> Log4j提供以下几种Q?br> org.apache.log4j.ConsoleAppenderQ控制台Q?br> org.apache.log4j.FileAppenderQ文Ӟ 当用org.apache.log4j.PatternLayout来自定义信息格式Ӟ可以使用 关于性能Q?br>加入日志L会带来一些性能损耗,当然l大多数情况下可以忽略不计?br>1、当某个U别的日志被屏蔽输出Ӟ比如Q配|别ؓINFO,那么E序中DEBUGU别的日志语句将被禁止输?br>如: MQLog4j的设计目标已l充份考虑C速度优先。经q多ơ的改写Q性能问题已经几乎基本完全不是问题Q它是一个非怼U的工LӞ使用它带来的好处Q大大多于失ȝ那一点点性能损耗。完全可以大胆用?/p>
我在web-inf/classses目录下徏了commons-logging.properties和log4j.properties,我徏了两个appender, log4j.appender.dest1=org.apache.log4j.ConsoleAppender log4j.appender.dest2.MaxFileSize=100KB log4j.appender.dest2.layout=org.apache.log4j.PatternLayout
Apache的开源项目Log4j是一个功能强大的日志lg,提供快速有效的日志记录Q开发者通过单的学习Q即可ؓ自己的程序中加入非常实用的日志功能?br>在apache|站Q?a >http://jakarta.apache.org/log4j 可以免费下蝲到Log4j最新版本的软g包,解压Q将其中打包好的的log4j-1.x.x.jar文g复制到classpath相关目录??/p>
W二? 定义获取一个日志记录器Logger的对?br>W三? 装入Log4j的配|文Ӟ或者用缺省环境的配置
W四步:现在可以在你的程序中惌出日志的地方Q用LoggercL供的以下ҎQ插入不同优先的日志了?br> debug(Object message ) ;
info(Object message ) ;
warn(Object message ) ;
error(Object message ) ;
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
* <p>Title: Log4j例子</p>
* <p>Description: 快速在E序中用Log4j</p>
* <p>Copyright: Copyright (c) 2004</p>
* @author Robin
* @version 1.0
*/
public class HelloLog4j {
static Logger logger=Logger.getLogger(HelloLog4j.class.getClass());
//使用~省环境来配|Log4j
BasicConfigurator.configure();
//使用配置文g来配|Log4j
//PropertyConfigurator.configure ( "D:\\testLog4j.properties" ) ;
logger.info("HelloLog4j开始执?);
try {
HelloLog4j helloLog4j1 = new HelloLog4j();
int count=helloLog4j1.count(1,-32);
logger.debug("count的gؓQ?+count);
}
catch (Exception e) {
logger.error("error"+e.getMessage());
}
logger.info("HelloLog4j执行完成");
}
/**
* 求两整数C?br> * */
public int count(int a,int b) {
int add=a+b;
if (add<0){
logger.warn("两数之和于?);
}
return add;
}
}
Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q?br>二、配|Log4j
我们可以通过自定义定义配|文件来Ҏ志的输出q行动态的控制?br>Log4j支持两种配置文g格式Q一U是XML格式的文Ӟ一U是JavaҎ文Ӟ?|?br>可以用以下方式来载入配置文g:
1、蝲入用Java 键—值对的属性文件编写的配置文g?br> PropertyConfigurator.configure ( String configFilename)
2、蝲入XML形式的配|文?br> DOMConfigurator.configure ( String filename )?/p>
log4j.rootLogger=DEBUG, A1,A2
#指定log输出目的,q里设ؓ输出日志到指定目录的文gmy.log?br>log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=d:\\study\\my.log
#指定日志信息的格?br>log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%r %d{yyyy-MM-dd HH:mm:ss} %c %p -%m%n
log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.SimpleLayout
Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q#Q?/p>
log4j.rootLogger = [ level ] , appenderName, appenderName2
levelQ日志的U别Q指定这条日志信息的重要性。分为ALL < DEBUG < INFO < WARN <ERROR < FATAL < OFF
一般常用的?DEBUG Q?INFO QWARN QERROR四种Q分别对应Loggercȝ四种Ҏ
debug(Object message ) ;
info(Object message ) ;
warn(Object message ) ;
error(Object message ) ;
如果讄U别为INFOQ则优先U大于等于INFOU别Q如QINFO、WARN、ERRORQ的日志信息可以被输出,于该别的如:DEBUG不会被输出
appenderName :是指定日志信息输出目的圎ͼ比如Q打印到控制収ͼ输出到文件等Q。同一条日志信息可以配|多个输出目的地?/p>
org.apache.log4j.DailyRollingFileAppenderQ每天生一个日志文Ӟ
org.apache.log4j.RollingFileAppenderQ文件大到达指定尺寸的时候生一个新的文Ӟ
org.apache.log4j.WriterAppenderQ将日志信息以流格式发送到L指定的地方)
3、log信息的格?br> org.apache.log4j.HTMLLayoutQHTML表格形式Q?br> org.apache.log4j.SimpleLayoutQ简单格式的日志Q只包括日志信息的别和指定的信息字W串 Q如:DEBUG - HelloQ?br> org.apache.log4j.TTCCLayoutQ日志的格式包括日志产生的时间、线E、类别等{信息)
org.apache.log4j.PatternLayoutQ灵zd自定义日志格式)
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p -%m%n 来格式化信息
%c 输出所属类的全名,可写?%c{Num} ,Numcd输出的范?nbsp; 如:"com.sun.aaa.classB", %C{2}日志输出输出范围为:aaa.classB
%d 输出日志旉其格式ؓ 可指定格??%d{HH:mm:ss}{?br>%l 输出日志事g发生位置Q包括类目名、发生线E,在代码中的行?br>%n 换行W?br>%m 输出代码指定信息Q如info(“message”),输出message
%p 输出日志的优先Q即 FATAL ,ERROR {?br>%r 输出从启动到昄该条日志信息所耗费的时_毫秒敎ͼ
%t 输出产生该日志事件的U程?br>更详l参C息可参看corg.apache.log4j.PatternLayout的API doc文档
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
以上语句中,虽然debug语句里的消息不会输出到日志里Q但消息中字W串构造的操作依然会执行,当操作比较复杂时Q有时会带来一些性能损耗,可以Ҏ一下写法:
if(logger.isDebugEnabled() {
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
则一旦DEBUGU别被禁止输出,则不会执行日志信息后面的字符串操作?br>2、由于日志记录器LoggerQ支持命名的层次Q所以在子层ơ向上查扄承自父层ơ的日志U别Ӟ也可能会有一些性能损耗?/p>
============================================
commons-logging和log4jl合Qhttp://dev.csdn.net/develop/article/29/29531.shtm
commons-logging.properties内容:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
log4j.properties内容:
log4j.rootLogger=debug, dest1,dest2
log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
log4j.appender.dest1.layout.ConversionPattern=%d %-5p %-5c{3} %x -> %m%n
log4j.appender.dest2=org.apache.log4j.RollingFileAppender
log4j.appender.dest2.File=c://bridge.log
# Keep one backup file
log4j.appender.dest2.MaxBackupIndex=3
log4j.appender.dest2.layout.ConversionPattern=%d [%t] %-5p %-5c{3}(%L) %x -> %m%n
]]>
在Eclipse中只能编辑英文资源文?要编辑中文资源文?一般要用JDK中的native2ascii工具q行转换.q样的操作对于一个或两个资源文gq好,一但要操作的资源文件多?q样未免有些麻烦了.在Eclipse下有两个可以用来~辑中文资源文g的工?JInto和Properties Editor,使用h各有千秋.JINTO可以同时~辑多个资源文g,例如把APPLICATION_EN.Properties和APPLICATION_ZH_CN.Properties两个文g都用open with jinto打开,那么可以看C个文件在同一个编辑界面了.而Properties Editor主要用来~辑单个资源文g. 下蝲地址在下?如果有问题可以留a.
JInto 0.8.0
主页 http://www.guh-software.de/jinto.html
下蝲 http://www.guh-software.de/jinto/de.guhsoft.jinto_0.8.0.zip
文档 http://www.guh-software.de/jinto/JIntoGettingStarted.pdf Q英文)
Properties Editor
主页 http://propedit.sourceforge.jp/index_en.html
它提供了三个版本Q单独运行的版本、Eclipse版本、JBuilder版本Q这里只看看Eclipse3下的版本?/p>
PropertiesEditor_EclipsePlugin_for_3.0 V4.4.0
安装Ҏ
Please choose from the screen of Eclipse with "Help" ->"Software Updates" -> "Update Manager". An ~Update Manager~ opens.
In the "Feature Updates" view at the lower left of an ~Update Manager~, please carry out the right click of the "Sites to Visit", and create a site bookmark by "New" -> "Site Bookmark...".
- The bookmark to create should input the following "URL" and should push an "Finish" button.
Name: Arbitrary input
URL : http://propedit.sourceforge.jp/eclipse/updates/
Bookmark type: Eclipse update site
If a site bookmark is created, the bookmark created at the bottom of "Feature Updates" will appear.
A click of "jp.gr.java_conf.ussiy.app.propedit.eclipse.feature.PropertiesEditorFeature x.x.x" displays a preview on a right window. Since the button "Install Now" is in around the lower right, please click.
Since an installation wizard starts, please click a "Next" button rapidly.
"You will need to restart the workbench for the changes to take effect. Would you like to restart now?" is displayed. Please reboot Eclipse according to a dialog.
提高 JAVA IDE 的性能的JVM开?br>
我的本本是IBMR60 内存1GQeclipse 3.2.1 + myeclipse 5.5.1 速度q不错?/p>
q行参数如下Q?br>eclipse.exe -vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=20M
Q-Q-Q-Q-Q-Q-Q-
JVM 提供了各U用于调整内存分配和垃圾回收行ؓ的标准开兛_非标准开兟뀂其中一些设|可以提?JAVA IDE 的性能?br>注意Q由?-X Q尤其是 -XX JVMQ开关通常?JVM ?JVM 供应商特定的Q本部分介绍的开兛_用于 Sun Microsystems J2SE 1.4.2?/p>
以下讄在大多数pȝ上将产生比工厂更好的讄性能?br>-vmargs - 表示后面的所有参数直接传递到所指示?Java VM?/p>
-Xverify:none - 此开兛_闭Java字节码验证,从而加快了c装入的速度Qƈ使得在仅为验证目的而启动的q程中无需装入cR此开关羃短了启动旉Q因此没有理׃使用它?/p>
-Xms24m - 此设|指C?Java 虚拟机将其初始堆大小讄?24 MB。通过指示 JVM 最初应分配l堆的内存数量,可以?JVM 不必?IDE 占用较多内存时增加堆大小?/p>
-Xmx96m - 此设|指?Java 虚拟机应对堆使用的最大内存数量。ؓ此数量设|上限表C?Java q程消耗的内存数量不得过可用的物理内存数量。对于具有更多内存的pȝ可以增加此限Ӟ96 MB 讄有助于确?IDE 在内存量?128MB ?256MB 的系l上能够可靠地执行操作。注意:不要该D|ؓ接近或大于系l的物理内存量,否则在主要回收q程中导致频J的交换操作?/p>
-XX:PermSize=20m - ?JVM 开关不仅功能更为强大,而且能够~短启动旉。该讄用于调整内存"怹区域"Q类保存在该区域中)的大。因此我们向 JVM 提示它将需要的内存量。该讄消除了许多系l启动过E中的主要垃圾收集事件。SunONE Studio 或其它包含更多模块的 IDE 的用户可能希望将该数D|得更高?br>下面列出了其它一些可能对 ECLIPSE 在某些系l(不是所有系l)上的性能产生d或明昑֪响的 JVM 开兟뀂尽用它们会产生一定的影响Q但仍值得一试?/p>
-XX:CompileThreshold=100 - 此开兛_降低启动速度Q原因是与不使用此开关相比,HotSpot 能够更快地将更多的方法编译ؓ本地代码。其l果是提高了 IDE q行时的性能Q这是因为更多的 UI 代码被~译而不是被解释。该DC方法在被编译前必须被调用的ơ数?/p>
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC - 如果垃圾回收频繁中断Q则请尝试用这些开兟뀂此开兛_?JVM 对主要垃圑֛收事Ӟ如果在多处理器工作站上运行,则也适用于次要回收事Ӟ使用不同的算法,q些法不会影响整个垃圾回收q程。注意:目前不定此收集器是提高还是降低单处理器计机的性能?/p>
-XX:+UseParallelGC - 某些试表明Q至在内存配置相当良好的单处理器系l中Q用此回收法可以次要垃圑֛收的持箋旉减半。注意,q是一个矛盄问题Q事实上此回收器主要适用于具有千兆字节堆的多处理器。尚无可用数据表明它对主要垃圑֛收的影响。注意:此回收器?-XX:+UseConcMarkSweepGC 是互斥的?/p>
我的机器?12MB的内?br>下面是我的eclipse启动参数Qeclipse.exe -vmargs -Xverify:none -Xms64M -Xmx256M -XX:PermSize=20M -XX:+UseParallelGC
-----
By BeanSoft:
我的电脑?G内存, 有一ơ内存不了... MyEclipse 推荐我使用一个启动参? 现在我的启动参数?
eclipse.exe -vmargs -Xverify:none -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -XX:+UseParallelGC