一.logback的配置介绍

  Logback的配置分为三个内容:Logger、appender及layout

  Logger:作为日志的记录器,主要用于存放日志对象,也可以定义日志类型、级别。

  appender:主要用于指定日志输出的目的地。目的地可以是控制台、文件、远程套接字服务器、 MySQL、PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。

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

二.Logger context的介绍

  各个logger都会被关联到一个LoggerContext上,LoggerContext负责制造logger,也负责以树结构排列各logger.所有的logger都是通过org.slf4j.LoggerFactory类的静态方法getLogger取得。

private Logger logger = LoggerFactory.getLogger(Example.class);

三.Logger级别的打印与规则设置

日志级别分为:
TRACE(跟踪) < DEBUG < INFO < WARN < ERROR 如果Logger没有被分配级别,那么它将继承root的默认级别:DEBUG

打印方法决定记录请求的级别。例如,如果 L 是一个 logger 实例,那么,语句 L.info("..")是一条级别为 INFO的记录语句。记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,否则,称为被禁用。 

记录请求级别为 p,其 logger的有效级别为 q,只有则当 p>=q时,该请求才会被执行。
该规则是 logback 的核心。级别排序为: TRACE < DEBUG < INFO < WARN < ERROR

四.Logback的默认配置 

当Logback启动后,会在classpath下查找文件logback-test.xml,如果文件不存在会查找logback.xml文件,如果这2个文件都不存在,logback用BasicConfigUrator自动对自己进行配置,这样会导致记录输出到控制台上。

五.logback.xml常用配置详解

  1.根节点<configuration>的配置

<configuration scan="true" scanPeriod="60 seconds" debug="false">
   <!--其他配置省略-->
</configuration>
scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

  2.子节点<contextName>

    作用:用来设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。

<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>myAppName</contextName>
   <!--其他配置省略-->
</configuration>

  3.子节点<property>

    作用:用来定义变量值,它有两个属性name和value,通过<property>定义的值会被插入到logger上下文中,可以使”${}”来使用变量。

<configuration scan="true" scanPeriod="60 seconds" debug="false">
   <property name="APP_Name" value="myAppName" />
name: 变量的名称
   value: 的值时变量定义的值
<contextName>${APP_Name}</contextName>
   <!--其他配置省略-->
</configuration>

  4.子节点<timestamp>

    作用:获取时间戳字符串,他有两个属性key和datePattern

<configuration scan="true" scanPeriod="60 seconds" debug="false">
  <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
key: 标识此<timestamp> 的名字;
datePattern: 设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。
  <contextName>${bySecond}</contextName>
  <!-- 其他配置省略-->
</configuration>

  5.子节点<appender>

    作用:负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名,name的不同,也决定了这个appender的作用不同

  5.1当class为:ConsoleAppender时,表示要将日志打印到控制台,有以下属性

    <encoder>:对日志进行格式化

    <target>:字符串System.out(默认)或者System.err(区别不多说了)

<configuration>
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
   <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
      </encoder>
   </appender>    <root level="DEBUG">
      <appender-ref ref="STDOUT" />
   </root>
</configuration> 此配置表示: 把 >= DEBUG 级别的日志都输出到控制台上

  5.2 当class为FileAppender时:表示把日志添加到文件中。有以下属性

     <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

    <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。

    <encoder>:对记录事件进行格式化.负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。

    <prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。(如果设置成了true其它的FileAppender也可以向该文件中写,就是速度慢)

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>testFile.log</file>
    <append>true</append>
    <encoder>
   <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>
</configuration>
上述配置表示: 把>=DEBUG级别的日志都输出到testFile.log

  5.3当class为RollingFileAppender:表示滚动记录文件,先将日志记录到指定的文件上,当符合某个条件时,会将日志记录到其它文件上。有以下属性:

    <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

    <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。

    <rollingPolicy>:当发生滚动时,会根据class定义的滚动策略来决定RollingFileAppender的行为,可能是文件移动和重命名。

    在这里请注意:FollingFileAppender下的rollingPolicy策略有4种,这里只介绍一种最常用的SizeAndTimeBasedRollingPolicy

    当rollingPolicy的class为SizeAndTimeBasedRollingPolicy:表示按照文件的大小和日期生成日志文件

      <fileNamePattern>:生成文件的名字

      <maxFileSize>  :生成文件的大小

      <maxHistory>   :保存日志文件的日期,以天为单位

      <totalSizeCap>  :保存日志的最大容量

  注意:在配置<fileNamePattern>时,按日期格式化的配置 .%d{yyyy-MM-dd}.%i 是不能更改的,否则会失效

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="LOG_HOME" value="D:\logs" />
<!-- 滚动记录文件 -->
<appender name="metrics" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}\metrics.log</file>
<append>true</append>
<!-- 每天创建1个日志 文件,当超过1MB时创建新的文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy" >
<fileNamePattern>${LOG_HOME}\metrics.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 注意标红这里是不能更改的,必须包含的元素 -->
<maxFileSize>1MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
   <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n|==|%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
     </encoder>
</appender>
<logger name="metrics.zpb" level="info" additivity="false">
<appender-ref ref="metrics"/>
</logger>
<root level="INFO">
<appender-ref ref="metrics"/>
</root>
</configuration>

  6.子节点<loger>

    作用:用来设置打印哪一个包下的日志或者某一具体类的日志,以及打印的级别,以及指定<appender>

    <loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性

    name: 用来指定受此loger约束的某一包或者具体的某一个类

    Level: 用来设置打印级别,大小写无关,:trace < debug <info < warn < error < all < off

    还有一特定值,INHERITED或同义词NULL,代表强制执行上级的级别,如果未设置些属性,那么当前logger将会继承上级的级别

    addtivity: 是否向上级loger传递打印信息。默认是true,同<logger>一样,可以包含零个或多个

    <appender-ref>元素,标识这个appender将会添加到这个loger

  7.子节点<root>

    作用:根节点,其实它也是一个loger,只不过是loger的顶级,只有一个level属性

      level: 用来设置打印级别,大小无关,trace < debug <info < warn < error < all < off

     不能设置为INHERITED或者同义词NULL,默认是DEBUG

