H__D  

通常我们在不同的环境使用不同的日志配置文件,本章讲指定logback的配置文件,如何使用logback参照【Log】logback的配置和使用(一)

官方配置参考:http://logback.qos.ch/manual/appenders.html

写一个配置加载类,注意JoranConfigurator这个导入的是ch.qos.logback.classic.joran.JoranConfigurator包下面的

 1 package com.test;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.util.Date;
 6 
 7 import org.slf4j.Logger;
 8 import org.slf4j.LoggerFactory;
 9 
10 import ch.qos.logback.classic.LoggerContext;
11 import ch.qos.logback.classic.joran.JoranConfigurator;
12 import ch.qos.logback.core.joran.spi.JoranException;
13 import ch.qos.logback.core.util.StatusPrinter;
14 
15 /**
16  * 
17  * @author H__D
18  *
19  */
20 public class LogBackConfigLoader {
21 
22     public static void main(String[] args) throws IOException, JoranException {
23         load("D:/logback.xml");
24 
25         Logger logger = LoggerFactory.getLogger(LogBackConfigLoader.class);
26 
27         logger.debug("现在的时间是 {}", new Date().toString());
28 
29         logger.info(" This time is {}", new Date().toString());
30 
31         logger.warn(" This time is {}", new Date().toString());
32 
33         logger.error(" This time is {}", new Date().toString());
34 
35         @SuppressWarnings("unused")
36         int n = 1 / 0;
37     }
38 
39     /**
40      * 加载外部的logback配置文件
41      * 
42      * @param externalConfigFileLocation
43      *            配置文件路径
44      * @throws IOException
45      * @throws JoranException
46      */
47     public static void load(String externalConfigFileLocation) throws IOException, JoranException {
48 
49         LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
50 
51         File externalConfigFile = new File(externalConfigFileLocation);
52 
53         if (!externalConfigFile.exists()) {
54 
55             throw new IOException("Logback External Config File Parameter does not reference a file that exists");
56 
57         } else {
58 
59             if (!externalConfigFile.isFile()) {
60                 throw new IOException("Logback External Config File Parameter exists, but does not reference a file");
61 
62             } else {
63 
64                 if (!externalConfigFile.canRead()) {
65                     throw new IOException("Logback External Config File exists and is a file, but cannot be read.");
66 
67                 } else {
68 
69                     JoranConfigurator configurator = new JoranConfigurator();
70                     configurator.setContext(lc);
71                     lc.reset();
72                     configurator.doConfigure(externalConfigFileLocation);
73 
74                     StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
75                 }
76 
77             }
78 
79         }
80 
81     }
82 }

D盘logback.xml文件如下:

  1 <?xml version="1.0" encoding="UTF-8" ?> 
  2 
  3 <!-- scan="true"    当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
  4 <!--  scanPeriod="30 seconds"   设置每30秒自动扫描,若没有指定具体单位则以milliseconds为标准(单位:milliseconds, seconds, minutes or hours)  -->
  5 <!-- debug="false"当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
  6 <configuration  scan="true" scanPeriod="30 seconds">
  7     <!-- 上下文名称  -->
  8     <contextName>test</contextName>
  9     
 10     <!-- 存放日志文件路径 -->
 11     <property name="Log_Home" value="D:/logs/test" />
 12     
 13     
 14     <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
 15     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 16         <encoder>
 17             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
 18             <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
 19         </encoder>
 20     </appender>
 21     
 22     <!-- DEBUG级别 -->
 23     <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
 24     
 25         <!-- 级别过滤器 -->
 26         <filter class="ch.qos.logback.classic.filter.LevelFilter">
 27             <!-- 设置过滤级别 -->
 28             <level>DEBUG</level>
 29             <!-- 用于配置符合过滤条件的操作 -->
 30             <onMatch>ACCEPT</onMatch>
 31             <!-- 用于配置不符合过滤条件的操作 -->
 32             <onMismatch>DENY</onMismatch>
 33         </filter>
 34         <Encoding>UTF-8</Encoding>
 35         <File>${Log_Home}/debug/debug.log</File>
 36         <!-- 根据时间来制定滚动策略 -->
 37         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 38             <FileNamePattern>
 39                 ${Log_Home}/debug/debug.%d{yyyy-MM-dd}.%i.log
 40             </FileNamePattern>
 41             <!-- 多久后自动清楚旧的日志文件,单位:由FileNamePattern决定,此时是日 -->
 42             <MaxHistory>7</MaxHistory>
 43             <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
 44                  <!-- 默认值是 10MB,文档最大值 -->
 45                 <MaxFileSize>2MB</MaxFileSize>
 46             </TimeBasedFileNamingAndTriggeringPolicy>
 47         </rollingPolicy>
 48         
 49         <encoder>
 50             <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
 51         </encoder>
 52     </appender>
 53 
 54     <!-- INFO级别 -->
 55     <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
 56     
 57         <!-- 级别过滤器 -->
 58         <filter class="ch.qos.logback.classic.filter.LevelFilter">
 59             <!-- 设置过滤级别 -->
 60             <level>INFO</level>
 61             <!-- 用于配置符合过滤条件的操作 -->
 62             <onMatch>ACCEPT</onMatch>
 63             <!-- 用于配置不符合过滤条件的操作 -->
 64             <onMismatch>DENY</onMismatch>
 65         </filter>
 66         <Encoding>UTF-8</Encoding>
 67         <File>${Log_Home}/info/info.log</File>
 68         <!-- 根据时间来制定滚动策略 -->
 69         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 70             <FileNamePattern>
 71                 ${Log_Home}/info/info.%d{yyyy-MM-dd}.%i.log
 72             </FileNamePattern>
 73             <!-- 多久后自动清楚旧的日志文件,单位:日 -->
 74             <MaxHistory>1</MaxHistory>
 75             <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
 76                  <!-- 默认值是 10MB,文档最大值 -->
 77                 <MaxFileSize>2MB</MaxFileSize>
 78             </TimeBasedFileNamingAndTriggeringPolicy>
 79         </rollingPolicy>
 80         
 81         <encoder>
 82             <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
 83         </encoder>
 84     </appender>
 85     
 86     
 87     <!-- WARN级别 -->
 88     <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
 89     
 90         <!-- 级别过滤器 -->
 91         <filter class="ch.qos.logback.classic.filter.LevelFilter">
 92             <!-- 设置过滤级别 -->
 93             <level>WARN</level>
 94             <!-- 用于配置符合过滤条件的操作 -->
 95             <onMatch>ACCEPT</onMatch>
 96             <!-- 用于配置不符合过滤条件的操作 -->
 97             <onMismatch>DENY</onMismatch>
 98         </filter>
 99         <Encoding>UTF-8</Encoding>
