??xml version="1.0" encoding="utf-8" standalone="yes"?> import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class Log4j { static Logger logger = Logger.getLogger(Log4j .class); public static void main(String args[]) { PropertyConfigurator.configure("log4j.properties"); logger.debug("DEBUG"); } } 手工重新 configure一下: org.apache.log4j.LogManager.resetConfiguration(); org.apache.log4j.PropertyConfigurator.configure("c:/yourlog4j.properties"); 或?/p>
org.apache.log4j.xml.DOMConfigurator.configure("c:/yourlog4j.xml"); 此类 XML 处理技术中最行的莫q于DOM4J 了,DOM4J 是一个非帔R怼U的Java XML APIQ具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的Y件。如今你可以看到来多?Java 软g都在使用 DOM4J 来读?XMLQ特别值得一提的是连 Sun ?JAXM 也在?DOM4J 使用 XML API 解析是略昄琐的Q受 ORMapping 技术的启发Qh们发明了 OXMapping 技术,使用 OXMapping 技术,我们可以?XML 文g映射成一?JavaBean 对象Q也可以把一?JavaBean 对象保存成一?XML 文gQ这大大化了我们的开发工作量Q得开发h员能更多的关注应用层面的东西? 开源世界中涌现出很?OXMapping 框架Q包?XStream ?Digester ?Castor {?其中Digester ?#8220;开源名?#8221; Apache 下的子项目,|上可以参考的资料很多?/span>
1.首先查找org.apache.commons.logging.Log属性,该属性可以在java代码中设|,更常见的是在classpath下的common-logging.properties文g中进行设|?
2.在系l属性中查找org.apache.commons.logging.Log
3.如果c\径中有log4j的jar包,则采用log4j实现
4.如果jdk版本?.4Q采用Jdk14Logger
5.采用common-logging提供的SimpleLog
所以只要在classpath中加入Log4j的jarQCommons-logging 后台使用的还是Log4j作ؓ日志实现cR单独用Log4j的时候需要初始化Q?br />
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
class TestLog{
public static Log log = LogFactory.getLog(TestLog.class);
public static void testLog(){
log.debug("test Commons-logging + Log4j");
}
}
只要classpath有Log4j的jarQ其实就是用Log4j作ؓ实现c,但是要注意的?font face="Times New Roman">log4j.properties一定要在classpath中,之前一直不知道E序是如何去扑ֈlog4j.properties的,后来才发现是通过classpathL的,如果classpath中没有具体配|,是到当前类所在目录下L找(不包括包文g夹)?br />
log4j.properties介:
log4j.rootCategory=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
说明:
①log4j.rootCategory = [ level ] , appenderName, appenderName,
其中,level 是日志记录的优先U?分ؓOFF,FATAL,ERROR,WA R N,INFO,DEBUG,
ALL或者您定义的?Log4j只用四个?优先U从高到低分别是ERROR,
WA R N,INFO,DEBUG.通过在这里定义的U别,您可以控制到应用E序中相应别的?nbsp;
志信息的开?比如在这里定义了INFOU别,则应用程序中所有DEBUGU别的日志信?nbsp;
不被打印出?appenderName是指定日志信息输出到哪个地?您可以同时指定多?nbsp;
输出目的?
②配|日志信息输出目的地Appender,其语法ؓ
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下几U?
org.apache.log4j.ConsoleAppender(控制?,
org.apache.log4j.FileAppender(文g),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文?,
org.apache.log4j.RollingFileAppender(文g大小到达指定寸的时候生一个新的文?,
org.apache.log4j.WriterAppender(日志信息以格式发送到L指定的地?
③配|日志信息的格式(布局),其语法ؓ:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以下几U?
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灉|地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的别和信息字符?,
org.apache.log4j.TTCCLayout(包含日志产生的时?U程,cd{等信息)
④Log4J采用cMC语言中的printf函数的打印格式格式化日志信息,打印参数如下:
%m 输出代码中指定的消息
%p 输出优先U?即DEBUG,INFO,WA R N,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫U数
%c 输出所属的cȝ,通常是所在类的全?nbsp;
%t 输出产生该日志事件的U程?nbsp;
%n 输出一个回车换行符,Windowsq_?\r\n",Unixq_?\n"
%d 输出日志旉点的日期或时?默认格式为ISO8601,也可以在其后指定格式,
比如:%d{yyy MMM dd HH:mm:ss,SSS},输出cM:2002q?0?8?nbsp;22:10:28,921
%l 输出日志事g的发生位|?包括cȝ?发生的线E?以及在代码中的行?
q里?点要说明的,
一是关于log4j.appender.R.File=example.log Q如果不l定l对路径的话Qlog文g的默认\径是user.dirQ可以通过System.getProperty("user.dir")来得到?br />
而是关于%5p [%t] (%F:%L) - %m%n 5代表优先U字W串占用几个位置Q?F代表文g名,%L代表行号?br />
使用xml来充当配|,没有ȝq,所以也不了解,但是在网上也看到q依赖jar包里的log4j配置自己应用的log4j.properties屏蔽掉的问题Q说是classpath中的jxls-core-0.9.5.jar中的log4j.xml,该配|优先于他的log4j.propertiesQ导致log4j.properties讄失效Q不q不太了解是什么原因,但是有hl出了解x案,
然后Q?/p>
]]>
XML API
OXMapping
]]>
开始以为用一个static 变量来保存这个List可以了Q还自我得意了一下,以ؓ改进很大。当时在意的是这个static变量会不会被垃圾回收Q后来上|查了很多才发现static变量是很JVM共存亡的。只要class被loadq入容器Q就会一直存在于容器?/font>
后来陈林一提醒才发现这有多么愚蠢,只要q个功能出现q发讉KQ那arnList成了随意修改了Q收׃ؕ套了.......后来又想了一个办法,Z个static的map用一个随机的32C为keyQ来作ؓ一ơ访问的唯一标识Q每ơsearchӞ。不q用map的话要注意内存的回收Q用完过后要把每ơ的映射删除Q不然内存就暴掉了?/font>
不过后来发现search功能是随旉可以做的Q根本就无法删除无用的映,q个Ҏ又流产了。最后无奈只好还是用原来的笨Ҏ把arnList hidden在页面上?/font>
觉得struts不能传递List实在是太挫了。只能用数组来@环List中的数据Q不知道其他的框架可不可以传递List?/font>
发现对java的了解还是太了Q一q多一炚wq也没有。哎?/font>