六.logback所需jar包

<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>

七.自定义输出格式

%m         输出代码中指定的消息

%p         输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%r         输出自应用启动到输出该log信息耗费的毫秒数

%c         输出所属的类目,通常就是所在类的全名

%t         输出产生该日志事件的线程名

%n         输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”

%d         输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%L         输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

八.示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 输出到控制台上 -->
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
   <pattern>%d{yyyy-MM-dd HH:mm:ss}| %-5level|%c %L|%m%n</pattern>
   </encoder>
   </appender>
<logger name="com.zpb.metrics" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<!-- 输出到文件上 -->
<appender name="metrics" class="ch.qos.logback.core.FileAppender">
<File>D:\logs\metrics.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss}| %-5level|%c|%m %n</pattern>
</encoder>
</appender>
<!-- logger 中的配置的解释:
name: 从指定的包路径下接收日志
level: 设置日志接收的级别
additivity:表示此logger信息不再向上级传递
-->
<logger name="com.metrics.zpb" level="info" additivity="false">
<appender-ref ref="metrics"/>
</logger> <root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="metrics"/>
</root>
</configuration> 此配置表示:将不同级别的日志分别输出到控制台和日志文件中

loback的介绍与配置-(通俗易通)的更多相关文章

  1. 分布式Web服务器架构(通俗易通)

    最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网 ...

  2. OSPF协议介绍及配置 (上)

    OSPF协议介绍及配置 (上) 一.OSPF概述 回顾一下距离矢量路由协议的工作原理:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表,通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加 ...

  3. 易通电脑锁2007V6.3.3.3无法卸载问题解决办法

    易通电脑锁2007V6.3.3.3无法卸载问题解决办法把原版文件拷贝回去.bat@echo offcolor 2Fecho 该批处理会把易通电脑锁2007版原文件拷贝回去,解决易通电脑锁卸载时出现的运 ...

  4. 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

     1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...

  5. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  6. x-pack 功能介绍及配置传输层安全性(TLS / SSL)

    x-pack 功能介绍及配置传输层安全性(TLS / SSL) 学习了:https://blog.csdn.net/wfs1994/article/details/80411047

  7. 陈立伟 - MultiCharts快易通(2013年8月2日)

    <MultiCharts快易通> 作 者:陈立伟 译 者: 系 列:寰宇程式交易312--挑战程式交易系列1 出 版:寰宇出版股份有限公司 字 数:千字 阅读完成:2013年8月2日

  8. mysql多实例介绍及配置

    mysql多实例介绍及配置 1.mysql多实例介绍 1.1 什么是mysql多实例 mysql多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过 ...

  9. 13.LAMP架构介绍及配置

    LAMP架构介绍及配置 LAMP简介与概述 LAMP概述 LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境. LAMP是一 ...

随机推荐

  1. django使用mysql的时区问题解决

    1.如果是linux 将系统的时区表导入mysql. mysql_tzinfo_to_sql /usr/share/zoneinfo 2.如果是windows 下载时区表 然后导入时区表,file_n ...

  2. Window操作系统_根据端口查看进行PID 并杀掉进程

    Windows 如何查看本地端口被进程占用的情况? 传送门 Windows 根据端口查看进行PID 并杀掉进程[推荐] 传送门 转载目的:做JavaWeb项目时总提示我80/8080端口号被占用... ...

  3. pwn学习日记Day22 《程序员的自我修养》读书笔记

    知识杂项 软连接 命令: ln -s 原文件 目标文件 特征: 1.相当于windows的快捷方式 2.只是一个符号连接,所以软连接文件大小都很小 3.当运行软连接的时候,会根据连接指向找到真正的文件 ...

  4. 【SVN】彻底 svn 服务器上的 删除某一个文件或文件夹

    参考: CSDN1:https://blog.csdn.net/u011729865/article/details/78764523 CSDN2:https://blog.csdn.net/wyyo ...

  5. python 调用父类方法, 重写父类构造方法, 不显式调用,会报错

    子类不显式调用父类的构造方法,而父类构造函数初始化了一些属性,就会出现问题 如果子类和父类都有构造函数,子类其实是重写了父类的构造函数,如果不显式调用父类构造函数,父类的构造函数就不会被执行,导致子类 ...

  6. [go]gin框架

    gin参考 Gin框架返回值 // 返回json func main() { r := gin.Default() //方法一: 自己拼接json // gin.H is a shortcut for ...

  7. kotlin陪伴对象

    在kotlin中并没有静态类成员的概念,但并不等于实现类似于静态类成员的功能,陪伴对象可以解决这个问题 fun main(arg: Array<String>) { val create ...

  8. [maven]scope之test

    <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit ...

  9. JMeter 不同线程组间变量传递(亲测 ok)

    JMeter元件都是有作用域的,而变量大多使用正则表达式提取器,要想在不通过线程组件使用变量参数,则需要设置全部变量 JMeter函数助手就提供了一个函数用于设置全局变量属性,实现的功能类似于在用户自 ...

  10. 操作TreeView(咏南工作室)

    {*******************************************************}{                                           ...