logback是有log4j 创始人设计的又一个开源日志框架
logback 当前分为三个模块:logbakc-core,logback-classic 和 logback-access
- logback-core:是其他两个模块的基础模块
- logback-classic:是log4j的一个改良版本。此外logback-classic 完整实现SLF4J API,所以可以很方便的更换成其他日志系统,如 log4j 或 JDK14 Logging
- logback-access:访问模块与Servlet容器基础,提供通过http访问日志的功能。
maven:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.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>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
logback, 一个“通用,可靠,快速又灵活的Java日志框架”
在src目录下建立logback.xml
logback查找顺序:
- 首先会试着查找logback.groovy文件
- 当没有找到时,继续试着查找 logback-test.xml 文件
- 当没有找到时,继续试着查找 logback.xml 文件
- 如果仍然没有找到,则使用默认配置(打印到控制台)
自定义日志配置
根据不同的日志系统,可以按照如下规则组织配置文件名,就可以被正确加载:
Logback:logback-spring.xml,logback-spring.groovy,logback.xml,logback.groovy
Log4j: log4J-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2: log4j2-spring.xml, log4j2.xml
JDK(Java Util Logging): logging.properties
Spring Boot 官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml), 命名为logback-spring.xml 的日志配置文件,spring boot 可以为它添加一些spring boot特有的配置项。
默认的命名规则,并且放在 src/main/resources 下面即可
如果你不想用 logback.xml 作为 logback 配置的名字,application.yml 可以通过 logging.config 属性指定自定义的名字:
logging.config=classpath:logging-config.xml
虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行是profile使用不同的配置,这个功能会很有用。
一般不需要这个属性,而是直接在 logback-spring.xml 中使用 springProfile配置,不需要logging.config 指定不同环境使用不同配置文件。
上代码:
package logback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogbackDemo {
private static Logger log = LoggerFactory.getLogger(LogbackDemo.class);
public static void main(String[] args) {
log.trace("======trace");
log.debug("======debug");
log.info("======info");
log.warn("======warn");
log.error("======error");
String name = "Aub";
String message = "3Q";
String[] fruits = { "apple", "banana" };
// logback提供的可以使用变量的打印方式,结果为"Hello,Aub!"
log.info("Hello,{}!", name);
// 可以有多个参数,结果为“Hello,Aub! 3Q!”
log.info("Hello,{}! {}!", name, message);
// 可以传入一个数组,结果为"Fruit: apple,banana"
log.info("Fruit: {},{}", fruits);
}
}
configuration
- 根节点 configuration 包含的属性:
- scan:
此属性设置为true,配置文件如果发生改变,将会被重新加载,默认为true - scanPeriod:
设置监测配置文件是否有修改的时间间隔,如果没有给出事件单位,默认单位是毫秒。当scan为true时,此属性默认生效。默认的时间将为1分钟。 - debug:
此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认为false。
例如:
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 其他配置省略-->
</configuration>
- 根节点 configuration 的子节点:
- contextName
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。可以通过%contextName来打印日志上下文名称,一般来说我们不用这个属性,可有可无.
例如:
<configuration scan="true" scanPeriod="60 seconds" debug="false">