logback和slf4j的使用chapter3

一.logback启动的状态信息

1.默认情况下,是不会打印出logback启动时的状态信息,那么我们也不知道启动过程中有没有出错,如果想要显示logback的启动过程,使用下面两句话就可以了。

  LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
  // print logback's internal status
  StatusPrinter.print(lc);
就可以打印出logback启动时,状态信息。从状态信息中我们可以看到logback的启动过程:打印的 状态信息如下

17:44:58,578 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml]
17:44:58,671 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
17:44:58,671 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
17:44:58,687 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
17:44:58,812 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Popping appender named [STDOUT] from the object stack
17:44:58,812 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - root level set to DEBUG
17:44:58,812 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[root]

2.除了使用statusPrinter编程式的语句打印日志信息。你还可以配置logback的配置文件来记录logback的状态日志信息。甚至是错误信息。

修改你的配置文件:在 【configuration】标签中添加一个属性【debug】,他的值设置为【true】。如下代码:

	<configuration debug="true"> 

注意:这个debug属性仅仅关联logback的状态信息,他不会影响logback配置文件的其他信息。特别是logger的级别。


二、自动重载logback的配置文件(在修改之后):
	如果我们项目是一个WEB项目的话,tomcat启动了,如果你修改了logback的配置文件,总不想重启tomcat才让
logback的配置文件生效吧,那么tomcat中的数据就会丢失。其他项目也会停止。
	那就使用configuration标签中的scan属性,并且将他的值设置为true。这样的话,当logback配置文件修改之后
重新加载logback的配置文件
	例如:
<configuration scan="true"> 
  ... 
</configuration> 
	在默认的情况下,每一分钟对logback的配置文件进行扫描一次,看看有没有改变,当然你也可以修改这个扫描的间隔
时间。使用configuration标签下的scanPeriod属性。他的单位有以下几个:milliseconds, seconds, minutes or hours.
<configuration scan="true" scanPeriod="30 seconds" > 
  ...
</configuration> 
注意:如果没有指定时间的单位的话:他的默认单位是毫秒(milliseconds),但是通常这个单位是不合理的,所以如果你修
该了默认扫描的时间的话,那就给他加上一个单位。

三、logback配置文件的语法格式:
	1.logback允许你在不需要重新编译你的代码,重新定义日志行为。
	2.对于logback的配置文件过于灵活,所以没有一个特定的DTD或者XML Schema对logback配置文件进行控制。
	3.一个基本的logback配置文件的结构:
		1)配置文件的根元素为:configuration标签
		2)在configuration标签中包含:0个或多个的appender标签,0个或多个logger标签,和最多一个root标签。
	4.如图所示:
	

四、logger配置文件标签大小写问题
	1.对于明确规则而言:logback标签名称是不区分大小写的。例如<logger>,<Logger>和<LOGGER>都是合法的并且被视为是同一个标签。
	注意:对于XML文件的规则还是要遵守的,开始标签与结束标签要相同。
	2.对于模糊规则(不明确规则)而言:除了首字母不分区大小写以外,其他字母是区分大小写的。例如<encoder>和<Encoder>是相同的,
	但是与<LOgger>是不同的。
	it is not easy to tell when a tag is associated with an explicit action and when it is associated with an implicit action
	3.注意:logback配置文件没有说明:那些标签是明确规则,那些标签是模糊规则。

 
 
五、root元素标签:
	1.它只包含一个属性:名字是level,他与logger标签中的level的属性值是一样的,他的值有TRACE,DEBUG,INFO,WARN,ERROR,OFF
	ALL,7个值之一。是不区分大小写的。
	2.他不允许有除了level之外的其他属性。
	3.与logger标签类似,root标签可以包含0个或多个<appender-ref>标签.所有appender标签通过这个appender-ref与root或者logger相关联
	从而实现打印相应格式的日志信息。

六、appender元素标签:看:logback和slf4j的使用之appender使用

七、logger元素标签:看:logback和slf4j的使用之logger使用

八、看一些例子:
	1.假如你不想看到来自“chapters.configuration”包下的任何class的任何DEBUG信息。就进行如下设置。
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <logger name="chapters.configuration" level="INFO"/>

  <!-- Strictly speaking, the level attribute is not necessary since -->
  <!-- the level of the root level is set to DEBUG by default.       -->
  <root level="DEBUG">          
    <appender-ref ref="STDOUT" />
  </root>  
  
</configuration>
	注意:chapters.configuration包下的所有类中打印的关于debug信息都不会显示。而其他任何类都可以显示DEBUG信息
	2.如何你想让chapters.configuration包下的所有类都是INFO级别,但是让chapters.configuration.Foo为DEBUG模式。
<configuration>

  <appender name="STDOUT"
    class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>
        %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
     </pattern>
    </encoder>
  </appender>

  <logger name="chapters.configuration" level="INFO" />
  <logger name="chapters.configuration.Foo" level="DEBUG" />

  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>
看一下各个class的级别:
		
	3.注意:打印日志信息是依赖于logger对象有效level级别触发的,而不是依赖于接触appender的logger级别触发的。打印日志的
	appender最终是通过appender-refroot或者logger相关联的。如果没有用appender-ref的话,那么设置appender是没有用的。所以
	appender是要与一个root或者logger相接触的。
<configuration>

  <appender name="STDOUT"
   class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
     <pattern>
        %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
      </pattern>
    </encoder>
  </appender>

  <logger name="chapters.configuration" level="INFO" />

  <!-- turn OFF all logging (children can override) -->
  <root level="OFF">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>
	root元素不打印任何日志信息的。并且appender是与root相接触的。但是chapters.configuration包下的所有类的级别都是INFO级别。在
	chapters.configuration都可以打印INFO级别以上的信息。并且按照STDOUT的格式打印。即appender是不管级别,而直接继承的。
	因此并不是appender-ref与那个logger相关联,那个这个appender的级别就是关联logger级别模式。appender是没有级别的,只有logger
	才有级别,appender只是定义打印的方式,和样式。
	
 
 
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值