1、什么是logback

logback的产生是作为著名的日志框架log4j项目的一个继承者。它的设计者正是log4j的创造者Ceki Gülcü。logback在很大幅度上比现有的日志系统拥有更快的速度和更小的体积。logback也提供了独特和一些有用的特性,譬如标记、参数化的日志语句、有条件的堆栈跟踪和强大的事件过滤机制。这些只是运用logback提供的特性的一些例子。对于它自己的错误报表,logback依赖于状态对象,这样很大程度上促进了故障的排除。你可能更希望在日志之外依赖于状态对象。logback的核心绑定joran,一个强大和通用的配置系统,能在你自己的项目中起到很大的影响。

2、配置

2.1、所需jar包

logback-classic-1.0.0.jar

logback-core-1.0.0.jar

slf4j-api-1.6.4.jar

logback jar下载地址:http://logback.qos.ch

slf4j jar下载地址:http://www.slf4j.org/

2.2、配置文件

logback可以有以下三种配置文件:

Ø  logback.groovy

Ø  logback-test.xml

Ø  logback.xml

logback加载时也是按以上顺序进行加载的。

可以在代码中添加以下语句查看logback内部状态:

LoggerContextlc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);

如果你没有配置文件,会在控制台上输出以下语句:

11:19:06,828|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource[logback.groovy]
11:19:06,828|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT findresource [logback-test.xml]
11:19:06,828|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT findresource [logback.xml]
11:19:06,828|-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up defaultconfiguration.

2.3、简单应用

Loggerlogger = LoggerFactory.getLogger(“loggerOne”); //获取logger对象实例

logger.debug("Hellologback debug.");   //logger对象以debug级别输出调试语句

以上代码语句就生成了一个logger实例,命名为”loggerOne”,也就是说“loggerOne”就是这个logger的名称。

如果在代码中添加如下语句:

Logger logger1 =LoggerFactory.getLogger(“loggerOne”);

Logger logger2 =LoggerFactory.getLogger(“loggerOne”);

则代表logger1和logger2是两个相同的对象实例。所以在logback中只要logger的名称相同,那就代表是相同的对象实例。

2.4、logger命名

logger的命名是大小写敏感的,logger的命名一般都是取“类名.class”,这样命名在日志输出中也可看出其来源。

代码:

Logger logger =LoggerFactory.getLogger(LogBackAction.class);

logger.debug("Hello logbackdebug.");

控制台输出:

11:57:07.375["http-apr-8080"-exec-8] DEBUG app.action.LogBackAction - Hello logbackdebug.

就可以看出其具体来源于哪个类

logger命名层次:

如果logger名称带上点号后是另一个logger的名称的前缀,则前者就被称为后者的祖先,如果logger与其后者logger之间没有其他祖先,则称前者为父logger,后者为子logger,相当于java中子类跟父类的概念。

例如:

app.action    //父logger

app.action.logbackaction  //子logger

2.5、logger有效级别

logback中一共有5种有效级别,分别是TRACE、DEBUG、INFO、WARN、ERROR,优先级依次从低到高,logger之间的级别也有继承关系,但这里就不阐述了。

3、配置文件语法规则

3.1、简单配置分析

logback的配置文件还是非常简单,它的根节点是<configuration>,其又包括0个或多个<appender>节点、0个和多个<logger>节点、至多一个<root>节点。如下图所示:

图(1)

如下代码所示是一个最简单的配置:

<configuration><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><root level="debug"><appender-ref ref="STDOUT" /></root>
</configuration>

以上配置中定义了一个appender和一个root,appender可以理解为logback输出的目的地,root节点是根logger的意思,这里定义了根logger的输出就是控制台。

pattern节点中定义的是输出的模式规则:

%d{HH:mm:ss.SSS}:当前时间

[%thread]:线程名

%-5level:logger定义的级别

%logger{36}:logger名称

-%msg%n:定义的输出

如下代码:

Loggerlogger = LoggerFactory.getLogger(LogBackAction.class);

logger.debug("Hellologback debug.");

输出:

13:13:51.625["http-apr-8080"-exec-6] DEBUG app.action.LogBackAction - Hellologback debug.

3.2、控制输出级别

logback日志级别一共有5种,可以通过配置文件输出指定级别的日志信息。

在以上配置文件中添加如下代码:

<loggername="app.action.LogBackAction" level="INFO"/>

表示命名为“app.action.LogBackAction”的logger只输出info级别的日志信息。

3.3、配置appender

appender可以包含0过或多个layout节点,0个或多个encoder节点,0个或多个filter节点,如下图所示:

图(2)

输出到文件的appender,配置如下:

<appender name="logFile" class="ch.qos.logback.core.FileAppender"><file>myApp.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n  </pattern></encoder>
</appender>

如上配置后日志信息将写入到myApp.log文件中,默认情况下logback会将日志信息追加到日志文件中,如果在appender中加入<appender>false</appender>则会替换之前的日志信息。

logback配置文件中还可以设置时间戳,这样的话就可以将日志信息输出到日期的指定文件中,如下配置:

<!--时间戳格式设置为yyyy-MM-dd-->

<timestampkey="byDay" datePattern="yyyy-MM-dd"/>

appender配置如下:

<appender name="logFile" class="ch.qos.logback.core.FileAppender"><file>myApp_${byDay}.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n  </pattern></encoder></appender>

以上配置日志信息就会写入一个“myApp”+ “yyyy-MM-dd”的文件中.

以上appender中使用到的类是FileAppdener,也就是基本的文件输出,logback中还有RollingFileAppender继承FileAppender,能够滚动记录文件。也就是当符合某个条件时,可以将日志信息记录到其他日志文件中。如果想用RollingFileAppender则需要配置RollingPolicy和TriggerPolicy,分别表示滚动策略和触发策略。

示例如下:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>test.log</file><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>test.%i.log</fileNamePattern><minIndex>1</minIndex><maxIndex>3</maxIndex></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>5MB</maxFileSize></triggeringPolicy><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>

以上代码配置了RollingFileAppender,rollingPolicy定义为FixedWindwoRollingPolicy,这个滚动策略表示当满足了一定的触发策略后,logback会将日志信息写入到其他的日志文件中。配置了FixedWindowRollingPolicy后需要配置以下节点信息:

<fileNamePattern>:表示当触发了回滚策略后,按这个文件命名规则生成归档文件,命名规则中的%i表示在maxIndex和minIndex之间的一个整数值。

<minIndex>:最小索引值

<maxIndex>:最大索引值

假设生成三个日志归档文件,test.1.log、test.2.log、test.3.log,则test.1.log文件代表最先写入的那个文件,当三个文件都写满后会先删除test.3.log文件,依次循环。

logback中还有基于时间的rollingPolicy,配置如下:

 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- Support multiple-JVM writing to the same log file --><prudent>true</prudent><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory> </rollingPolicy><encoder><pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern></encoder></appender>

以上配置的保存30天的根据fileNamePattern的命名规则创建归档文件,日志信息则写入新的文件中。

有时当你在按照日期进行归档时还想对日志文件大小进行限制,可以使用logback中的SizeAndTimeBasedFNATP,它是TimeBasedRollingPolicy的子组件,FNATP代表“文件命名和触发策略”。

配置如下:

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>mylog.txt</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- rollover daily --><fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!-- or whenever the file size reaches 100MB --><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><pattern>%msg%n</pattern></encoder></appender>

以上配置表示媒体的日志文件不能超过100MB,一旦超过就要归档。

logback还有很多的高级特性,但以上介绍可以满足一般系统对日志的需求。

未完待续。。。。。。