100         <File>${Log_Home}/warn/warn.log</File>
101         <!-- 根据时间来制定滚动策略 -->
102         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
103             <FileNamePattern>
104                 ${Log_Home}/warn/warn.%d{yyyy-MM-dd}.%i.log
105             </FileNamePattern>
106             <!-- 多久后自动清楚旧的日志文件,单位:月 -->
107             <MaxHistory>1</MaxHistory>
108             <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
109                  <!-- 默认值是 10MB,文档最大值 -->
110                 <MaxFileSize>2MB</MaxFileSize>
111             </TimeBasedFileNamingAndTriggeringPolicy>
112         </rollingPolicy>
113         
114         <encoder>
115             <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
116         </encoder>
117     </appender>
118     
119     <!-- ERROR级别 -->
120     <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
121     
122         <!-- 级别过滤器 -->
123         <filter class="ch.qos.logback.classic.filter.LevelFilter">
124             <!-- 设置过滤级别 -->
125             <level>ERROR</level>
126             <!-- 用于配置符合过滤条件的操作 -->
127             <onMatch>ACCEPT</onMatch>
128             <!-- 用于配置不符合过滤条件的操作 -->
129             <onMismatch>DENY</onMismatch>
130         </filter>
131         <Encoding>UTF-8</Encoding>
132         <File>${Log_Home}/error/error.log</File>
133         <!-- 根据时间来制定滚动策略 -->
134         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
135             <FileNamePattern>
136                 ${Log_Home}/error/error.%d{yyyy-MM-dd}.%i.log
137             </FileNamePattern>
138             <!-- 多久后自动清楚旧的日志文件,单位:月 -->
139             <MaxHistory>1</MaxHistory>
140             <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
141                  <!-- 默认值是 10MB,文档最大值 -->
142                 <MaxFileSize>2MB</MaxFileSize>
143             </TimeBasedFileNamingAndTriggeringPolicy>
144         </rollingPolicy>
145         
146         <encoder>
147             <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
148         </encoder>
149     </appender>
150     
151     
152 
153     <!-- 控制java下面包的打印,没设置等级,将继承上级root的等级,可以指定包和类的打印级别,属性additivity="false",可以阻止打印日志信息传递,默认为true。-->
154     <logger name="com.test"/>
155 
156     <!-- 当前日志总级别为TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF -->
157     <!-- the level of the root level is set to DEBUG by default.       -->
158     <root level="DEBUG">
159         <appender-ref ref="STDOUT" />
160         <appender-ref ref="FILE_DEBUG" />
161         <appender-ref ref="FILE_INFO" />
162         <appender-ref ref="FILE_WARN" />
163         <appender-ref ref="FILE_ERROR" />
164     </root>
165 </configuration>

注:appender相当于输出口,注意父子级的叠加输出

 

运行LogBackConfigLoader中的main方法,控制台输出如下:

1 2016-07-14 19:15:08 [main] DEBUG com.test.LogBackConfigLoader - 现在的时间是 Thu Jul 14 19:15:08 CST 2016
2 2016-07-14 19:15:08 [main] INFO  com.test.LogBackConfigLoader -  This time is Thu Jul 14 19:15:08 CST 2016
3 2016-07-14 19:15:08 [main] WARN  com.test.LogBackConfigLoader -  This time is Thu Jul 14 19:15:08 CST 2016
4 2016-07-14 19:15:08 [main] ERROR com.test.LogBackConfigLoader -  This time is Thu Jul 14 19:15:08 CST 2016
5 Exception in thread "main" java.lang.ArithmeticException: / by zero
6     at com.test.LogBackConfigLoader.main(LogBackConfigLoader.java:36)

外部输入日志如下:

 

posted on 2016-07-14 19:43  H__D  阅读(14124)  评论(1编辑  收藏  举报