Log4j的学习--什么是Log4j

来源:互联网 发布:公寓租房软件 编辑:程序博客网 时间:2024/04/30 18:37
1、什么是Log4j

Log4j ApacheJava提供的日志管理工具。他与System.out.println()的作用相似,用来跟踪、调试、维护程序。

为了你快速理解Log4j的作用,我们用下面的代码说明Log4j的作用。

在没有这个插件以前,我们为了调试程序,总是需要在程序使用System.out.println()来输出一些信息。例如下面的代码:

              // 获取UserServiceUserService userService = UserServiceFactory.getUserService();if(userService == null) {System.out.println("错误:userService没有获取到!");return;}// 获取要查询的User对象idString uid = request.getParameter("uid");int id;try {id = Integer.parseInt(uid);} catch(NumberFormatException e) {System.out.println("错误:无法将uid转换成int类型!");throw e;}// 查询UserUser user = userService.load(id);System.out.println("信息:已查询到User对象");user.setPassword("zhangSan");System.out.println("信息:修改user的密码");userService.save(user);System.out.println("信息:保存user信息");

   上面例子中所有的输出语句都是用来调试程序的,相信你的代码中也经常会出现这样的调试代码吧?这些调试代码必须在项目完成后删除。你想一想,一行一行的删除会不会忘记几行没有删除呢?

   使用Log4j来打印这些测试代码,然后通过配置文件就能统一管理这些日志信息了!我们可以在配置文件中关闭所有日志,也可以在配置文件中打开所有日志,也可以打开某个级别的日志。甚至还可以管理日志出现的格式(是否加上日期和时间),以及日志输出的目标(是否为控制台,是否为文件)。

2、Log4j核心概念

Log4j中有三大组件:日志器(Logger)、日志输出目标(Appender)、格式化器(Layout

1、Logger:用来输出日志消息的类,它可以输出不同级别的消息,例如错误消息、警告消息等;

2、Appender;通常我们希望日志输出到文件中,以及控制台,也可能希望日志输出数据库,该类就表示一个输出的目标;

3、Layout:对输出的消息进行格式化,例如在消息中添加日期,以及级别等。

3、日志级别

Log4j中日志消息分为五个级别,级别由高到低排列如下:

 FATAL:重大错误,例如系统崩溃;

 ERROR:错误,例如某模块瘫痪;

 WARN:警告,程序的隐患,如果不处理,将来可能就是错误;

 INFO:信息,可以用来查看程序执行的流程;

 DEBUG:调试,用来调试程序的bug

我们可以使用日志器输出这五种不同的日志,然后通过设置日志器的级别来控制输出的结果。来看下面的代码:

@Testpublic void test() {log.setLevel(Level.ERROR)//设置日志级别为ERRORlog.debug("hello log4j debug!");log.info("hello log4j info!");log.warn("hello log4j warn!");log.error("hello log4j! error");log.fatal("hello log4j fatal!");   //输出成功       }

上面代码中,只有error()fatal()两个方法的输出会完成,其他级别的输出都不会完成。因为设置日志器的级别为Level.ERROR后,只有高于ERROR级别的日志才能输出。

2、日志器名称

  在创建日志器时,需要给日志器指定一个名称:Logger log = Logger.getLogger(“hello”);

         日志器的名称不只是一个名称而已,日志器的名称说明了日志器之间的父子关系。子日志器会继承父日志器的AppenderLevel

日志器的父子关系是通过日志器的名称来决定的,例如名称为com.chj的日志器是com.chj.logger的日志器的爸爸。com.chj.logger会继承com.chjAppender以及Level


 

    @Testpublic void fun() {Logger log = Logger.getLogger("com.luowg");Appender appender = new ConsoleAppender(new SimpleLayout());log.addAppender(appender);log.setLevel(Level.ERROR);//创建名称为cn.chj的日志器         Logger log1 = Logger.getLogger("com.chj.logger");//创建名称为cn.chj.lgger的日志器,它继承名为cn.itcast的格式化器log1.debug("看不见!");}


通常我们创建日志器都是使用当前类的名称来创建:

Logger log = Logger.getLogger(Demo.class.getName());

这样我们可以通过配置父日志器来改变日志器的AppenderLevel



2 1