简介

logback是由log4j创始人设计的又一个开源日志组件。当前分成三个模块:

  • logback-core是其它两个模块的基础模块。

  • logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API,使你可以很方便地更换成其它日志系统,如log4j或JDK14 Logging。

  • logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

配置

配置pom.xml

logback需要logback-corelogback-classicslf4j-apilogback-access这4个依赖。其中logback-classic已经包含了logback-core和slf4j-api依赖,由于Maven依赖的传递性,所以我们只需导入logback-classic和logback-access依赖即可。

  1. <dependencies>
  2. <dependency>
  3. <groupId>ch.qos.logback</groupId>
  4. <artifactId>logback-classic</artifactId>
  5. <version>1.3.0-alpha4</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>ch.qos.logback</groupId>
  9. <artifactId>logback-access</artifactId>
  10. <version>1.3.0-alpha4</version>
  11. </dependency>
  12. </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接口的实现类。

  1. public class BasicConfigurator extends ContextAwareBase implements Configurator {
  2. public BasicConfigurator() {
  3. }
  4. public void configure(LoggerContext lc) {
  5. addInfo("Setting up default configuration.");
  6. ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<ILoggingEvent>();
  7. ca.setContext(lc);
  8. ca.setName("console");
  9. LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<ILoggingEvent>();
  10. encoder.setContext(lc);
  11. // same as
  12. // PatternLayout layout = new PatternLayout();
  13. // layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
  14. TTLLLayout layout = new TTLLLayout();
  15. layout.setContext(lc);
  16. layout.start();
  17. encoder.setLayout(layout);
  18. ca.setEncoder(encoder);
  19. ca.start();
  20. Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME);
  21. rootLogger.addAppender(ca);
  22. }
  23. }

使用logback.xml

  1. <configuration scan="true" scanPeriod="30 seconds">
  2. <!-- 自定义属性,通过${}访问 -->
  3. <property name="filePath" value="/logs/" />
  4. <!-- 输出到控制台 -->
  5. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  6. <encoder>
  7. <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %msg%n</pattern>
  8. </encoder>
  9. </appender>
  10. <!-- 输出到文件 -->
  11. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  12. <!-- 文件路径 -->
  13. <file>${filePath}app.log</file>
  14. <!-- 日志输出格式化 -->
  15. <encoder>
  16. <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
  17. </encoder>
  18. <!-- 滚动策略 -->
  19. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  20. <!-- 每日滚动 -->
  21. <fileNamePattern>${filePath}app.log%d{yyyy-MM-dd}.log</fileNamePattern>
  22. <!-- 将30天的日志总大小限制在3GB内 -->
  23. <maxHistory>30</maxHistory>
  24. <totalSizeCap>3GB</totalSizeCap>
  25. </rollingPolicy>
  26. </appender>
  27. <!-- 基于尺寸和时间的滚动策略 -->
  28. <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
  29. <file>${filePath}other.log</file>
  30. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  31. <fileNamePattern>${filePath}other.log%d{yyyy-MM-dd}%i.log</fileNamePattern>
  32. <!-- 每个日志文件最多100MB,保存60天的历史记录,总大小不超过20GB -->
  33. <maxFileSize>1KB</maxFileSize>
  34. <maxHistory>60</maxHistory>
  35. <totalSizeCap>20GB</totalSizeCap>
  36. </rollingPolicy>
  37. <encoder>
  38. <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
  39. </encoder>
  40. </appender>
  41. <!-- name属性指定包名或者完全限定类名 -->
  42. <logger name="service.OtherService" level="DEBUG">
  43. <appender-ref ref="ROLLING" />
  44. </logger>
  45. <!-- 根logger -->
  46. <root level="DEBUG">
  47. <!-- 配置输出源 -->
  48. <appender-ref ref="STDOUT" />
  49. <appender-ref ref="FILE" />
  50. </root>
  51. </configuration>

测试:

  1. public class HelloService {
  2. private final static Logger logger = LoggerFactory.getLogger(HelloService.class);
  3. public static void main(String[] args) {
  4. //根据logback.xml中配置的日志级别,TRACE级别的日志将不会输出,只会输出DEBUG及以上级别的日志。
  5. //TRACE < DEBUG < INFO < WARN < ERROR
  6. logger.trace("---------------trace---------------");
  7. logger.debug("---------------debug---------------");
  8. logger.info("---------------info---------------");
  9. logger.warn("---------------warn---------------");
  10. logger.error("---------------error---------------");
  11. }
  12. }

常用技巧

