1 下载log4j-1.2.17。
http://logging.apache.org/log4j/1.2/download.html
2 在WEB-INF下新建etc文件夹,创建Logger的属性配置文件。
2.1 rootCategory日志记录优先级
log4j.rootCategory = level, appenderName, appenderName,
level为日志记录的优先级:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。
通过在这里定义的级别可以控制应用程序中相应级别的日志信息的显示,例如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName是指日志信息输出到哪个地方,可以同时指定多个输出目的地。
2.2 appender输出目的地
log4j.appender.appenderName = fully.qualified.name.of.appender
log4j.appender.appenderName.option1 = value1
log4j.appender.appenderName.option = valueN
log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
2.3 layout日志信息格式(布局)
log4j.appender.appenderName.layout =fully.qualified.name.of.layout
log4j.appender.appenderName.layout.option1 = value1
log4j.appender.appenderName.layout.option = valueN
log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间,线程,类别等等信息)
2.4 日志打印格式
log4j.appender.A.layout.ConversionPattern
%m——输出代码中指定的消息
%p——输出优先级,即DEBUG、INFO、WARN、ERROR、FATAL
%r——输出自应用启动到输出该log信息耗费的毫秒数
%c——输出所属的类目,通常就是所在类的全名
%t——输出产生该日志事件的线程名
%n——输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"
%d——输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式
比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:
2015年7月21日 12:12:12,921
%l——输出日志事件的发生位置,包括类目名、发生的线程、以及在代码中的行数
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
log4j采用类似C语言中的printf函数的打印格式打印日志信息,例如:
[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n
可以在%与模式字符之间加上修饰符来控制最小宽度、最大宽度、对齐方式等,例如:
%20c:最小宽度是20,默认情况右对齐
%-20c:左对齐
%.30c:最大宽度是30,但小于30也不会有空格
%20.30c:小于20就补空格
2.5 ConsoleAppender(控制台)选项
Threshold=DEBUG(指定日志消息的输出最低层次)
ImmediateFlush=true(默认值是true,意谓着所有的消息都会被立即输出)
Target=System.err(默认情况下是:System.out,指定输出控制台)
2.6 FileAppender(文件)选项
Threshold=DEBUF(指定日志消息的输出最低层次)
ImmediateFlush=true(默认值是true,意谓着所有的消息都会被立即输出)
File=mylog.txt(指定消息输出到mylog.txt文件)
Append=false(默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容)
2.7 RollingFileAppender(回滚)选项
Threshold=DEBUG(指定日志消息的输出最低层次)
ImmediateFlush=true(默认值是true,意谓着所有的消息都会被立即输出)
File=mylog.txt(指定消息输出到mylog.txt文件)
Append=false(默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容)
MaxFileSize=100KB(后缀可以是KB,MB或者是GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件)
MaxBackupIndex=2(指定可以产生的滚动文件的最大数)
3 利用一个特殊的servlet来完成配置
public class Config {
public static String projectRootPath;
public static String log4jPropertiesPath;
public static Logger getLogger(Class<?> cls){
PropertyConfigurator.configure(Config.log4jPropertiesPath);
return Logger.getLogger(cls);
}
}
public class SetConfigServlet extends HttpServlet{
@Override
public void init() throws ServletException {
Config.projectRootPath = this.getServletContext().getRealPath("");
Config.log4jPropertiesPath = Config.projectRootPath+"/WEB-INF/etc/log4j.properties";
Logger logger = Config.getLogger(this.getClass());
logger.info("SetConfig success");
logger.info("projectRootPath : "+Config.projectRootPath);
logger.info("logPropertiesPath : "+Config.logPropertiesPath);
}
}
4 添加servlet到web.xml
<servlet>
<servlet-name>SetConfigServlet</servlet-name>
<servlet-class>com.config.SetConfigServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SetConfigServlet</servlet-name>
<url-pattern>/SetConfigServlet</url-pattern>
</servlet-mapping>
5 使用
在一个类中创建成员变量
private Logger logger = Config.getLogger(this.getClass());
示例使用logger.info
logger.info("this is logger.info!");