配置使用log4j-1.2.17
来源:互联网 发布:2017淘宝刷法爆款 编辑:程序博客网 时间:2024/06/16 23:37
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.appenderlog4j.appender.appenderName.option1 = value1log4j.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.layoutlog4j.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!");
- 配置使用log4j-1.2.17
- Log4j使用--简单配置
- Log4j使用基本配置
- Log4j 配置使用详解
- log4j配置使用
- log4j的配置使用
- Log4j配置使用
- Log4j使用 配置
- log4j配置 使用总结
- Log4j 配置使用详解
- log4j使用和配置
- log4j配置与使用
- 如何配置使用 Log4j
- Log4j配置及其使用
- Log4j 配置及使用
- 如何配置使用 Log4j
- log4j配置使用
- log4j配置和使用
- JSON.net的转换操作
- hdu 1019 Least Common Multiple
- 使用RadioButton和RadioGroup实现多种多样的单选情况
- 正则表达式查找
- Oracle学习笔记(4)------------简单查询
- 配置使用log4j-1.2.17
- delete运算符(删除对以前定义的对象的属性和方法的引用)
- 程序编译过程
- C++ 中dynamic_cast<>的使用方法
- Python自省(反射)指南
- 通过FutureTask来实现阻塞当前线程等待其他线程处理的结果
- Oracle学习笔记(5)-----------单行函数
- codevs 1227 方格取数 2(最小费用最大流)
- 矩阵操作