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节点
第一个配置
第二个配置
所以按照root节点下的形式打印日志,输出结果如下:
第三个配置
<logger name="logback.LogbackUtil" level="WARN" additivity="false" />标示LogbackUtil类打印日志,以appender的方式输出warn级别的日志,但是不向上级传递。所以只会打印一次,如果将additivity设置为true,那么就会将信息传递给上级,上级不打印任何日志信息,又会传递给root,root去打印。
false时的输出结果为:
为true时的输出结果为
注:编辑好logback后,将其放置于classpath下运行时即可自动加载,附一个本篇讲解的可用的logback.xml
首先介绍下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学习与使用(三)
- logback学习与配置使用
- LogBack学习记录(四)appender(输出源)的使用
- logback学习与配置使用
- logback学习与使用(四)
- SpringBoot学习:(二)使用logback进行日志记录
- SpringBoot学习:使用logback进行日志记录
- logback学习与使用(二)
- SpringBoot学习——使用logback配置日志
- 我学习使用java的一点体会(6)
- IssueVision 学习笔记(一)-----使用SoapHeader传递Web Serivices自定义的身份验证数据
- 通过一个简单的SWING日历BEAN开发学习Calendar类的使用(2)JCalendar源代码
- 2004.7.15 [C#学习记录]使用C#编写一个自定义控件
- [2004-8-4]VB.Net学习笔记,使用ADO.Net对象访问数据库,将结果写入ListView
- 我学习使用java的一点体会(3)
- 计算Java日期--学习怎样创建和使用日期
- ASP.NET StartKit 学习和使用的PPT
- 使用WinInet类的学习体会
- 学习在JSP中使用JavaBeans
- 我学习使用java的一点体会(2)