java日志框架系列(3):logback框架配置详解

1.Logback配置

1.配置步骤及默认配置

logback便可以经过编程式配置,也能够经过xml的形式配置。web

logback配置步骤:spring

1. 尝试在 classpath 下查找文件 logback-test.xml;
2. 若是文件不存在,则查找文件 logback.xml;
3. 若是两个文件都不存在,logback 用 BasicConfigurator 自动对本身进行配置(默认配置),这会致使记录输出到控制台。
 
注意:当配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator , 创 建一 个 最小 化配 置 。 最 小化 配置 由 一个 关联 到 根 logger 的ConsoleAppender 组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}- %msg%n 的 PatternLayoutEncoder 进行格式化。还有,根 logger 默认级别是 DEBUG。

2.xml文件进行配置

 在此经过xml文件建立一个上一小节中最小化配置,并将xml文件放到classpath中,代码以下:编程

<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>
  <root level="debug">
    <appender-ref ref="STDOUT" />   </root> </configuration>

3.自动打印警告和错误消息

 

 

示例:打印logback的内部信息状态浏览器

 1 package logback;  2 import org.slf4j.Logger;  3 import org.slf4j.LoggerFactory;  4 import ch.qos.logback.classic.LoggerContext;  5 import ch.qos.logback.core.util.StatusPrinter;  6 public class Demo2 {  7     private static Logger logger=LoggerFactory.getLogger(Demo2.class);  8     public static void main(String[] args) {  9         // TODO Auto-generated method stub 10         //得到logback的logger上下文
11         LoggerContext context=(LoggerContext) LoggerFactory.getILoggerFactory(); 12         //打印内部的日志:context找配置文件的过程,以及最终的配置
13  StatusPrinter.print(context); 14         logger.info("enter application."); 15         //Foo foo=new Foo(); 16         //foo.doIt();
17         logger.info("exit application."); 18  } 19 }

若是一切顺利的话,控制台会输出如下内容:app

14:17:33,156 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 14:17:33,157 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 14:17:33,157 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/E:/code/myeclipse_workspace/spring_heima_video/logback/bin/logback.xml] 14:17:33,237 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 14:17:33,237 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 14:17:33,246 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT] 14:17:33,252 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 14:17:33,310 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG 14:17:33,310 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT] 14:17:33,311 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration. 14:17:33,312 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@198e2867 - Registering current configuration as safe fallback point 14:17:33.318 [main] INFO  logback.Demo2 -enter application. 14:17:33.321 [main] INFO  logback.Demo2 -exit application.

总结一下:在代码中能够经过ch.qos.logback.core.util.StatusPrinter对象方便的得到logback框架内部的状态。在配置文件中一样能够达到得到logback框架内部状态的这种效果,方法是设置configuration标签的debug属性为true;请注意debug属性只与状态数据有关,它不影响logback的配置,更不会影响记录级别框架

注意eclipse

把 configuration 元素的 debug 属性设为 true 后,会输出状态信息,可是 前提是:
1. 找到了配置文件;
2. 配置文件是格式化良好的 XML。
若是其中任一条件未知足,Joran 就会由于配置文件不可读而没法读取 debug 属性。若是找到了配置文件,但却不是格式化良好的,那么 logback 会检测出错误并把内部状态打印到控制台。然而,若是找不到配置文件,因为这不是个严重的错误,logback 不会自动打印状态数据。

 4.配置文件修改后自动从新加载

若是设置成自动从新加载,logback-classic 会扫描配置文件里的变化,而且当发生变化后进行从新配置。设置 方法是设 configuration 元素的 scan 属性为 true

注意:内部实现是这样的,当设置扫描属性为 true 时,会安装一个叫 ReconfigureOnChangeFilter的 TurboFilter。每次调用 logger 的打印方法时,都会进行扫描。ide

好比,当名为 myLogger 的logger 执行“myLogger.debug("hello");”时,若是scan属性为true,则ReconfigureOnChangeFilter会被调用。并且,即便 myLogger 的 debug 级别被禁用了,仍然会调用上述过滤器。url

 5.直接调用JoranConfigurator

Logback 依赖 Joran, Joran 是 logback-core 的一部分,是个配置类库Logback 的默认配置机制是调用JoranConfigurator 对classpath上的默认配置文件进行处理。无论出于什么理由,若是你想从新实现 logback 的默认配置机制的话,你能够直接调用 JoranConfigurator。

6.查看状态消息

Logback 把内部数据放在一个 StatusManager 对象里,并经过 LoggerContext 访问
StatusManager 经过 logback 上下文来访问全部数据对象。为把内存占用保持在合理的范围内,默认的 StatusManager 实现将状态消息按头和尾两部分存储。头部存储开始的 H 条状态消息,尾部存储后面的 T 条消息。如今的 H=T=150,未来或许会改变。

 

 要想在web程序中实现上述功能,能够在WEB-INF/web.xml中添加以下内容:spa

<servlet>
    <servlet-name>ViewStatusMessages</servlet-name> 
  <servlet-class>ch.qos.logback.classic.ViewStatusMessagesServlet</servlet-class> </servlet>
<servlet-mapping>
  <servlet-name>ViewStatusMessages</servlet-name>
  <url-pattern>/lbClassicStatus</url-pattern> </servlet-mapping>

经过浏览器查看表格形式的logback内部状态信息的网址为:http://host/yourWebapp/lbClassicStatus。

7.监听状态消息

你也 能够为 StatusManager 附加一个 StatusListener,这样就能当即对状态消息做出响应,尤为对那些 logback 配置完成以后的消息。 注册一个状态监听器能够方便地实现对 logback内部状态的无人监管
 
logback有一个名称为 OnConsoleStatusListenerStatusListener接口实现,能够把状态消息打印到控制台。

1.为StatusManager注册StatusListener监听器

 
实例1:演示如何为StatusManager注册一个OnConsoleStatusListener实例。
注意:注册了的状态监听器只会接收被注册以后的状态消息,不会接收注册以前的消息。

2.xml方式注册状态监听器

<configuration> 
  <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />   ... the rest of the configuration file </configuration>

经过xml配置文件注册状态监听器,方法是在configuration标签中添加子标签statusListener,并指定实现类。

相关文章
相关标签/搜索