通常我们在不同的环境使用不同的日志配置文件,本章讲指定logback的配置文件,如何使用logback参照【Log】logback的配置和使用(一)
写一个配置加载类,注意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 <!-- 多久后自动清楚旧的日志文件,单位:月 -->
42 <MaxHistory>1</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)
外部输入日志如下:

