2017.7.27 logback配置文件

参考来自: Java深入 - logback的配置和使用

1 模块组成

logback分成三个模块:logback-core,logback- classic和logback-access。

1 logback-core:其他两个的基础模块。
2 logback-classic:log4j的改良版本。完整实现slf4j的api,因此可以很方便的换成其他日志系统。
3 logback-access:与servlet集成,提供通过http来访问日志的功能。

2 maven依赖

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>${logback-version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>{logback-version}</version>
        </dependency>    

3 配置文件

3.1 存放位置

logback的配置文件都放在/src/main/resource/文件夹下的logback.xml文件中,系统会自动找到这个配置文件。

也可以自定义配置文件的位置:

3.2  在控制台输出指定级别的日志

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <configuration>
 4     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
 5         <!-- 典型的日志pattern -->
 6         <encoder>
 7             <pattern>[AAS] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} - %msg%n</pattern>
 8         </encoder>
 9     </appender>
10     <root> 
11         <level value="error"/>  
12         <appender-ref ref="console"/>
13     </root>
14 </configuration>

3.3 在文件中存放指定级别的日志

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <configuration>
 3     <!-- 综合时间与大小的滚动策略,先按小时滚动,小时内的文件大于10mb时再按大小滚动 -->
 4     <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
 5         <file>/var/log/local/xinsight/aas/aas.log</file>
 6         <Encoding>UTF-8</Encoding>
 7         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 8             <fileNamePattern>/var/log/local/xinsight/aas/aas-%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern>
 9             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
10                 <maxFileSize>10MB</maxFileSize>
11             </timeBasedFileNamingAndTriggeringPolicy>
12         </rollingPolicy>
13 
14         <encoder>
15             <pattern>[AAS] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} - %msg%n</pattern>
16         </encoder>
17     </appender>
18 
19     <root>
20         <level value="WARN"/>
20 <level value="INFO"/> 21 <appender-ref ref="logFile" /> 22 </root> 23 </configuration>

3.4 精确设置每个包下面的日志

2     <logger name="com.service" level="WARN"/>
3     <logger name="com.common" level="DEBUG"/>
4     <logger name="dao" level="DEBUG">
5        <appender-ref ref="file" />  
6        <appender-ref ref="console" />  
7     </logger>

3.5 完整示例

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <configuration>
 3 
 4     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
 5         <!-- 典型的日志pattern -->
 6         <encoder>
 7             <pattern>[AAS] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} - %msg%n</pattern>
 8         </encoder>
 9     </appender>
10 
11     <!-- 演示按时间滚动的策略 -->
12     <!--<appender name="defaultlogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
13     <!--<file>/tmp/logs/authmgr.log</file>-->
14     <!-- -->
15     <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
16     <!--<fileNamePattern>/tmp/logs/authmgr.%d{yyyy-MM-dd}.log</fileNamePattern>-->
17     <!--&lt;!&ndash; 保留 30天数据,默认无限&ndash;&gt;-->
18     <!--<maxHistory>30</maxHistory>-->
19     <!--</rollingPolicy>-->
20     <!-- -->
21     <!--<encoder>-->
22     <!--<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>-->
23     <!--</encoder>-->
24     <!--</appender>-->
25 
26     <!-- 按文件大小滚动的策略 -->
27     <!--<appender name="metricsLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
28     <!--<file>/tmp/logs/metrics.log</file>-->
29     <!-- -->
30     <!--<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">-->
31     <!--<fileNamePattern>/tmp/logs/metrics.%i.log</fileNamePattern>-->
32     <!--&lt;!&ndash; 最多保留10个文件,默认是7 &ndash;&gt;-->
33     <!--<maxIndex>10</maxIndex>-->
34     <!--</rollingPolicy>-->
35     <!-- -->
36     <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
37     <!--<maxFileSize>10MB</maxFileSize>-->
38     <!--</triggeringPolicy>-->
39     <!-- -->
40     <!--<encoder>-->
41     <!--<pattern>%msg%n</pattern>-->
42     <!--</encoder>-->
43     <!--</appender>-->
44 
45     <!-- 综合时间与大小的滚动策略,先按小时滚动,小时内的文件大于10mb时再按大小滚动 -->
46     <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
47         <file>/var/log/local/xinsight/aas/aas.log</file>
48 
49         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
50             <fileNamePattern>/var/log/local/xinsight/aas/aas-%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern>
51             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
52                 <maxFileSize>10MB</maxFileSize>
53             </timeBasedFileNamingAndTriggeringPolicy>
54         </rollingPolicy>
55 
56         <encoder>
57             <pattern>[AAS] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} - %msg%n</pattern>
58         </encoder>
59     </appender>
84 
85     <logger name="com.mchange" level="WARN"/>
86     <logger name="com.service" level="DEBUG"/>
87     <logger name="dao" level="DEBUG"/>
88 
89     <!-- root -->
90     <root level="WARN">
91         <appender-ref ref="console"/>
93         <appender-ref ref="logFile" />
94     </root>
95 </configuration>

3.6 logger和root的区别

参考来自:http://www.cnblogs.com/cb0327/p/5759441.html

1 logger:
2 用来设置具体的包或类的日志打印级别。
3 仅有一个name属性,一个可选的level和一个可选的addtivity属性。
4 addtivity表示是否继承上级的打印级别,比如<logger name="com.service"/>将控制com.service包下的所有类的日志打印,
但是并没用设置打印级别,所以继承他的上级<root>的日志级别“DEBUG”; 5 可以指定appender。
6 root: 7 也是<loger>元素,但是它是根loger。 8 只有一个level属性。

4 代码中使用

 1 import org.slf4j.Logger;
 2 import org.slf4j.LoggerFactory;
 3 
 4 public abstract class Test{
 5     protected Logger logger = LoggerFactory.getLogger(this.getClass());
 6 
 7   logger.info("info");
 8   logger.error("error", tenantName, users.size());
 9   logger.debug("debug");
10 }
原文地址:https://www.cnblogs.com/lyh421/p/7248815.html