logback配置和使用
简介
logback是由log4j创始人设计的又一个开源日志组件。当前分成三个模块:
logback-core是其它两个模块的基础模块。
logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API,使你可以很方便地更换成其它日志系统,如log4j或JDK14 Logging。
logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
配置
配置pom.xml
logback需要logback-core、logback-classic、slf4j-api、logback-access这4个依赖。其中logback-classic已经包含了logback-core和slf4j-api依赖,由于Maven依赖的传递性,所以我们只需导入logback-classic和logback-access依赖即可。
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.0-alpha4</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.3.0-alpha4</version>
</dependency>
</dependencies>
初始化步骤
1. 在类路径中查找logback-test.xml文件。
2. 如果没有找到,则在类路径中查找logback.groovy文件。
3. 如果没有找到,则在类路径中查找logback.xml文件。
4. 如果没有找到,则尝试使用ServiceLoader加载classpath下META-INF\services\ch.qos.logback.classic.spi.Configurator文件中配置的com.qos.logback.classic.spi.Configurator实现类(Configurator文件内容为实现类的完全限定类名)。
5. 如果还是没有找到,则会加载默认配置,日志默认会输出到控制台,也就是使用BasicConfigurator,BasicConfigurator也是com.qos.logback.classic.spi.Configurator接口的实现类。
public class BasicConfigurator extends ContextAwareBase implements Configurator {
public BasicConfigurator() {
}
public void configure(LoggerContext lc) {
addInfo("Setting up default configuration.");
ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<ILoggingEvent>();
ca.setContext(lc);
ca.setName("console");
LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<ILoggingEvent>();
encoder.setContext(lc);
// same as
// PatternLayout layout = new PatternLayout();
// layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
TTLLLayout layout = new TTLLLayout();
layout.setContext(lc);
layout.start();
encoder.setLayout(layout);
ca.setEncoder(encoder);
ca.start();
Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.addAppender(ca);
}
}
使用logback.xml
<configuration scan="true" scanPeriod="30 seconds">
<!-- 自定义属性,通过${}访问 -->
<property name="filePath" value="/logs/" />
<!-- 输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %msg%n</pattern>
</encoder>
</appender>
<!-- 输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${filePath}app.log</file>
<!-- 日志输出格式化 -->
<encoder>
<pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
</encoder>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每日滚动 -->
<fileNamePattern>${filePath}app.log%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 将30天的日志总大小限制在3GB内 -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 基于尺寸和时间的滚动策略 -->
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${filePath}other.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${filePath}other.log%d{yyyy-MM-dd}%i.log</fileNamePattern>
<!-- 每个日志文件最多100MB,保存60天的历史记录,总大小不超过20GB -->
<maxFileSize>1KB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
</encoder>
</appender>
<!-- name属性指定包名或者完全限定类名 -->
<logger name="service.OtherService" level="DEBUG">
<appender-ref ref="ROLLING" />
</logger>
<!-- 根logger -->
<root level="DEBUG">
<!-- 配置输出源 -->
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
测试:
public class HelloService {
private final static Logger logger = LoggerFactory.getLogger(HelloService.class);
public static void main(String[] args) {
//根据logback.xml中配置的日志级别,TRACE级别的日志将不会输出,只会输出DEBUG及以上级别的日志。
//TRACE < DEBUG < INFO < WARN < ERROR
logger.trace("---------------trace---------------");
logger.debug("---------------debug---------------");
logger.info("---------------info---------------");
logger.warn("---------------warn---------------");
logger.error("---------------error---------------");
}
}
常用技巧
1. 使用占位符
logger.debug("我是" + name + ",我今年" + age + "岁,很高兴认识你!");//普通方式
logger.debug("我是{},我今年{}岁,很高兴认识你!", name, age);//占位符方式(推荐)
当debug日志被禁用时,普通方式中,参数依然会被构造拼接,而在占位符方式中,参数不会进行构造拼接。
2. 使用时应该使用slf4j的API而不是使用logback的API(依赖日志门面,而不是依赖具体的日志实现,便于更换其他日志框架)
3. 自动重新加载配置文件
将元素的scan属性设置为true,logback会定时的扫描配置文件,如果配置文件发生了更改,将自动重新加载配置文件。默认每分钟扫描一次,可以设置scanPeriod属性来指定扫描间隔。
<configuration scan="true" scanPeriod="30 seconds" >
...
</configuration>
logback配置和使用的更多相关文章
- logback 配置
logback 配置 logback的配置方式包括:编程配置.XML文件配置.Groovy文件配置.对于使用log4j的用户,还可以通过logback提供的工具( http://logback.qos ...
- 剖析项目多个logback配置(下)
来源:http://www.cnblogs.com/guozp/p/5973038.html 上篇大概描述了logback的加载顺序以及加载的源码,本篇将分析如果在你的Maven或者其他多模块的项目中 ...
- Spring Boot系列一:默认日志logback配置解析
前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...
- (网页)Java日志记录框架Logback配置详解(企业级应用解决方案)(转)
转自CSDN: 前言 Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了.本篇博文不会具体介绍Logbac ...
- Java中多环境Logback配置与ELK日志发送
Java中多环境Logback配置与ELK日志发送 一.项目基于SpringBoot实现,引入SpringBoot相关库后,本文还要讲上传到ELK的Logstash,所以需要在pom.xml中加入 ...
- logback配置详解
本文转自:https://segmentfault.com/a/1190000008315137 概览 简单地说,Logback 是一个 Java 领域的日志框架.它被认为是 Log4J 的继承人.L ...
- SpringBoot Logback配置,SpringBoot日志配置
SpringBoot Logback配置,SpringBoot日志配置 SpringBoot springProfile属性配置 ================================ © ...
- spring整合mybatis、hibernate、logback配置
Spring整合配置Mybatis 1.配置数据源(连接数据库最基本的属性配置,如数据库url,账号,密码,和数据库驱动等最基本参数配置) <!-- 导入properties配置文件 --> ...
- logback -- 配置详解 -- 四 -- <filter>
附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...
- logback -- 配置详解 -- 三 -- <encoder>
附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...
随机推荐
- HLOJ1366 Candy Box 动态规划(0-1背包改)
题目描述: 给出N个盒子(N<=100),每个盒子有一定数量的糖果(每个盒子的糖果数<=100),现在有q次查询,每次查询给出两个数k,m,问的是,如果从N个盒子中最多打开k个盒子(意思是 ...
- Elasticsearch 动态修改replica配置、增删replica
1. 获取当前所有index配置 curl -XGET http://localhost:9200/_settings 2. 获取某些index的配置 curl -XGET http://localh ...
- update mantis_bug_table
update mantis_bug_table set mantis_bug_table.original_due_date=mantis_bug_table.due_date ,) ,);
- USACO Milk Routing
洛谷 P3063 [USACO12DEC]牛奶的路由Milk Routing 洛谷传送门 JDOJ 2334: USACO 2012 Dec Silver 3.Milk Routing JDOJ传送门 ...
- html-前端内容初识
HTML解释: HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的规则(W3C),大家都来遵守他,这 ...
- vue中异步请求渲染问题(swiper不轮播)(在开发过程中遇到过什么问题、踩过的坑)
问题描述: 用vue封装一个swiper组件的时候,发现轮播图不能轮播了. 原因: 异步请求的时间远大于生命周期执行的时间,mounted初始化DOM时数据未返回,渲染数据是空数组,导致轮播图的容器层 ...
- B 题解————2019.10.16
相信他说的话,但不要当真 [题目描述]有一个长度为 n 的自然数序列 a,要求将这个序列恰好分成至少 m 个连续子段. 每个子段的价值为该子段的所有数的按位异或.要使所有子段的价值按位与的结果最大,输 ...
- eclipse Referenced file contains errors (http://www.springframework.org/schema/context/spring-context-3.0.xsd)
1.情景展示 spring配置文件报错信息如下: Referenced file contains errors (http://www.springframework.org/schema/ ...
- IntelliJ IDEA编辑器的使用技巧
目录 1. 使用技巧 1. 跳转小工具 2. 无处不在的跳转 3. 精准搜索 4. 列操作: 5. live template 6. postfix 7. ALT+ENTER智能提示,代码优化 8. ...
- NET Core3前后端分离开发框架
NET Core前后端分离快速开发框架 https://www.cnblogs.com/coldairarrow/p/11870993.html 引言 时间真快,转眼今年又要过去了.回想今年,依次开源 ...