Logback手记(一)相关推荐

  1. springboot日志logback配置

    1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 3 scan:当此属性设置为true时,配置文 ...

  2. qt能使用logback_Spring boot使用logback实现日志配置

    欢迎关注头条号:老顾聊技术 精品原创技术分享,知识的组装工 目录 前言 常用日志组件 什么是日志门面和日志实现 常见的日志框架 日志使用 @slf4j注解 日志的配置 logback-spring配置 ...

  3. springboot集成logback日志 通用logback.xml模板详解

    先看Spring Boot中依赖的logback,log4j,slf4j相关Jar包 1.最简单的默认打印控制台日志  import org.slf4j.Logger; import org.slf4 ...

  4. error 系统错误 错误码10007_为什么阿里巴巴禁止工程师直接使用日志系统( Log4j 、Logback )中的 API...

    (给ImportNew加星标,提高Java技能) 转自:Hollis 作为Java程序员,我想很多人都知道日志对于一个程序的重要性,尤其是Web应用.很多时候,日志可能是我们了解应用程序如何执行的唯一 ...

  5. slf4j导入那个依赖_学习SPRINGBOOT结合日志门面SLF4J和日志实现LOGBACK的混合使用

    一.此处主要介绍在springboot工程下如何使用 logback + slf4j 进行日志记录. logback主要包含三个组成部分:Loggers(日志记录器).Appenders(输出目的在) ...

  6. Logback学习笔记1

    Logback介绍 Logback 分为三个模块:Core.Classic 和 Access.Core模块是其他两个模块的基础. Classic模块扩展了core模块. Classic模块相当于log ...

  7. SLF4J 的几种实际应用模式--之二:SLF4J+Logback

    前面讲的 SLF4J 的用法之一是 SLF4J+Log4J,而这里要推出的组合是 SLF4J+LogBack.不用 Log4J?难道还有比 Log4J 更好的日志实现吗?是的,答案就是 LogBack ...

  8. 小记,springboot项目中自己常用的logback配置文件

    把配置文件放到resources这个classpath目录即可生效,日志输入样式是从springboot中日志配置中copy过来的, 其他常用配置不做过多注释了. logback-spring.xml ...

  9. Logback 配置文件这样优化,TPS提高 10 倍

    欢迎关注方志朋的博客,回复"666"获面试宝典 01.通过阅读本篇文章将了解到 1.日志输出到文件并根据LEVEL级别将日志分类保存到不同文件 2.通过异步输出日志减少磁盘IO提高 ...

最新文章

  1. 经典控制~系统的极点
  2. 树形dp技巧,多叉树转二叉树
  3. storm自定义分组与Hbase预分区结合节省内存消耗
  4. matlab newelm,Elman神经网络介绍以及Matlab实现
  5. ibatis的iterate使用
  6. KMP算法详细讲解(看完不会请打我)
  7. 前端网页发布到nginx_通过nginx部署前端代码实现前后端分离
  8. 文言色彩的客套话之感想
  9. 工业机器人控制系统的设计框架
  10. 串口转以太网使用方法
  11. 意派导出html,三款专业H5工具评测:意派Epub360、ih5、mugeda
  12. 腾讯视频qlv格式转MP4格式
  13. c语言实现姓名排序———字符串复制函数,字符串比较函数
  14. html ifrme 选择器,html中iframe/css样式设置,id,class选择器的使用规则等学习2019.9.2 08:00...
  15. 24. GD32F103C8T6入门教程-IAP升级教程
  16. js 移动端阻止下拉滑动、刷新
  17. 解决backtrack5连接不上ssh问题
  18. 2020-09-28
  19. 职业教育转型线上,机构要如何通过直播来引流获客?
  20. 用myeclipse搭建SSH并做一个简单登录页面

热门文章

  1. 《Open3D点云库 C++学习笔记 》
  2. “被拖欠工资,劳动仲裁?”看贴后感之另一案例
  3. iMeta | 复旦大学附属华山医院证实肾上腺皮质癌中瘤内菌的存在并与预后相关...
  4. cyc的智商递增问题
  5. 全面了解FTTH光纤到户
  6. 一个女生教你怎么追MM
  7. 英特尔 D435/D435i双目相机 使用指南
  8. Zynq UltraScale + RFSoC ZCU111专栏3-时钟树配置-LMK04208
  9. 开发小程序神器 wept
  10. 图像预处理 | 【附高清经典图像处理书籍下载】