首页 > 代码库 > logback的使用笔记

logback的使用笔记

关于日志存储数据库方面的没有整理,暂时用不到,异步看了英文文档,发现暂时用不到,以后再整理

2017-04-09 00:57:26

logback是一个开源的日志组件,是log4j的作者开发的用来替代log4j的。 
logback由三个部分组成,logback-core, logback-classic, logback-access。其中logback-core是其他两个模块的基础。


logback中三个重要概念: Logger,Appender,Layout


Logger: 日志记录器,把它关联到应用对应的context上后,主要用于存放日志对象,定义日志类型,级别。


Appender: 指定日志输出的目的地,目的地可以是控制台,文件,或者数据库等


Layout: 负责把事件转换成字符串,格式化日志信息的输出


logback配置优先级顺序


  1. logback首先在classpath寻找logback.groovy文件,
  2. 如果没找到,继续寻找logback-test.xml文件
  3. 如果没找到,继续寻找logback.xml文件
  4. 如果仍然没找到,则使用默认配置(打印到控制台)

最佳实践


slf4j 定义日志接口及基本实现,而具体的实现由其他日志组件提供


  • log4j
  • commons-logging
  • logback

因此,如果想替换成其他的日志组件,只需要替换jar包即可。


实际开发中推荐使用slf4j+logback。

 

 

logback.xml 配置:

配置




 1 <configuration>
 2     <!--定义一个参数,可以直接在此配置文件中引用${LOG_HOME} -->
 3     <property name="LOG_HOME" value="logs" />
 4     <property name="LOG_FILE_NAME" value="crawler4j.log" />
 5 
 6     <!--appender是负责写日志的组件, -->
 7     <!--consoleAppender是负责将日志输出到控制台 -->
 8     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 9         <!--encoder 格式化日志格式 -->
10         <encoder>
11         <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
12             <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] -[%logger{0}]- %msg%n</pattern>
13         </encoder>
14 
15     </appender>
16 
17     <!--将日志输出到文件 -->
18     <appender name="FILE" class="ch.qos.logback.core.FileAppender">
19         <!--输出文件的路径 -->
20         <file>${LOG_HOME}/${LOG_FILE_NAME}</file>
21         <!--格式化日志输出格式 -->
22         <encoder>
23             <pattern>%date %-5level [%thread] - [%logger] - %msg%n</pattern>
24         </encoder>
25     </appender>
26 
27     <appender name="ROLl"
28         class="ch.qos.logback.core.rolling.RollingFileAppender">
29         <!--滚动记录策略  这里是基于时间的策略(还有基于文件大小,文件大小和时间,。。具体可以查看ch.qos.logback.core.rolling里的policy) -->
30         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
31         <!-- %d{}里面的是规则,当规则变化时,则根据规则重新命名新的文件夹,下面是每秒中创建一个日志文件 -->
32             <fileNamePattern>logFile.%d{yyyy-MM-dd HH-mm-ss}.log</fileNamePattern>
33             <!--能够保存最大日志文件数量,超过之后会覆盖掉之前的文件  ,下面是最多10个文件 -->
34             <maxHistory>10</maxHistory>
35         </rollingPolicy>
36         <encoder>
37             <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n
38             </pattern>
39         </encoder>
40         
41     </appender>
42     <!--level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前loger将会继承上级的级别。  -->
43     
44 <!--     <loger name="LogbackTest.java" level="INfo">
45         <appender-ref ref="FILE" />
46     </loger> -->
47     
48     <root level="DEBUG">
49         <appender-ref ref="STDOUT" />
50     </root>
51     
52     
53 </configuration>
54 <!-- 上述配置表示每天生成一个日志文件,保存30天的日志文件。 -->
55 <!-- <configuration>
56     <appender name="FILE"
57         class="ch.qos.logback.core.rolling.RollingFileAppender">
58         <file>test.log</file>
59         <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
60             <fileNamePattern>tests.%i.log.zip</fileNamePattern>
61             <minIndex>1</minIndex>
62             <maxIndex>3</maxIndex>
63         </rollingPolicy>
64         <triggeringPolicy
65             class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
66             <maxFileSize>5MB</maxFileSize>
67         </triggeringPolicy>
68         <encoder>
69             <pattern>%-4relative
70                 [%thread] %-5level %logger{35} - %msg%n </pattern>
71         </encoder>
72     </appender>
73     <root level="DEBUG">
74         <appender-ref ref="FILE" />
75     </root>
76     <logger name="com.github.tomakehurst" level="ERROR" />
77     <logger name="org.eclipse.jetty" level="ERROR" />
78     <root level="DEBUG">
79         <appender-ref ref="STDOUT" />
80         <appender-ref ref="FILE" />
81     </root>
82 </configuration> -->
83 
84 <!-- 上述配置表示按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。 -->

 

 

 java代码:

package edu.uci.ics.crawler4j.tests;

import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogbackTest {

	private LogbackTest log;

	private final Logger logger = LoggerFactory.getLogger(LogbackTest.class);

	@Before
	public void init() {
		log = new LogbackTest();
	}

	@Test
	public void logTest() {
		for (int i = 0; i < 1000; i++) {
			this.logger.info("info--->" + i);
			this.logger.error("error----->" + i);
			this.logger.debug("debug----------->" + i);
		}
	}
}

  

logback的使用笔记