详解Log4j
2015-10-07 13:02
330 查看
在做开发过程中,肯定会遇到各种问题,如果此时如果没有一个好的日志工具的话,那就是逆天了,遇到各种问题的时候,就像无头的苍蝇四处乱撞,没有头绪,因此如果有一个好的日志工具的话,我们就能立即锁定到问题的所在。及时把问题给解决掉,网上有很多好的日志工具http://www.open-open.com/29.htm,所有的工具都很好学习,只要找份官方说明书即可,也就是我们所说的API文档,小编就来介绍一下常用的Log4j的日志工具。
简单实例
新建立一个javaProject项目,引入log4j-1.2.17.jar即可,然后在classpath下面建立log4j.properties配置文件,其中内容如下
<span style="font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> ### \u8BBE\u7F6E### ## rootLogger ##log4j.rootLogger = debug,stdout,D,E log4j.logger.com.log=debug,stdout,D,E,F ### \u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u62AC ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### \u8F93\u51FADEBUG \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=E://logs/error.log ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = E://logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### \u8F93\u51FAERROR \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=E://logs/error.log ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =E\://logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n log4j.appender.F = org.apache.log4j.DailyRollingFileAppender log4j.appender.F.File = E\://logs/logHTML.html log4j.appender.F.Append = true log4j.appender.F.Threshold = DEBUG log4j.appender.F.layout = org.apache.log4j.HTMLLayout log4j.appender.F.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n </span></span>
然后新建测试类Test如下所示
<span style="font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">package com.test; import org.apache.log4j.Logger; /** * @FileName: Test.java * @Package: * @Description: TODO * @author: LUCKY * @date:2015年10月7日 上午10:19:31 * @version V1.0 */ /** * @ClassName: Test * @Description: TODO * @author: LUCKY * @date:2015年10月7日 上午10:19:31 */ public class Test { private static Logger logger = Logger.getLogger(Test.class); public static Test test=new Test(); /** * @param args */ public static void main(String[] args) { // System.out.println("This is println message."); // 记录debug级别的信息 /* logger.debug("This is debug message."); // 记录info级别的信息 logger.info("This is info message."); // 记录error级别的信息 logger.error("This is error message."); */ test.add(); } //jjjkkkkkk public void add(){ // System.out.println("This is println message."); // 记录debug级别的信息 try { logger.info(this.getClass().getName()+"This is info message."); /// jjjj // 记录error级别的信息 } catch (Exception e) { // TODO: handle exception logger.error(e); } logger.debug(this.getClass().getName()+"This is debug message."); // 记录info级别的信息 test.add(); } public void delete(){ try { test.update(); } catch (Exception e) { logger.debug(this.getClass().getName()+e.getMessage()); e.printStackTrace(); } } public void update() throws Exception { try { int i=5; int z=0; int f=i/z; } catch (Exception e) { throw e; } } } </span></span>
最后运行的时候,看看控制台是否输出东西,并且在上的配置文件中所配置的路径中,是不是有日志文件输出呢,所以通过一个简单的实例,来入门让大家能够对log4j有一个初步的认识。
有了一个初步的认识,下面来详细的介绍一下有关Log4j的配置内容
1、配置根Logger
其语法为: log4j.rootLogger = [ level ] , appenderName, appenderName2
level:日志的级别,指定这条日志信息的重要性。分为ALL < DEBUG < INFO < WARN < ERROR < FATAL。一般常用的为 DEBUG , INFO ,WARN ,ERROR四种,分别对应Logger类的四种方法
debug(Object message ) ;
info(Object message ) ;
warn(Object message ) ;
error(Object message ) ;
如果设置级别为INFO,则优先级大于等于INFO级别(如:INFO、WARN、ERROR)的日志信息将可以被输出,小于该级别的如:DEBUG将不会被输出
appenderName :就是指定日志信息输出目的地,比如(打印到控制台,输出到文件等)。同一条日志信息可以配置多个输出目的地。
2、配置log输出目的地
Log4j提供以下几种:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
3、log信息的格式
org.apache.log4j.HTMLLayout(HTML表格形式)
org.apache.log4j.SimpleLayout(简单格式的日志,只包括日志信息的级别和指定的信息字符串 ,如:DEBUG - Hello)
org.apache.log4j.TTCCLayout(日志的格式包括日志产生的时间、线程、类别等等信息)
org.apache.log4j.PatternLayout(灵活地自定义日志格式)
当使用org.apache.log4j.PatternLayout来自定义信息格式时,可以使用
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p -%m%n 来格式化信息
%c 输出所属类的全名,可写为 %c{Num} ,Num类名输出的范围 如:"com.sun.aaa.classB", %C{2}将使日志输出输出范围为:aaa.classB
%d 输出日志时间其格式为 可指定格式 如 %d{HH:mm:ss}等
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如info(“message”),输出message
%p 输出日志的优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该条日志信息所耗费的时间(毫秒数)
%t 输出产生该日志事件的线程名
更详细参数信息可参看类org.apache.log4j.PatternLayout的API doc文档
没了就这么多了,最终就是通过上面的配置文件进行配置,主要是用来以我们想要的格式,来输出想要的内容操作。最后简单总结下
Logger类:完成日志记录,设置日志信息级别
Appender类:决定日志去向,终端、DB、硬盘
Layout类:决定日志输出的样式,例如包含当前线程、行号、时间
更多的请参考http://swiftlet.net/archives/683
相关文章推荐
- cf C. Marina and Vasya (字符串处理_模拟吧)
- struts文件上传
- secureCRT上传下载文件
- Climbing Stairs | leetcode 70 【Java解题报告】
- HDOJ 题目4856 Tunnels(BFS+状态压缩,TSP)
- iOS网络编程学习
- 《Metasploit渗透测试魔鬼训练营》 之 文件包含
- Android基础小技术点:Android ListView设置背景图片及分割线、周边距
- 粒子系统属性Life,发射速率和总数的关系
- 粒子系统属性Life,发射速率和总数的关系
- 粒子系统属性Life,发射速率和总数的关系
- spring + mybatis 注解式事务不回滚的原因分析 @Transactional
- HDU - 3045 Picnic Cows(斜率优化)
- 学生成绩管理C实现
- HAProxy的简介
- XML,JSON数据结构解析
- Reverse Integer
- 博客停更和转移
- 数据存储之偏好设置
- 《Metasploit渗透测试魔鬼训练营》 之 命令注入