??xml version="1.0" encoding="utf-8" standalone="yes"?> Comet 是一个用于描q客L(fng)和服务器之间的交互的术语Q即使用长期保持?HTTP q接来在q接保持畅通的情况下支持客L(fng)和服务器间的事g驱动的通信?/p>
—引用自“Comet的诱?#8221; 传统的webpȝ的工作流E是客户端发?gu)求,服务器端q行响应Q而Comet则是在现有技术的基础上,实现服务器数据、事件等快速PUSH到客L(fng)Q所以会(x)出现一个术?#8221;服务器推“技术?/p>
原理Q?/strong> 利用JSP/SERVEL技术,在不关闭HTTP的情况下PUSH数据到客L(fng)览器; 实现Q?br />
AJAX 的出C?JavaScript 可以调用 XMLHttpRequest 对象发出 HTTP hQJavaScript 响应处理函数Ҏ(gu)服务器返回的信息?HTML 面的显C行更新。?AJAX 实现“服务器推”与传l的 AJAX 应用不同之处在于Q?/p>
以Pushlet中的ping案例来进行分析:(x)
来自Q?a title="http://www.pussor.com/?p=3" >http://www.pussor.com/?p=3
官网Q?a title="http://www.pushlets.com/" >http://www.pushlets.com/
Ajax{Web 2.0技术的q泛应用Q推动了(jin)C/S向B(ti)/S的{变,如今很多应用如监控、即旉信{系l都需要实时同步服务器端和客户端的数据更新。Comet在这U需求下应运而生Q本文简单介l了(jin)ZComet的开源框架Pushlet?/p>
Comet基础
PUSH实现方式
JSP/SERVLET PUSH
Z AJAX 的长轮询Qlong-pollingQ方?/p>
Pushlet实例
实例1 Pushlet CookBook部分译 + 注释
pushlet 2.0.3 源码分析(服务器端)
]]>
部分英文未汉化补丁修正版Q?a >resources.rar
好用留个话!
Apache官方下蝲地址Q?br /> apache_2.2.4-win32-x86-no_ssl.msiQ?a target="_blank">更多版本在这?/a>Q?/p>
php官方下蝲地址Q?br /> php-5.2.12-Win32.zipQ?a target="_blank">更多镜像下蝲地址Q?a target="_blank">更多版本下蝲Q?/p>
mysql官方下蝲地址Q?br /> mysql-5.0.14-win32.zipQ?a target="_blank">更多镜像下蝲地址Q?a target="_blank">更多版本下蝲?/p>
一、安装ApacheQ配|成功一个普通网站服务器
q行下蝲好的“apache_2.0.55-win32-x86-no_ssl.msi”Q出现如下界面:(x)
出现Apache HTTP Server 2.0.55的安装向导界面,?#8220;Next”l箋
认同意软g安装使用许可条例Q选择“I accept the terms in the license agreement”Q点“Next”l箋
Apache安装到Windows上的使用ȝQ请阅读完毕后,?#8220;Next”l箋
讄pȝ信息Q在Network Domain下填入?zhn)的域名(比如Qpopsms.net.cnQ,在Server Name下填入?zhn)的服务器名称Q比如:(x)tiger520119@126.comQ,上述三条信息仅供参考,其中联系?sh)子邮g地址?x)在当系l故障时提供l访问者,三条信息均可L填写Q无效的也行。下面有两个选择Q图片上选择的是为系l所有用户安装,使用默认?0端口Qƈ作ؓ(f)pȝ服务自动启动Q另外一个是仅ؓ(f)当前用户安装Q用端?080Q手动启动。一般选择如图所C。按“Next”l箋。]
选择安装cdQTypical为默认安装,Custom为用戯定义安装Q我们这里选择CustomQ有更多可选项。按“Next”l箋
出现选择安装选项界面Q如图所C,左键炚w?#8220;Apache HTTP Server 2.0.55”Q选择“This feature, and all subfeatures, will be installed on local hard drive.”Q即“此部分,?qing)下属子部分内容Q全部安装在本地盘?#8221;。点?#8220;Change...”Q手动指定安装目录?/p>
我这里选择安装?#8220;D:\”Q各位自行选取?jin),一般徏议不要安装在操作pȝ所在盘Q免得操作系l坏?jin)之后,q原操作把Apache配置文g也清除了(jin)。?#8220;OK”l箋?/p>
q回刚才的界面,?#8220;Next”l箋?/p>
认安装选项无误Q如果?zhn)认?f)要再(g)查一遍,可以?#8220;Back”一步步q回(g)查。点“Install”开始按前面讑֮的安装选项安装?/p>
正在安装界面Q请耐心(j){待Q直到出C面的画面?/p>
安装向导成功完成Q这时右下角状态栏应该出现?jin)下面的q个l色图标Q表CApache服务已经开始运行,?#8220;Finish”l束Apache的Y件安?/p>
我们来熟(zhn)一下这个图标,很方便的Q在图标上左键单击,出现如下界面Q有“StartQ启动)(j)”?#8220;StopQ停止)(j)”?#8220;RestartQ重启动Q?#8221;三个选项Q可以很方便的对安装的Apache服务器进行上q操作?/p>
好了(jin)现在我们来测试一下按默认配置q行的网站界面,在IE地址栏打“http://127.0.0.1”Q点“转到”Q就可以看到如下面Q表CApache服务器已安装成功?/p>
现在开始配|Apache服务器,使它更好的替我们服务Q事实上Q如果不配置Q你的安装目录下的Apache2\htdocs文g夹就是网站的默认根目录,在里面放入文件就可以?jin)。这里我们还是要配置一下,有什么问题或修改Q配|始l是要会(x)的,如图所C,“开?#8221;?#8220;所有程?#8221;?#8220;Apache HTTP Server 2.0.55”?#8220;Configure Apache Server”?#8220;Edit the Apache httpd conf Configuration file”Q点?yn)L开?/p>
XP的记事本有了(jin)些小变化Q很实用的一个功能就是可以看到文件内容的行、列位置Q按下图所C,?#8220;查看”Q勾?#8220;状态栏”Q界面右下角多?jin)个标记Q?#8220;Ln 78, Col 10”pC?#8220;?78Q列 10”Q这样可以迅速的在文件中定位Q方便解说。当?dng)你也可以通过“~辑”Q?#8220;查找”输入关键字来快速定位。每ơ配|文件的改变Q保存后Q必d Apache服务器重启动后生效,可以用前面讲的小图标方便的控制服务器随时“重启?#8221;?/p>
现在正式开始配|Apache服务器,“Ln 228”Q或者查扑օ键字“DocumentRoot”Q也是|站根目录)(j)Q找到如下图所C地方,然后?"内的地址Ҏ(gu)你的|站根目录,地址格式L(fng)图上的写Q主要是一般文件地址?#8220;\”在Apache里要Ҏ(gu)“/”?/p>
“Ln 253”Q同P你也可以通过查找“DIRECTORY”来定位,以后不再说明Q将""内的地址Ҏ(gu)跟DOCUMENTROOT的一栗?/p>
“Ln321”QDirectoryIndexQ目录烦(ch)引,也就是在仅指定目录的情况下,默认昄的文件名Q,可以d很多Q系l会(x)Ҏ(gu)从左臛_的顺序来优先昄Q以单个半角I格隔开Q比如有些网站的首页是index.htmQ就在光标那里加?#8220;index.htm ”文g名是L的,不一定非?#8220;index.html”Q比?#8220;test.php”{,都可以?/p>
q里有一个选择配置选项Q以前可能要配置Q现在好像修正过来了(jin)Q不用配|了(jin)Q就是强制所有输出文件的语言~码Qhtml文g里有语言标记Q,q个是讑֮文语言为gb2312Q的也会(x)强制转换。如果打开的网出Cؕ码,请先(g)查网内有没有上q?html语言标记Q如果没有,d上去p正常昄?jin)。把“# DefaultLanguage nl”前面?#8220;# ”LQ把“nl”Ҏ(gu)你要强制输出的语aQ中文是“zh-cn”Q保存,关闭?/p>
好了(jin)Q简单的Apache配置到此结束了(jin)Q现在利用先前的图标重启动Q所有的配置q效了(jin)Q你的网站就成了(jin)一个网站服务器Q如果你加蝲?jin)防火墙Q请打开80?080端口Q或者允许ApacheE序讉K|络Q否则别Z能访问。如果你有公|IPQ一般ADSL或电(sh)话拨号上|的都是Q,可以邀(g)h有能上网的朋友访问用http://你的IP地址QIP地址查询可访?a >http://www.popsms.net.cnQ查询内容内xQ你的网站了(jin)Q如果你没有公网IPQ也可以把内|IP地址告诉局域网内的其它用户Q让他们通过http://你的内网IP地址Q访问你的网站?/p>
二、php的安装、以module方式Q将php与apachel合使你的网站服务器支持php服务器脚本程?/strong>
下载的php安装文gphp-5.0.5-Win32.zip右键解压~?/p>
指定解压~的位置Q我的设定在“D:\php”
查看解压~后的文件夹内容Q找?#8220;php.ini-dist”文gQ将光命名?#8220;php.ini”Q打开~辑Q找C面图中的地方Q?Ln385Q有一?#8220;register_globals = Off”|q个值是用来打开全局变量的,比如表单送过来的|如果q个D?#8220;Off”Q就只能?#8220;$_POST['变量?]?_GET['变量?']”{来取得送过来的|如果设ؓ(f)“On”Q就可以直接使用“$变量?#8221;来获取送过来的|当然Q设?#8220;Off”比较安全,不会(x)让hL网间传送的数据截取。这个值是否改?#8220;On”q自己感觉?jin),是安全重要还是方侉K要?
q里q有一个地方要~辑Q功能就是php能够直接调用其它模块Q比如访问mysqlQ如下图所C,Ln563Q选择要加载的模块Q去掉前面的 “;”Q就表示要加载此模块?jin),加蝲的越多,占用的资源也多一点,不过也多不到哪去Q比如我要用mysqlQ就要把“;extension= php_mysql.dll”前的“;”L。所有的模块文g都放在php解压~目录的“ext”之下Q我q里的截图是把所有能加蝲的模块都加蝲上去?jin),前面?#8220;;”没去掉的Q是因ؓ(f)“ext”目录下默认没有此模块Q加载会(x)提示找不到文件而出错。这里只是参考,一般不需要加载这么多Q需要的加蝲上就可以?jin),~辑好后保存Q关闭?/p>
如果上一步加载了(jin)其它模块Q就要指明模块的位置Q否则重启Apache的时候会(x)提示“找不到指定模?#8221;的错误,q里介绍一U最单的Ҏ(gu)Q直接将php安装路径、里面的ext路径指定到windowspȝ路径?#8212;—?#8220;我的?sh)?#8221;上右键,“属?#8221;Q选择“高”标签Q点?#8220;环境变量”Q在“pȝ变量”下找?#8220;Path”变量Q选择Q双?yn)L点击“~辑”Q将“;D:\php;D:\php\ext”加到原有值的后面Q当?dng)其中?#8220;D:\php” 是我的安装目录,你要它改ؓ(f)自己的php安装目录Q如下图所C,全部定。系l\径添加好后要重启?sh)脑才能生效Q可以现在重启,也可以在所有Y件安装或配置好后重启?/p>
现在开始将php以module方式与Apache相结合,使php融入ApacheQ照先前的方法打开Apache的配|文ӞLn 173Q找到这里,dq如图所C选中的两行,W一?strong style="color: #ff6600;">“LoadModule php5_module "D:/php/php5apache2_2.dll"”是指以module方式加蝲phpQ第二行“PHPIniDir "D:/php"”是指明php的配|文件php.ini的位|,是当?dng)其中?#8220;D:/php”要改成你先前选择的php解压~的目录?/p>
q是Apache的配|文ӞLn 757Q加?#8220;AddType application/x-httpd-php .php”?#8220;AddType application/x-httpd-php .html”两行Q你也可以加入更多,实质是d可以执行php的文件类型,比如你再加上一?#8220;AddType application/x-httpd-php .htm”Q则.htm文g也可以执行phpE序?jin),你甚臌可以d上一?#8220;AddType application/x-httpd-php .txt”Q让普通的文本文g格式也能q行phpE序?/p>
前面所说的目录默认索引文g也可以改一下,因ؓ(f)现在加了(jin)phpQ有些文件就直接存ؓ(f).php?jin),我们也可以?#8220;index.php”设ؓ(f)默认索引文gQ优先顺序就自己排了(jin)Q我的是攑֜W一位。编辑完成,保存Q关闭?/p>
现在Qphp的安装,与Apache的结合已l全部完成,用屏q右下角的小图标重启ApacheQ你的Apache服务器就支持?jin)php?/p>
三、mysql的安装,与php、Apache相结?/strong>
打开下蝲的mysql安装文gmysql-4.1.14-win32.zipQ双击解压羃Q运?#8220;setup.exe”Q出现如下界?/p>
mysql安装向导启动Q按“Next”l箋
选择安装cdQ有“TypicalQ默认)(j)”?#8220;CompleteQ完全)(j)”?#8220;CustomQ用戯定义Q?#8221;三个选项Q我们选择“Custom”Q有更多的选项Q也方便熟?zhn)安装q程
?#8220;Developer ComponentsQ开发者部分)(j)”上左键单击,选择“This feature, and all subfeatures, will be installed on local hard drive.”Q即“此部分,?qing)下属子部分内容Q全部安装在本地盘?#8221;。在上面?#8220;MySQL ServerQmysql服务器)(j)”?#8220;Client ProgramsQmysql客户端程序)(j)”?#8220;DocumentationQ文)(j)”也如此操作,以保证安装所有文件。点?#8220;Change...”Q手动指定安装目录?/p>
填上安装目录Q我的是“D:\mysql”Q也不要攑֜与操作系l同一分区Q这样可以防止系l备份还原的时候,数据被清I。按“OK”l箋?/p>
q回刚才的界面,?#8220;Next”l箋?/p>
认一下先前的讄Q如果有误,?#8220;Back”q回重做。按“Install”开始安装?/p>
正在安装中,L(fng)候,直到出现下面的界?/p>
q里是询问你是否要注册一个mysql.com的̎P或是使用已有的̎L(fng)陆mysql.comQ一般不需要了(jin)Q点?#8220;Skip Sign-Up”Q按“Next”略过此步骤?/p>
现在软g安装完成?jin),出现上面的界面,q里有一个很好的功能Qmysql配置向导Q不用向以前一P自己手动׃八糟的配|my.ini?jin),?“Configure the Mysql Server now”前面的勾打上Q点“Finish”l束软g的安装ƈ启动mysql配置向导?/p>
mysql配置向导启动界面Q按“Next”l箋?/p>
选择配置方式Q?#8220;Detailed ConfigurationQ手动精配|)(j)”?#8220;Standard ConfigurationQ标准配|)(j)”Q我们选择“Detailed Configuration”Q方便熟(zhn)配|过E?/p>
选择服务器类型,“Developer MachineQ开发测试类Qmysql占用很少资源Q?#8221;?#8220;Server MachineQ服务器cdQmysql占用较多资源Q?#8221;?#8220;Dedicated MySQL Server MachineQ专门的数据库服务器Qmysql占用所有可用资源)(j)”Q大家根据自qcd选择?jin),一般?#8220;Server Machine”Q不?x)太,也不会(x)占满?/p>
选择mysql数据库的大致用途,“Multifunctional DatabaseQ通用多功能型Q好Q?#8221;?#8220;Transactional Database OnlyQ服务器cdQ专注于事务处理Q一般)(j)”?#8220;Non-Transactional Database OnlyQ非事务处理型,较简单,主要做一些监控、记数用Q对MyISAM数据cd的支持仅限于non-transactionalQ,随自q用途而选择?jin),我这里选择“Transactional Database Only”Q按“Next”l箋?/p>
对InnoDB Tablespaceq行配置Q就是ؓ(f)InnoDB 数据库文仉择一个存储空_(d)如果修改?jin),要记住位|,重装的时候要选择一L(fng)地方Q否则可能会(x)造成数据库损坏,当然Q对数据库做个备份就没问题了(jin)Q这里不详述。我q里没有修改Q用用默认位置Q直接按“Next”l箋
选择(zhn)的|站的一般mysql讉K量,同时q接的数目,“Decision Support(DSS)/OLAPQ?0个左叻I(j)”?#8220;Online Transaction Processing(OLTP)Q?00个左叻I(j)”?#8220;Manual SettingQ手动设|,自己输一个数Q?#8221;Q我q里?#8220;Online Transaction Processing(OLTP)”Q自q服务器,应该够用?jin),?#8220;Next”l箋
是否启用TCP/IPq接Q设定端口,如果不启用,只能在自己的机器上讉Kmysql数据库了(jin)Q我q里启用Q把前面的勾打上QPort NumberQ?306Q按“Next”l箋
q个比较重要Q就是对mysql默认数据库语a~码q行讄Q第一个是西文~码Q第二个是多字节的通用utf8~码Q都不是我们通用的编码,q里选择W三个,然后在Character Set那里选择或填?#8220;gbk”Q当然也可以?#8220;gb2312”Q区别就是gbk的字库容量大Q包括了(jin)gb2312的所有汉字,q且加上?jin)繁体字、和其它׃八糟的字——使用mysql的时候,在执行数据操作命令之前运行一?#8220;SET NAMES GBK;”Q运行一ơ就行了(jin)QGBK可以替换为其它|视这里的讄而定Q,可以正常的使用汉字Q或其它文字Q了(jin)Q否则不能正常显C汉字。按 “Next”l箋?/p>
选择是否mysql安装为windows服务Q还可以指定Service NameQ服务标识名Uͼ(j)Q是否将mysql的bin目录加入到Windows PATHQ加入后Q就可以直接使用bin下的文gQ而不用指出目录名Q比如连接,“mysql.exe -uusername -ppassword;”可以了(jin)Q不用指出mysql.exe的完整地址Q很方便Q,我这里全部打上了(jin)勾,Service Name不变。按“Next”l箋?/p>
q一步询问是否要修改默认root用户Q超U管理)(j)的密码(默认为空Q,“New root password”如果要修改,在此填入新密码Q如果是重装Qƈ且之前已l设|了(jin)密码Q在q里更改密码可能?x)出错,L(fng)I,q将“Modify Security Settings”前面的勾LQ安装配|完成后另行修改密码Q,“ConfirmQ再输一遍)(j)”内再填一ơ,防止输错?#8220;Enable root access from remote machinesQ是否允许root用户在其它的机器上登陆,如果要安全,׃要勾上,如果要方便,勾上它Q?#8221;。最?#8220;Create An Anonymous AccountQ新Z个匿名用P匿名用户可以q接数据库,不能操作数据Q包括查询)(j)”Q一般就不用勾了(jin)Q设|完毕,?#8220;Next”l箋?/p>
认讄无误Q如果有误,?#8220;Back”q回(g)查。按“Execute”使设|生效?/p>
讄完毕Q按“Finish”l束mysql的安装与配置——q里有一个比较常见的错误Q就是不?#8220;Start service”Q一般出现在以前有安装mysql的服务器上,解决的办法,先保证以前安装的mysql服务器彻底卸载掉?jin);不行的话Q检查是否按上面一步所_(d)之前的密码是否有修改Q照上面的操作;如果依然不行Q将mysql安装目录下的data文g夹备份,然后删除Q在安装完成后,安装生成的 data文g夹删除,备䆾的data文g夹移回来Q再重启mysql服务可以了(jin)Q这U情况下Q可能需要将数据库检查一下,然后修复一ơ,防止数据出错?/p>
与Apache?qing)php相结合,前面已提q,q里再说一下,在php安装目录下,扑ֈ先前重命名ƈ~辑q的 php.iniQ如下图所C,Ln563Q把“;extension=php_mysql.dll”前的“;”LQ加载mysql模块。保存,关闭后,重启apache可以了(jin)。这里也可以选择其它要加载的模块Q去掉前面的“;”Q就表示要加载此模块?jin),加蝲的越多,占用的资源也多一点,不过也多不到哪去。所有的模块文g都放在php解压~目录的“ext”之下Q我q里的截图是把所有能加蝲的模块都加蝲上去?jin),前面?#8220;;”没去掉的Q是因ؓ(f)“ext” 目录下默认没有此模块Q加载会(x)提示找不到文件而出错。这里只是参考,一般不需要加载这么多Q需要的加蝲上就可以?jin),~辑好后保存Q关闭?/p>
同样Q加载了(jin)模块后,p指明模块的位|,否则重启Apache的时候会(x)提示“找不到指定模?#8221;的错误,q里介绍一U最单的Ҏ(gu)Q直接将 php安装路径、里面的ext路径指定到windowspȝ路径?#8212;—?#8220;我的?sh)?#8221;上右键,“属?#8221;Q选择“高”标签Q点?#8220;环境变量”Q在“pȝ变量”下找?#8220;Path”变量Q选择Q双?yn)L点击“~辑”Q将“;D:\php;D:\php\ext”加到原有值的后面Q当?dng)其中?#8220;D:\php”是我的安装目录,你要它改ؓ(f)自己的php安装目录Q如下图所C,全部定。系l\径添加好后要重启?sh)脑才能生效Q可以现在重启,也可以在所有Y件安装或配置好后重启?/p>
2 在scr下创建log4j.properties
log4j.properties
//输入U别debug<info<warn<error
log4j.rootLogger=debug[info][warn][error],appender1
//ConsoleAppender输出到控制台,FileAppender输出到文?br />
log4j.appender.appender1=org.apache.log4j.ConsoleAppender[FileAppender]
//写出的目标文?br />
log4j.appender.appender1.File=c:/demllog4j.log[.html]
//写入文g的格?br />
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout[HTMLLayout]
?Q控制台输出Q?br />
log4j.rootLogger=debug,appender1
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
?Q输出到.log文gQ?br />
log4j.rootLogger=debug,appender1
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.File=c:/demllog4j.log
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
?Q输出到.html文gQ?br />
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.File=c:/demllog4j.html
log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout
?Q输出到.html文g同时输出到控制台Q?br />
log4j.rootLogger=error,appender1,appender2
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.File=c:/demllog4j.html
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
?Qؓ(f)不同cd义输出格?br />
log4j.rootLogger=debug,appender1
#log4j.logger.com.liuwei=info,appender1
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=%r [%t] %p - %c - %l - %m%n
3 ~写代码
public class Test {
//参数为当前类的类?得到l(f)ogger
private static Logger logger=Logger.getLogger(Test.class);
public static void main(String[] args) {
//输出信息
//if(log.isDebugEnabled()){
logger.debug("sssssssss");
logger.info("ssssssss");
logger.error("ssssssssss");
//}
}
}
--------------------------------------------------------------------
log4j核心(j)
1 Logger 完成日志信息的处?/p>
输出U别Q?br />
debug 错误信息 if(log.isDebugEnabled()){log.debug("x="+x);}
info 日常信息 if(log.isDebugEnabled()){log.info("System started at"+new Date());}
warn 警告信息 if(log.isDebugEnabled()){log.warn("Server down-returnning");}
error E序出错信息 if(log.isDebugEnabled()){log.error("Could not access server",e);}
2 Appender 讄日志信息的去?/p>
org.apache.log4j.ConsoleAppender(控制?
org.apache.log4j.FileAppender(文g)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文?
org.apache.log4j.RollingFileAppender(文g大小到达指定寸时生一个新的文?
org.apache.log4j.WriterAppender(日志讯息以串流格式发送到L指定的地?
org.apache.log4j.JdbcAppender(日志讯息保存到数据库中)
3 Layout 讄日志信息的输出样?/p>
org.apache.log4j.HTMLLayout (以HTML表格形式布局)
org.apache.log4j.SimpleLayout (包含日志讯息的别和讯息字符?
org.apache.log4j.TTCCLayout (包含日志产生的时间、执行者、类别等{讯?
org.apache.log4j.PatternLayout (可以灉|地指定布局模式)
PatternLayoutQ?br />
-%p 输出优先U,即debug,info,warn,error
-%r 输出自应用启到到输出该日志讯息所耗费的毫U数
-%t 输出产生该日志事件的U程?br />
-%f 输出日志讯息所属的cȝcd?br />
-%c 输出日志讯息所属的cȝ全名
-%d 输出日志旉点的日期或时_(d)指定格式的方式:(x)%d{yyyy-MM-dd HH:mm:ss}
-%l 输出日志讯息所属发生位|,卌出日志讯息的语句处于它所在的cd的第几行
-%m 输出代码中指定的讯息Q如log(message)中的message
-%n 输出一个换行符?/p>
配置文g
log4j.properties/log4j.xml