Log4j的学习--什么是Log4j

1、什么是Log4j

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

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

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

              // 获取UserService
		UserService userService = UserServiceFactory.getUserService();
		if(userService == null) {
			System.out.println("错误:userService没有获取到!");
			return;
		}
		
		// 获取要查询的User对象id
		String uid = request.getParameter("uid");
		int id;
		try {
			id = Integer.parseInt(uid);
		} catch(NumberFormatException e) {
			System.out.println("错误:无法将uid转换成int类型!");
			throw e;
		}
		// 查询User
		User 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

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

@Test
public void test() {
		log.setLevel(Level.ERROR)//设置日志级别为ERROR
		log.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


 

    @Test
	public 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



  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值