您的位置:首页 > 其它

logback学习与使用(一)

2014-10-17 20:39 501 查看
今天在整分布式系统的统一日志输出功能,发现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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  logback xml log4j