﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-勤劳的小熊猫</title><link>http://www.blogjava.net/xfcoding/</link><description>勤能补拙！</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 20:43:30 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 20:43:30 GMT</pubDate><ttl>60</ttl><item><title>如何使用Log4j</title><link>http://www.blogjava.net/xfcoding/articles/393882.html</link><dc:creator>勤劳的小熊猫</dc:creator><author>勤劳的小熊猫</author><pubDate>Sun, 06 Jan 2013 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/xfcoding/articles/393882.html</guid><wfw:comment>http://www.blogjava.net/xfcoding/comments/393882.html</wfw:comment><comments>http://www.blogjava.net/xfcoding/articles/393882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfcoding/comments/commentRss/393882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfcoding/services/trackbacks/393882.html</trackback:ping><description><![CDATA[<font size="2"><strong>1、 Log4j是什么？<br /></strong>&nbsp; Log4j可以帮助调试（有时候debug是发挥不了作 <br />用的）和分析，要下载和了解更详细的内容，还是访问其官方网站吧：</font> <a href="http://jakarta.apache.org/log4j"><font color="#6fbc4c"><font size="2">http://jakarta.apache.org/log4j</font> </font></a><font size="2">。<br /><br /><strong>2、Log4j的概念</strong><br />  <!--StartFragment --> 
Log4j中有三个主要的组件，它们分别是</font> <font size="2">Logger、Appender和Layout，L<!--StartFragment -->og4j <br />允许开发人员定义多个Logger，每个Logger拥有自己的名字，Logger之间通过名字来表明隶属关系。有一个Logger称为Root，它永远存在，且不能通过名字检索或引用，可以通过Logger.getRootLogger()方法获得，其它Logger通过 <br />Logger.getLogger(String name)方法。<br />&nbsp;&nbsp; <br />Appender则是用来指明将所有的log信息存放到什么地方，Log4j中支持多种appender，如<!--StartFragment --></font> <br /><font size="3"></font><font size="2">console、files、GUI components、NT Event <br />Loggers等，一个Logger可以拥有多个Appender，也就是你既可以将Log信息输出到屏幕，同时存储到一个文件中。<br />&nbsp;&nbsp; <br />Layout的作用是控制Log信息的输出方式，也就是格式化输出的信息。<br />&nbsp;&nbsp; <br />Log4j中将要输出的Log信息定义了5种级别，依次为DEBUG、INFO、WARN、ERROR和FATAL，当输出时，只有级别高过配置中规定的级别的信息才能真正的输出，这样就很方便的来配置不同情况下要输出的内容，而不需要更改代码，这点实在是方便啊。<br /><br /><strong>3、Log4j的配置文件</strong><br />&nbsp; <br />虽然可以不用配置文件，而在程序中实现配置，但这种方法在如今的系统开发中显然是不可取的，能采用配置文件的地方一定一定要用配置文件。Log4j支持两种格式的配置文件：XML格式和Java的property格式，本人更喜欢后者，首先看一个简单的例子吧，如下：<br /><br /></font><font color="#614db3"><font size="2">&nbsp; log4j.rootLogger=debug, <strong>stdout, <br />R</strong><br />&nbsp; <br />log4j.appender.<strong>stdout</strong>=org.apache.log4j.ConsoleAppender<br />&nbsp; <br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br /><br />&nbsp; # Pattern <br />to output the caller's file name and line number.<br />&nbsp; <br />log4j.appender.stdout.layout.ConversionPattern=%5p [%t] <strong>(%F:%L)</strong> <br />- %m%n<br /><br />&nbsp; <br />log4j.appender.<strong>R</strong>=org.apache.log4j.RollingFileAppender<br />&nbsp; <br />log4j.appender.R.File=example.log<br />&nbsp; log4j.appender.R.MaxFileSize=</font> <br /><font size="2"><strong>100KB<br /></strong><br />&nbsp; # Keep one backup file<br />&nbsp; <br />log4j.appender.R.MaxBackupIndex=1<br /><br />&nbsp; <br />log4j.appender.R.layout=org.apache.log4j.PatternLayout<br />&nbsp; <br />log4j.appender.R.layout.ConversionPattern=%p %t %c - <br />%m%n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br /></font><font color="#000000"><font size="2">&nbsp; 首先，是设置root，格式为<!--StartFragment --> 
log4j.rootLogger=[level],appenderName, ...，其中level就是设置需要输出信息的级别，后面是appender的输出的目的地，<!--StartFragment -->appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。</font> <br /><font size="2">配置日志信息输出目的地Appender，其语法为<br /></font><font size="2">&nbsp; <br />log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />&nbsp; <br />log4j.appender.appenderName.option1 = value1<br />&nbsp; ...<br />&nbsp; <br />log4j.appender.appenderName.option = valueN</font> <br /><font size="2">Log4j提供的appender有以下几种：<br />&nbsp; org.apache.log4j.ConsoleAppender（控制台）<br />&nbsp; <br />org.apache.log4j.FileAppender（文件）<br />&nbsp; <br />org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）<br />&nbsp; <br />org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生新文件）<br />&nbsp; <br />org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）<br /></font></font></font><font color="#614db3"><font color="#000000"><font size="2">配置日志信息的格式（布局），其语法为：<br /></font><font size="2">&nbsp; <br />log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />&nbsp; <br />log4j.appender.appenderName.layout.option1 = value1<br />&nbsp; ....<br />&nbsp; <br />log4j.appender.appenderName.layout.option = valueN</font> <br /><font size="2">Log4j提供的layout有以下几种：<br />&nbsp; org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br />&nbsp; <br />org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />&nbsp; <br />org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />&nbsp; <br />org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息） <br /><br /><br /></font></font></font><font color="#000000"><span style="font-size: 10.5pt;"><font size="2"><span lang="EN-US">Log4J采用类似C语言中的printf函数的打印格式格式化日志信息，打印参数如下： %m <br />输出代码中指定的消息<O:p></O:p></span> </font></span></font><br /><p><font color="#000000"><span style="font-size: 10.5pt;"><font size="2">　　</font> <br /><span lang="EN-US"><font size="2">%p 输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL <br />　　%r <br />输出自应用启动到输出该log信息耗费的毫秒数 <br />　　%c 输出所属的类目，通常就是所在类的全名 <br />　　%t 输出产生该日志事件的线程名 <br /><br />　　%n 输出一个回车换行符，Windows平台为&#8220;\r\n&#8221;，Unix平台为&#8220;\n&#8221; <br />　　%d <br />输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd <br />HH:mm:ss,SSS}，输出类似：</font> </span></span><ST1:chsdate isrocdate="False" islunardate="False" day="18" month="10" year="2002"><span style="font-size: 10.5pt;" lang="EN-US"><font size="2">2002年10月18日</font> </span></ST1:chsdate><span style="font-size: 10.5pt;" lang="EN-US"><font size="2">22：10：28，921 <br />　　%l <br />输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)</font> <br /></span></font></p><br /><font color="#614db3"><font color="#000000"><font size="2"><br /><strong>4、Log4j在程序中的使用</strong> </font></font></font><font color="#614db3"><font color="#000000"><br /></font><font color="#a0a0a0"><font color="#090909" size="2">&nbsp; <br />要在自己的程序中使用Log4j，首先需要将commons-logging.jar和logging-log4j-1.2.9.jar导入到构建路径中。然后再将log4j.properties放到src根目录下。这样就可以在程序中使用log4j了。在类中使用log4j，</font> <br /></font></font><font color="#614db3"><font color="#a0a0a0"><font color="#090909" size="2">首先声明一个静态变量</font> </font></font><font color="#614db3"><font color="#a0a0a0"><font color="#090909" size="2">Logger <br />logger=Logger.getLog("classname")；现在就可以使用了，用法如下：logger.debug("debug <br />message")或者logger.info("info message")，看下面一个小例子：</font> </font></font><font color="#614db3"><font color="#a0a0a0"><br /></font><br /><font size="2">&nbsp; import <br />com.foo.Bar;<br />&nbsp; import org.apache.log4j.Logger;<br />&nbsp; import <br />org.apache.log4j.PropertyConfigurator;<br />&nbsp; public class MyApp {<br />&nbsp;&nbsp;&nbsp; static <br />Logger logger = Logger.getLogger(MyApp.class.getName());<br />&nbsp;&nbsp;&nbsp; public static <br />void main(String[] args) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // BasicConfigurator replaced with <br />PropertyConfigurator.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PropertyConfigurator.configure(args[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />logger.info("Entering application.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bar bar = new Bar();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />bar.doIt();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.info("Exiting application.");<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; }<br /></font></font><img src ="http://www.blogjava.net/xfcoding/aggbug/393882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfcoding/" target="_blank">勤劳的小熊猫</a> 2013-01-06 17:46 <a href="http://www.blogjava.net/xfcoding/articles/393882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat连接池泄露的监控和解决</title><link>http://www.blogjava.net/xfcoding/articles/393879.html</link><dc:creator>勤劳的小熊猫</dc:creator><author>勤劳的小熊猫</author><pubDate>Sun, 06 Jan 2013 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/xfcoding/articles/393879.html</guid><wfw:comment>http://www.blogjava.net/xfcoding/comments/393879.html</wfw:comment><comments>http://www.blogjava.net/xfcoding/articles/393879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfcoding/comments/commentRss/393879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfcoding/services/trackbacks/393879.html</trackback:ping><description><![CDATA[
<div>1. 问题描述<br />Web程序在<strong style="color: black; background-color: rgb(255, 255, 102);">tomcat</strong>刚开始运行时速度很快，但过一段时间后发现速度变得很慢。<br />检查日志输出，发现异常如下:<br />org.apache.commons.dbcp.SQLNestedException: <br />Cannot get a connection, pool exhausted, <br />cause:<br />java.util.NoSuchElementException: Timeout waiting for idle <br />object<br />同时在SQLServer事件探查器中发现，每执行一次sql语句都要产生Audit login事件，语句执行后产生<br />Audit <br />logout事件。说明每一次<strong style="color: black; background-color: rgb(255, 255, 102);">tomcat</strong>都是重新打开新的连接。</div><br /><div>2. 问题解决<br /><strong style="color: black; background-color: rgb(255, 255, 102);">tomcat</strong> <br />的数据源定义提供了三个参数：<br />a. 如果设为true则<strong style="color: black; background-color: rgb(255, 255, 102);">tomcat</strong>自动检查恢复重新利用，没有正常关闭的Connection.（默认是false）<br />&lt;parameter&gt;<br />&lt;name&gt;removeAbandoned&lt;/name&gt;<br />&lt;value&gt;true&lt;/value&gt;<br />&lt;/parameter&gt;<br />b. <br />设定连接在多少秒内被认为是放弃的连接，即可进行恢复利用。<br />&lt;parameter&gt;<br />&lt;name&gt;removeAbandonedTimeout&lt;/name&gt;<br />&lt;value&gt;60&lt;/value&gt;<br />&lt;/parameter&gt;<br />c. <br />输出回收的日志，可以详细打印出异常从而发现是在那里发生了泄漏<br />&lt;parameter&gt;<br />&lt;name&gt;logAbandoned&lt;/name&gt;<br />&lt;value&gt;true&lt;/value&gt;<br />&lt;/parameter&gt;<br /><br />比如：<a style="color: blue; margin-left: -2em;" xmlns="http://www.w3.org/1999/xhtml">&lt;<span style="color: rgb(153, 0, 0);">Resource</span> <span style="color: rgb(153, 0, 0);">logAbandoned</span>="<span style="color: black; font-weight: bold;">true</span>" <span style="color: rgb(153, 0, 0);">removeAbandonedTimeout</span>="<span style="color: black; font-weight: bold;">60</span>" <span style="color: rgb(153, 0, 0);">removeAbandoned</span>="<span style="color: black; font-weight: bold;">true</span>"</a><br /></div> 
<img src ="http://www.blogjava.net/xfcoding/aggbug/393879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfcoding/" target="_blank">勤劳的小熊猫</a> 2013-01-06 17:04 <a href="http://www.blogjava.net/xfcoding/articles/393879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>window控制台操作数据库</title><link>http://www.blogjava.net/xfcoding/articles/243054.html</link><dc:creator>勤劳的小熊猫</dc:creator><author>勤劳的小熊猫</author><pubDate>Thu, 27 Nov 2008 10:17:00 GMT</pubDate><guid>http://www.blogjava.net/xfcoding/articles/243054.html</guid><wfw:comment>http://www.blogjava.net/xfcoding/comments/243054.html</wfw:comment><comments>http://www.blogjava.net/xfcoding/articles/243054.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xfcoding/comments/commentRss/243054.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfcoding/services/trackbacks/243054.html</trackback:ping><description><![CDATA[cmd<br />
1，操作远程数据库<br />
先找到mysql安装地方 进入bin目录<br />
mysql -h192.168.1.245 -u用户名 -p回车<br />
输入密码<br />
&nbsp; 成功进入<br />
show databases; 查看所有库名<br />
use 库<br />
show tables; 查看某库下面的所有表<br />
<br />
2,把查询结果导出到window文件<br />
tee e:/xiangrong.txt;<br />
select * from 表 ;<br />
这样结果就导入了本地e盘的xiangrong.txt中了<br />
<br />
3,操作本地数据库<br />
cmd<br />
直接mysql -uesknet -p回车<br />
其它都差不多<br />
<br />
4 导入数据库<br />
cmd<br />
mysql -uroot -proot 库名 &lt;D:/db/dbbackdb_admin20081024<br />
<img src ="http://www.blogjava.net/xfcoding/aggbug/243054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfcoding/" target="_blank">勤劳的小熊猫</a> 2008-11-27 18:17 <a href="http://www.blogjava.net/xfcoding/articles/243054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate里面碰到的一个小问题，怕以后忘了，提一下！</title><link>http://www.blogjava.net/xfcoding/archive/2008/11/27/243052.html</link><dc:creator>勤劳的小熊猫</dc:creator><author>勤劳的小熊猫</author><pubDate>Thu, 27 Nov 2008 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/xfcoding/archive/2008/11/27/243052.html</guid><wfw:comment>http://www.blogjava.net/xfcoding/comments/243052.html</wfw:comment><comments>http://www.blogjava.net/xfcoding/archive/2008/11/27/243052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfcoding/comments/commentRss/243052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfcoding/services/trackbacks/243052.html</trackback:ping><description><![CDATA[&nbsp; 数据库里面的表有主外键的约束的时候，如果是我们自己写pojo.hbm.xml的配置文件的时候，我们自然会根据POJO里面外键ID的类型把引用外键的ID配置文件写好，是String 就是配String 。这样的话，我们插值的时候就直接先获取主表里面的对象，拿到ID 赋值给从表的引用字段。&nbsp; 如果是用eclipse工具hibernate自动生成的pojo.hbm.xml的配置文件，eclpse就会把外键的类型在pojo.hbm.xml里面用主表对象来表示，而不是字段类型（String），这样的话，我们更加方便，直接获取主表的对象，给从表对象赋值一个主表对象就OK了，配置文件会主动找到里面引用的ID外键约束的！！<br />
<img src ="http://www.blogjava.net/xfcoding/aggbug/243052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfcoding/" target="_blank">勤劳的小熊猫</a> 2008-11-27 18:12 <a href="http://www.blogjava.net/xfcoding/archive/2008/11/27/243052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>验证码</title><link>http://www.blogjava.net/xfcoding/archive/2008/11/27/242960.html</link><dc:creator>勤劳的小熊猫</dc:creator><author>勤劳的小熊猫</author><pubDate>Thu, 27 Nov 2008 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/xfcoding/archive/2008/11/27/242960.html</guid><wfw:comment>http://www.blogjava.net/xfcoding/comments/242960.html</wfw:comment><comments>http://www.blogjava.net/xfcoding/archive/2008/11/27/242960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfcoding/comments/commentRss/242960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfcoding/services/trackbacks/242960.html</trackback:ping><description><![CDATA[&nbsp;文件里面上传了验证码的 round.jsp文件的压缩包，利用图片做验证码的显示 。提交前先用异步请求判断验证码是否正确 ，ajax提交的时候xmlHttp.open("get",url,false);里面要写false 就是异步请求返回的验证码不对的时候不会提交表单。然后photo.src ="&lt;%=request.getContextPath()%&gt;/cslog/round.jsp?"+Math.random();&nbsp; 重新指向round.jsp文件，就直接刷新验证码。Math.random()是保证每次的验证码不会跟上一次相同，因为在JS里面，如果有一相同的字符的话，就不会提交。保证验证码的正确性 。<br />
<img src ="http://www.blogjava.net/xfcoding/aggbug/242960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfcoding/" target="_blank">勤劳的小熊猫</a> 2008-11-27 11:25 <a href="http://www.blogjava.net/xfcoding/archive/2008/11/27/242960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;%@ page isELIgnored = "false"%&gt;</title><link>http://www.blogjava.net/xfcoding/archive/2008/11/27/242954.html</link><dc:creator>勤劳的小熊猫</dc:creator><author>勤劳的小熊猫</author><pubDate>Thu, 27 Nov 2008 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/xfcoding/archive/2008/11/27/242954.html</guid><wfw:comment>http://www.blogjava.net/xfcoding/comments/242954.html</wfw:comment><comments>http://www.blogjava.net/xfcoding/archive/2008/11/27/242954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfcoding/comments/commentRss/242954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfcoding/services/trackbacks/242954.html</trackback:ping><description><![CDATA[在页面采用JSTL标签,始终不能将表单的数据在条件判断中,做出正确的判断.debug 过程中,发现表单的hidden数据是有的,且是正确的,可是,在JSTL中,却不能正确表达.<br />
<br />
经过资料的搜索,发现在页面中,要加上下面这句话,测试后,发现JSTL能够正确的工作.
<p><strong><em><u><font color="#ff0000">&lt;%@ page isELIgnored = "false"%&gt;</font></u></em></strong></p>
<p>另外,如果把这句话,改成<strong><em><u><font color="#ff0000">&lt;%@ page isELIgnored = "true"%&gt;,同样,也不能正确工作.</font></u></em></strong></p>
<br />
<img src ="http://www.blogjava.net/xfcoding/aggbug/242954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfcoding/" target="_blank">勤劳的小熊猫</a> 2008-11-27 11:18 <a href="http://www.blogjava.net/xfcoding/archive/2008/11/27/242954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>