logback学习与使用(一)

今天在整分布式系统的统一日志输出功能,发现storm0.9使用的日志输出形式是logback,虽然log4j和logback都提供了很强大的跨机日志输出形式,但是效率还是要慢上一些。自己写统一日志输出,首先研究一下logback的使用方法,其实log4j的使用也有待学习.

首先介绍下logback的配置。

<configuration>:有三个属性,分别是scan,scanPeriod,debug

scan:配置文件发生改变时,是否需要重新加载,默认是true

scanPeriod:设置监控配置文件改变的时间周期,没带单位时默认是毫秒,默认值是1分钟

debug:是否需要打印logback内部的信息,用以监控logback运行情况。默认是false

<configuration>下有三个重要的子节点,分别是<appender>,<logger>,<root>,下面先介绍一下其他的节点

<contextName>应用程序记录的名称

<property>设置上下文的变量,有name和value两个属性,name是变量的名称,value是变量的值,可以使用${}在其他地方被引用

<timestamp>设置当前时间变量,有key和datePattern两个属性,key是变量名称,datePattern是时间格式


<logger>:用来设置一个包或者是一个类的日志打印级别,以及制定appender,有三个属性,name,level,additivity

name:用来指定受此logger约束的包或者一个类

level:日志级别

addtivity:是否向上级logger输出打印信息

<logger>可包含0个或者多个<appender>,<appender-ref ref="" />,appender受这个logger约束


<root>:也是一个logger,但是是一个根,只有一个属性level,日志级别

也可包含0个或者多个<appender>


logback的配置可以不需要logger节点,但是必须要有root节点

package logback;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogbackUtil {
	public static void main(String[] args) {
		Logger logger = LoggerFactory.getLogger(LogbackUtil.class);
		logger.debug("I'm a debug");
		logger.info("I'm a info");
		logger.warn("I'm a warn");
		logger.error("I'm a error");
	}
}

第一个配置

<?xml version="1.0"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
	<appender name="A" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
      		<pattern>%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n</pattern>
    	</encoder>
	</appender>
	
	<root level="INFO">
		<appender-ref ref="A"/>
	</root>
</configuration>
将日志打印为INFO级别的,输出形式如下

2014-10-17 21:34:53 l.LogbackUtil [INFO] I'm a info
2014-10-17 21:34:53 l.LogbackUtil [WARN] I'm a warn
2014-10-17 21:34:53 l.LogbackUtil [ERROR] I'm a error

第二个配置

<?xml version="1.0"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
	<appender name="A" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
      		<pattern>%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n</pattern>
    	</encoder>
	</appender>
	
	<logger name="logback" />
	
	<root level="INFO">
		<appender-ref ref="A"/>
	</root>
</configuration>
appender表示打印到控制台,<logger name="logback" />表示logback包下的所有类的日志打印,但是并没有级别,继承root,INFO,没有addtivity,表示此logger将打印信息向上传递。没有appender-ref,此logger不打印任何日志信息。

所以按照root节点下的形式打印日志,输出结果如下:

2014-10-17 21:37:52 l.LogbackUtil [INFO] I'm a info
2014-10-17 21:37:52 l.LogbackUtil [WARN] I'm a warn
2014-10-17 21:37:52 l.LogbackUtil [ERROR] I'm a error

第三个配置

<?xml version="1.0"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
	<appender name="A" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
      		<pattern>%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n</pattern>
    	</encoder>
	</appender>
	
	<logger name="logback" />
	
	<logger name="logback.LogbackUtil" level="WARN" additivity="false">
		<appender-ref ref="A"/>
	</logger>
	
	<root level="ERROR">
		<appender-ref ref="A"/>
	</root>
</configuration>
<logger name="logback" />是指包logback下的所有类打印日志,但是没有appender,所有不打印任何日志信息。

<logger name="logback.LogbackUtil" level="WARN" additivity="false" />标示LogbackUtil类打印日志,以appender的方式输出warn级别的日志,但是不向上级传递。所以只会打印一次,如果将additivity设置为true,那么就会将信息传递给上级,上级不打印任何日志信息,又会传递给root,root去打印。

false时的输出结果为:

2014-10-17 21:54:42 l.LogbackUtil [WARN] I'm a warn
2014-10-17 21:54:42 l.LogbackUtil [ERROR] I'm a error

为true时的输出结果为

2014-10-17 21:55:19 l.LogbackUtil [WARN] I'm a warn
2014-10-17 21:55:19 l.LogbackUtil [WARN] I'm a warn
2014-10-17 21:55:19 l.LogbackUtil [ERROR] I'm a error
2014-10-17 21:55:19 l.LogbackUtil [ERROR] I'm a error

注:编辑好logback后,将其放置于classpath下运行时即可自动加载,附一个本篇讲解的可用的logback.xml

<?xml version="1.0"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
	<property name="log" value="MyApp" />
	<contextName>${log}</contextName>
	<timestamp key="time" datePattern="yyyyMMdd'T'HHmmss" />
	
	<appender name="A" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
      		<pattern>%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n</pattern>
    	</encoder>
	</appender>
	
	<logger name="logback" />
	
	<logger name="logback.LogbackUtil" level="WARN" additivity="true">
		<appender-ref ref="A"/>
	</logger>
	
	<root level="ERROR">
		<appender-ref ref="A"/>
	</root>
</configuration>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值