vlambda博客
学习文章列表

开源日志组件Logback


logback结构:


logback-core:作为基础组件,为logback-classic和logback-access提供基础服务。

logback-classic:为log4j的改良版本,完整实现了slf4j API,可替换为其他日志系统。

logback-access:为访问模块,与servlet容器集成提供通过http访问日志的功能。


logback元素与配置约定:


Logger:日志记录器,将之创建并关联至对应的context,主要用于存放日志对象,定义日志类型、级别。Logger 可以被分配级别,级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于ch.qos.logback.classic.Level类,级别排序为:TRACE < DEBUG < INFO < WARN < ERROR。如果 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别,root logger 默认级别是 DEBUG。

appender:指定日志输出目的地(控制台、文件、远程套接字服务器、mysql、oracle等、JMS和unix syslog守护进程等)。

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

logger context:各logger 都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各logger。其他所有logger也通过org.slf4j.LoggerFactory 类的静态方法getLogger取得,getLogger方法以 logger名称为参数。用同一名字调用LoggerFactory.getLogger 方法所得到的永远都是同一个logger对象的引用。


Logback默认配置的步骤:


.尝试在 classpath下查找文件logback-test.xml;

.如果文件不存在,则查找文件logback.xml;

.如果两个文件都不存在,logback用BasicConfigurator自动进行配置,输出控制台。


logback+springboot整合:


1.引入依赖

 
 
   
   
 
<!--slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency>
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.7</version>
</dependency>

2.添加logback.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60" debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="/home" />
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<property name="pattern" value="xxxxxxxxxxxx %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>

</configuration>


3.代码编写运行