﻿<?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-Kino's Blog-随笔分类-读书笔记</title><link>http://www.blogjava.net/kinoviti/category/5124.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:12:11 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:12:11 GMT</pubDate><ttl>60</ttl><item><title>AJAX之工程感触</title><link>http://www.blogjava.net/kinoviti/archive/2006/01/27/29290.html</link><dc:creator>-=Kino=-</dc:creator><author>-=Kino=-</author><pubDate>Fri, 27 Jan 2006 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/kinoviti/archive/2006/01/27/29290.html</guid><wfw:comment>http://www.blogjava.net/kinoviti/comments/29290.html</wfw:comment><comments>http://www.blogjava.net/kinoviti/archive/2006/01/27/29290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kinoviti/comments/commentRss/29290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kinoviti/services/trackbacks/29290.html</trackback:ping><description><![CDATA[<P>恩，这个我觉得才是真正的 随笔吧。谈谈我的感触吧。<BR>AJAX&nbsp; Struts 这2大红大紫的技术都在强调 MVC（前者应该说是SPB），确实在理解上清晰了很多。但是在工作中，我认为 无论白猫、黑猫、抓住老鼠的就是好猫。（老板才不在乎你用的是什么，效率重要）为什么说这个，目的就一个：灵活变通。<BR><BR>在标准的概念和传统的例子里， AJAX传输的应该是XML（纯纯的数据对象），拿到Browser再通过JS解析、拼装，生成所需的真正对象。可JS毕竟离不开他的本质Script，性能就是瓶颈，把大量的数据放到客户端解析，本身就不好。<BR>在我上一个项目里，需要构建一颗web tree，能够动态更新。案有几个，最好的自然是js对象+onXX方法重载，传输纯Data，Browser解析、构建Tree，需要记住选中和展开方式。但是这时要有一定JS基础的。不然说起来容易，写起来就难了。这种代码，用JS实现在2k左右（行数），调试JS比吃蜡都头疼。我简化了一些功能，用1.5k实现了功能，但是还是调试太累。<BR><BR>我又选择了简单的另一种案，Tree显示Module直接就在Server构建好，传输的XML其实是Tree显示模型，具体一点来说比 案1 的数据多了2个 属性： iIndent(缩紧int)，iOrder（展开节点）。这2个属性和起来正好是 深度优先的构建顺序。那么在客户端，我放弃了复杂的对象化，直接用js解析xml，生成html代码。和案1相比功能一样，但是代码量降低到 700L。<BR><BR>总结一下吧，说得这么乱。那就是 因地制宜吧。如果你是学习结构那么SPB MVC绝对是好事情，如果是公司应用，时间要求的紧紧地，那么放弃这些 框框，怎么方便怎么来，毕竟科学是要转化为生产力才有用嘛。<BR><BR>敬请各位讨论。</P><img src ="http://www.blogjava.net/kinoviti/aggbug/29290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kinoviti/" target="_blank">-=Kino=-</a> 2006-01-27 10:14 <a href="http://www.blogjava.net/kinoviti/archive/2006/01/27/29290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Log4j 简单配置</title><link>http://www.blogjava.net/kinoviti/archive/2006/01/26/29267.html</link><dc:creator>-=Kino=-</dc:creator><author>-=Kino=-</author><pubDate>Thu, 26 Jan 2006 10:09:00 GMT</pubDate><guid>http://www.blogjava.net/kinoviti/archive/2006/01/26/29267.html</guid><wfw:comment>http://www.blogjava.net/kinoviti/comments/29267.html</wfw:comment><comments>http://www.blogjava.net/kinoviti/archive/2006/01/26/29267.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/kinoviti/comments/commentRss/29267.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kinoviti/services/trackbacks/29267.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>Log4j 简单配置</SPAN><SPAN style="FONT-FAMILY: 宋体"></SPAN><SPAN lang=EN-US><BR>***************************************<BR></SPAN><SPAN style="FONT-FAMILY: 宋体">关键字：</SPAN><SPAN lang=EN-US>Log4j<BR></SPAN><SPAN style="FONT-FAMILY: 宋体">难易度：简单</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体">软件版本：apache-log4j-1.2.9</SPAN><SPAN lang=EN-US><BR>时间：2006-01-26<BR>Author：Kino<BR>***************************************<BR><BR>呵呵 快过年了。眼看身边的朋友一个一个离开，踏上归途，心里不免有些淡淡的忧伤。为了消磨时间，写写文章也和久违的大家聊聊。<BR><BR>这里先祝愿各位朋友新春快乐。在狗年旺、旺、旺旺旺。 <BR><BR>切入正题吧。大名鼎鼎的Log4j我也理解得不深，这里采用假设的问答方式介绍吧。<BR>Q：Log4j是个什么东西？<BR>A：Log4j应该叫做 Log for java吧，是ApacheGroup旗下的明星项目，已经应用在很多方面了。同类的还有针对c c++等的log4c log4XXX之类。请自己看链接：<BR><BR>Q：Log4j到底是怎么被应用得？<BR>A：这就要从结构上说了，首先我们应用的并不是Log4j而是Jakarta-Commons-logging，但是这只是一个interface包没有具体的实现（其实是有的，叫做SampleLog弱但是快）。所以在大火的source里你只需要面向Logging编程而无须关心到底是如何生成的。因为Logging项目支持很多实现并不一定是Log4j。还有JDK的Log也行啊。那我们要做的就是&nbsp; 配置 Log4j到系统就好了。<BR><BR>Q：Log4j到底要配置什么东西，才能被系统识别？<BR>A：2个：Jar包&nbsp; 和&nbsp; log4j配置文件。 Jar我就不说了。现在来说Log4j配置文件。这个文件可以随意命名，默认的文件是 log4j.properties 。放在你的src根目录下就好。比如 你的source的catagory是com.yourcompany.xx那么放在和com并列的目录下就好。<BR><BR>Q：如果我不想用默认的log4j.properties 我应该怎么定义，怎么做？<BR>A：那就使用下边的命令定义：<BR>System.setProperty("");&nbsp; -_-! 具体内容想不起来了，留言中补充吧。<BR>如果你是Struts工程或者Web工程，需要做一个sevlet把这段代码载入。重载ActionServlet的init方法就好。<BR><BR>Q：这个文件如何定义？<BR>A：如下例。（具体的可以查阅JavaDoc）<BR>### direct log messages to console ###<BR>log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender<BR>log4j.appender.CONSOLE.Target=System.out<BR>log4j.appender.CONSOLE.Threshold=INFO<BR>log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout<BR>log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss:SSS} %-5p %m (%F:%L) [%t]%n<BR></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>### direct messages to file gm_web.log ###<BR>log4j.appender.FILE=org.apache.log4j.RollingFileAppender<BR>log4j.appender.FILE.File=../logs/gm_web.log<BR>log4j.appender.FILE.MaxFileSize=1000KB<BR>log4j.appender.FILE.MaxBackupIndex=5<BR>log4j.appender.FILE.Append=true<BR>log4j.appender.FILE.Threshold=DEBUG<BR>log4j.appender.FILE.layout=org.apache.log4j.PatternLayout<BR>log4j.appender.FILE.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss:SSS} %-5p %m (%F:%L) [%t]%n<BR></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US># Set root category priority to INFO and its only appender to CONSOLE.<BR>log4j.rootCategory=ERROR, CONSOLE, FILE<BR>log4j.logger.com.mycompany.ui=DEBUG, CONSOLE, FILE<BR><BR>XML格式的定义，我就不说了，资料满天都是。<BR><BR>Q：听说Log记录有继承关系，那么多Log，效率太低了吧<BR>A：有继承关系，对应的当然就有打破继承的定义，比如上例。<BR>log4j.rootCategory=ERROR, CONSOLE, FILE<BR>log4j.logger.com.mycompany.ui=DEBUG, CONSOLE, FILE<BR>com.mycompany.ui就继承了rootCategory的Log记录级别。但是如果像破除使用additivity<BR>log4j.additivity.com.mycompany.ui=false<BR>就KO了。<BR><BR>Q：log4j.appender.FILE.File=yourlogfile.log 到底给我把Log放哪去了？能改不？<BR>A：如果是Tomcat那就放到bin下边了。能改啊，bin就是基准目录，写相对路径就好咯。如上例。<BR><BR>Q：Log4j中ConversionPattern到底都是什么意思，都怎么用啊？<BR>A： 如下解释</P>
<OL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 1.5in; DIRECTION: ltr; unicode-bidi: embed" type=1>
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=1><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[c]/[C] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回用来决定</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> Class</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">名称</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">以及</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> package</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">路径（路径也可是部分的）</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=2><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[d] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回时间</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">可能有各种格式</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">format</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的时间。</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=3><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[F] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回发出记载</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Log</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">请求的文件得名字。</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=4><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[l] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回生成</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">log</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件的调用者的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Location Information</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=5><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[L] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回发出记载</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Log</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">请求的行数。</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=6><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[m] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回用户自己写的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> message</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=7><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[M] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回发出记载</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Log</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">请求的方法名称。</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=8><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[n] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">换行。（依据平台不同而不同）</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=9><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[p] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Log</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件的优先级。</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=10><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[r] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回从</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Application</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">开始到这条</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Log</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件产生之间的时间间隔。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">毫秒</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">)</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=11><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[t] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回生成</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Log</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件的线程名称。</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=12><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[x] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回与生成</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Log</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件的线程相关的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">NDC(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">内嵌特征内容</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">)</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=13><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[X] -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">返回与生成</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Log</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件的线程相关的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MDC(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">映射特征内容</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，要</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">KeyofMDC</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3" value=14><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">分隔符</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> -- </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">空格，可能在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">left </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">也可能在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> right</SPAN></LI></OL>
<P style="MARGIN-TOP: 0px; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; FONT-FAMILY: SimSun; mso-outline-level: 3"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><BR>Q：ConversionPattern参数能去哪里参考呢？<BR>A：JavaDoc&nbsp; PatternLayout 类。</P></SPAN>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><A href="http://logging.apache.org/log4j/docs/api-unstable/index.html">http://logging.apache.org/log4j/docs/api-unstable/index.html</A><BR><BR>Q：Log4j会不会太慢啊，性能如何？<BR>A：这个问题不好回答。反正记录一条Log大约的时间是20ms 到 400ms吧，根据你ConversionPattern需要记录的格式内容，以及package catagory的继承关系来决定。那么每个pattern到底哪个快哪个慢，哪个超级慢，请看<A href="http://logging.apache.org/log4j/docs/api-unstable/index.html">http://logging.apache.org/log4j/docs/api-unstable/index.html</A>。总归一句话，只要让log4j给你trace调用关系，反射class 就别指望能快，格谁都一样，是吧。<BR><BR><BR>Q：下班了没，啰嗦这么多，有问题再问你吧，留下联系信息<BR>A：刚下班，还吃了朋友的蛋糕(他本人正在飞机上，哈哈，吃了个独食)，回家咯。讨论问题的请留言或者<A href="mailto:kinoviti@gmail.com">kinoviti@gmail.com</A>&nbsp;&nbsp; QQ:23493713</SPAN></P><img src ="http://www.blogjava.net/kinoviti/aggbug/29267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kinoviti/" target="_blank">-=Kino=-</a> 2006-01-26 18:09 <a href="http://www.blogjava.net/kinoviti/archive/2006/01/26/29267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>