??xml version="1.0" encoding="utf-8" standalone="yes"?>
一?span lang=EN-US>Log4j概念Q?span lang=EN-US>
Log4j中有三个主要的组Ӟ它们分别?span lang=EN-US>Logger?span lang=EN-US>Appender?span lang=EN-US>LayoutQ?span lang=EN-US>Log4j 允许开发h员定义多?span lang=EN-US>LoggerQ每?span lang=EN-US>Logger拥有自己的名字,Logger之间通过名字来表明隶属关pR有一?span lang=EN-US>LoggerUCؓRootQ它永远 存在Q且不能通过名字索或引用Q可以通过Logger.getRootLogger()Ҏ获得Q其?span lang=EN-US>Logger通过 Logger.getLogger(String name)Ҏ?span lang=EN-US>
Appender则是用来指明所有的log信息存放C么地方,Log4j中支持多U?span lang=EN-US>appenderQ如 console?span lang=EN-US>files?span lang=EN-US>GUI components?span lang=EN-US>NT Event Loggers{,一?span lang=EN-US>Logger可以拥有多个AppenderQ也是你既可以?span lang=EN-US>Log信息输出到屏q,同时存储C个文件中?span lang=EN-US>
Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息?span lang=EN-US>
Log4j中将要输出的Log信息定义?span lang=EN-US>5U别,依次?span lang=EN-US>DEBUG?span lang=EN-US>INFO?span lang=EN-US>WARN?span lang=EN-US>ERROR?span lang=EN-US>FATALQ当输出Ӟ只有U别高过配置中规定的U别的信息才能真正的输出Q这样就很方便的来配|不同情况下要输出的内容Q而不需要更改代?span lang=EN-US>
二?span lang=EN-US>Log4j的配|文?span lang=EN-US>
Log4j提供?span lang=EN-US>appender有以下几U:
org.apache.log4j.ConsoleAppenderQ控制台Q?span lang=EN-US>
org.apache.log4j.FileAppenderQ文Ӟ
org.apache.log4j.DailyRollingFileAppenderQ每天生一个日志文Ӟ
org.apache.log4j.RollingFileAppenderQ文件大到达指定尺寸的时候生新文gQ?span lang=EN-US>
org.apache.log4j.WriterAppenderQ将日志信息以流格式发送到L指定的地方)
配置日志信息的格式(布局Q,其语法ؓQ?span lang=EN-US>
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
....
log4j.appender.appenderName.layout.option = valueN
Log4j提供?span lang=EN-US>layout有以下几U:
org.apache.log4j.HTMLLayoutQ以HTML表格形式布局Q,
org.apache.log4j.PatternLayoutQ可以灵zd指定布局模式Q,
org.apache.log4j.SimpleLayoutQ包含日志信息的U别和信息字W串Q,
org.apache.log4j.TTCCLayoutQ包含日志生的旉、线E、类别等{信息)
配置文g有两U格式分别是xml?span lang=EN-US>propertyQ我只学习了property格式
#root 格式log4j.rootLogger=[level,appenderName,appenderName....]Q可以有多个appender
log4j.rootLogger=INFO,A1,R
#A1输出方式为控制台Q?span lang=PT-BR>layout格式可以是自订的
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
#R1输出方式为文件大到?span lang=PT-BR>500KB的时候生新文gQ?span lang=PT-BR>layout格式可以是自订的
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=petstorlog4j.txt
log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
三、在WEB应用pȝ中注?span lang=EN-US>Log4jQ如果系l本w加?span lang=EN-US>spring׃需要这一步骤Q?span lang=EN-US>
创徏一个初始化log4j?span lang=EN-US>servlet如下创徏一个名?#8220;log4jInit”Qƈ?span lang=EN-US>initQ)Ҏ里添?span lang=EN-US>
public void init() {
String prefix = getServletContext().getRealPath("/");
//取得web.xml?span lang=EN-US>sevelt传递的参数props的|该参数指?span lang=EN-US>log4j.properties?span lang=EN-US>//件的路径
String file = getInitParameter("props");
// if the log4j-init-file is not set, then no point in trying
System.out.println("................log4j start");
if(file != null) {
PropertyConfigurator.configure(prefix+file);
}
}
?span lang=EN-US>WEB.xml里的配置如下
<servlet>
<servlet-name>log4jInit</servlet-name>
<servlet-class>com.petstor.servlet.log4jInit</servlet-class>
<init-param>
<param-name>props</param-name>
<param-value>log4j.properties</param-value>
</init-param>
<!?/span>在服务器启动是,加蝲?span lang=EN-US>servletQƈ且只加蝲一?span lang=EN-US>-->
<load-on-startup>1</load-on-startup>
</servlet>
四、在E序中?span lang=EN-US>Log4j
要在自己的类中?span lang=EN-US>Log4jQ首先声明一个静态变?span lang=EN-US>Logger logger=Logger.getLog("classname")Q在使用之前Q用PropertyConfigurator.configure ("配置文g")配置一下,现在可以用了Q用法如下:logger.debug("debug message")或?span lang=EN-US>logger.info("info message")Q看下面一个小例子Q?span lang=EN-US>
import com.foo.Bar;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class MyApp {
static Logger logger = Logger.getLogger(MyApp.class.getName());
public static void main(String[] args) {
// BasicConfigurator replaced with PropertyConfigurator.
PropertyConfigurator.configure(args[0]);
logger.info("Entering application.");
Bar bar = new Bar();
bar.doIt();
logger.info("Exiting application.");
}
}