%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为" ",Unix平台为" "
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
Log4J的配置
log4j.rootCategory=debug, stdout, R
log4j.category.your.category.name=WARN
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
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
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
#FATAL 0
#ERROR 3
#WARN 4
#INFO 6
#DEBUG 7
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
import javax.servlet.http.*;
import org.apache.log4j.xml.DOMConfigurator;
* Description:Log4JServlet
* Copyright: Copyright (c) 2005
* Company: CVIC SE
* @author Jessica Tang
* Created at 2005-9-14
*/
public void init() throws ServletException {
String path = getServletContext().getRealPath("/");
System.out.println("Jessica:" + path);
String profile = path + getInitParameter("profile");//对应web.xml
DOMConfigurator.configure(profile);
}
}
Log4jServlet
com.cvicse.finance.ecrs.tools.Log4JServlet
profile
/WEB-INF/log4j.xml
1
Log4j 是使用的最广泛的logging框架之一。
我碰到的最多人问的问题就是:为什么用了Log4j之后,我的程序占用那么多的CPU?是不是Log4j的设计有问题啊?
这里我把Log4j常见的一些问题列出来,供大家参考:
1)Log4j告诉我说没有正确初始化,怎么办?
现象:
运行程序时出现
log4j: No appenders could be found for category (some.category.name).
log4j: Please initialize the log4j system properly.
原因:
Log4j的日志输出需要一个appender,appender的类型有stdout,file,database table,syslog等。
如果指定的Logger没有并且它所有的祖先也没有appender的话,那么就会出上面这个错误。
记住: log4j是没有缺省的target appender的。
解决方法:
最简单的就是所有Logger的祖先设置appender。
在程序运行目录下面创建一个文件:log4j.properties
内容为:
log4j.rootCategory=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.Patte
2)log4j优化
有多少人用Log4j的时候会在每一个Debug/Info之前加一个判断?
可能很多人都说了,这有什么关系,我在运行的时候是把Log Level设置成Error的。
那么请看下面这个代码:
String result;
...
...
...
logger.debug("result is" + result );
再看看这个代码:
String result;
...
...
...
if(logger.isDebugEnabled())
{
logger.debug("result is" + result );
}
把Log Level设置成ERROR,运行结果又区别吗?没有!!
程序的性能有区别吗?区别大了!!!
因为什么呢?
虽然第一段代码也不产生Log输出,但是debug()里面的字符串变量是实例化了,明白了吗?
这个就是为什么很多人抱怨Log4j占用很大CPU时间的原因了,尤其是在大循环的时候。
赶快在你的程序中加上这样的判断条件吧。
Log4j使用
相对路径:
InforWeb中配置例子:../deploy/jtzw/logs/JtzwApp.log
Tomcat中配置例子:../webapps/jtzw/logs/JtzwApp.log"
绝对路径很简单,指对路径即可。