1. 使用占位符

  1. logger.debug("我是" + name + ",我今年" + age + "岁,很高兴认识你!");//普通方式
  2. logger.debug("我是{},我今年{}岁,很高兴认识你!", name, age);//占位符方式(推荐)

当debug日志被禁用时,普通方式中,参数依然会被构造拼接,而在占位符方式中,参数不会进行构造拼接。

2. 使用时应该使用slf4j的API而不是使用logback的API(依赖日志门面,而不是依赖具体的日志实现,便于更换其他日志框架)

3. 自动重新加载配置文件

将元素的scan属性设置为true,logback会定时的扫描配置文件,如果配置文件发生了更改,将自动重新加载配置文件。默认每分钟扫描一次,可以设置scanPeriod属性来指定扫描间隔。

  1. <configuration scan="true" scanPeriod="30 seconds" >
  2. ...
  3. </configuration>

logback配置和使用的更多相关文章

  1. logback 配置

    logback 配置 logback的配置方式包括:编程配置.XML文件配置.Groovy文件配置.对于使用log4j的用户,还可以通过logback提供的工具( http://logback.qos ...

  2. 剖析项目多个logback配置(下)

    来源:http://www.cnblogs.com/guozp/p/5973038.html 上篇大概描述了logback的加载顺序以及加载的源码,本篇将分析如果在你的Maven或者其他多模块的项目中 ...

  3. Spring Boot系列一:默认日志logback配置解析

    前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

  4. (网页)Java日志记录框架Logback配置详解(企业级应用解决方案)(转)

    转自CSDN: 前言 Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了.本篇博文不会具体介绍Logbac ...

  5. Java中多环境Logback配置与ELK日志发送

    Java中多环境Logback配置与ELK日志发送   一.项目基于SpringBoot实现,引入SpringBoot相关库后,本文还要讲上传到ELK的Logstash,所以需要在pom.xml中加入 ...

  6. logback配置详解

    本文转自:https://segmentfault.com/a/1190000008315137 概览 简单地说,Logback 是一个 Java 领域的日志框架.它被认为是 Log4J 的继承人.L ...

  7. SpringBoot Logback配置,SpringBoot日志配置

    SpringBoot Logback配置,SpringBoot日志配置  SpringBoot springProfile属性配置 ================================ © ...

  8. spring整合mybatis、hibernate、logback配置

    Spring整合配置Mybatis 1.配置数据源(连接数据库最基本的属性配置,如数据库url,账号,密码,和数据库驱动等最基本参数配置) <!-- 导入properties配置文件 --> ...

  9. logback -- 配置详解 -- 四 -- <filter>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  10. logback -- 配置详解 -- 三 -- <encoder>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

随机推荐

  1. Flutter gradle采坑

    前些日子google推出Flutter1.9版本支持web果断升级 在运行flutter时发现错误,错误提示为 Launching lib/main.dart on Android SDK built ...

  2. python测试开发django-69.templates模板过滤器filter

    前言 templates 模板里面过滤器 filter 的作用是对变量的出来,比如小写转大写,替换一些特殊字符,对列表取值,排序等操作. 内置的过滤器有很多,本篇拿几个常用的过滤器做案例讲解下相关的功 ...

  3. Godaddy ssl证书配置到nginx

    打开终端,输入以下命令 openssl req -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr 生成过程会询问几个常见问 ...

  4. 安装glibc

    wget http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gztar -zxvf glibc-2.23.tar.gz cd glibc-2.23 mkdir b ...

  5. Kibana 学习资料

    Kibana 学习资料 网址 Kibana 官方文档 https://s0www0elastic0co.icopy.site/guide/en/kibana/current/introduction. ...

  6. 【转】linux 下清空或删除大文件的一些方法

    原文:https://linux.cn/article-8024-1.html 在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件 ...

  7. 微信(十一) 使用调试助手申请设备ID和报备流程

    以下流程模拟了一个设备,从微信硬件申请一个产品IP,对此ID进行报备生效,查询自己的绑定主人,给绑定主人发送消息的一系列http请求流程. 1 获取微信密钥 下面需要在公众号设备电脑IP白名单的电脑才 ...

  8. Layui 模板引擎中用了CheckBox,显示时没有样式

    渲染完成后,需要重新调用layui的方法. layui.form.render();

  9. Debian9下安装Python3 pip

    Debian9下安装Python3 pip 使用apt-get安装Python3-pip包 apt-get install python3-pip

  10. ES6基础-ES6 class

    作者 | Jeskson 来源 | 达达前端小酒馆 ES - Class 类和面向对象: 面向对象,即万物皆对象,面向对象是我们做开发一种的方式,开发思维,面向对象的思维中万物皆对象,以人作为例子,它 ...