1.xml配置文件语法

由于logback配置文件语法特别灵活,因此无法用DTD或schema进行定义。

1.配置文件基本结构

配置文件基本结构:以<configuration>标签开头,包含0或多个<appender>子标签,包含0或多个<logger>标签,最多只能有一个<root>标签。

注意

从 logback 0.9.17 版起,标签名不区分大小些。比如,<logger>、<Logger>和<LOGGER>都是合法元素且表示同一个意思。按照隐式规则,标签名除了首字母外要区分大小写。因此,<xyz>与<Xyz>等价,但不等价于<xYz>。隐式规则一般遵循 Java 世界里常用的驼峰命名规则。因为很难确定一个标签什么时候与显式动作相关,什么时候又与隐式动作相关,所以很难说 XML 标记是否是大小写敏感。如果你不确定标记名的大小写,就用驼峰命名法,基本不会错。

2.配置logger

配置Logger使用<logger>标签。这里的logger指的是普通logger,并非根logger。

1.logger标签属性

logger标签有3个属性:name、level、additivity。

其中name是必须的,level与additivity属性是可选的。

level属性:设置分配的记录级别。

additivity属性:表示appender的叠加性,默认值为true。具体含义请参考java日志框架系列(2):logback框架详解

level的值:TRACE、DEBUG、INFO、WARN、ERROR、ALL 和 OFF。还可以是一个特殊的字符串“INHERITED”或其同义词“NULL”,表示强制继承上级的级别。

2.logger标签的子标签

 logger标签可以包含的0或多个<appender-ref>子标签,表示这个<appender-ref>子标签所指的appender会被添加到这个logger中。
<appender-ref>标签只有一个属性ref,值为appender的name属性。
<appender-ref ref="appenderName"></appender-ref>

3.配置根logger

<root>标签配置根 logger。

1.root标签的属性

<root>标签只有一个 level 属性。没有 name 属性,因为已经被命名为“ROOT”,也没有additivity属性;因为根logger已经是顶级logger了,没有上级logger。
level属性值:TRACE、DEBUG、INFO、WARN、ERROR、ALL 和 OFF。注意不能设置为“INHERITED” 或“NULL”。属性的值大小写无关。

2.root标签的包含的子标签

<logger>元素可以包含零个或多个<appender-ref>元素。与<logger>元素类似,声明<root>元素后,会先关闭然后移除全部当前 appender,只引用声明了的 appender。如果 root 元素没有引用任何 appender,就会失去所有 appender。

4.配置appender

Appender 用<appender>标签配置。

1.appender标签的属性

属性: name 和 class。
name 属性指定 appender 的名称,class 属性指定 appender 类的全限定名。

2.appender标签的子标签

子标签种类:<layout>标签、<encoder>标签、<filter>标签。这三个标签都是可选的(0或多个)。当appender指向文件时,还可以包含<file>标签,指定写入的文件名。

除了这三个常用元素之外,还可以包含 appender 类的任意数量的 javabean
属性。下图演示了常用结构,注意对 javabean 属性的支持在图中不可见。

1.子标签<layout>

必要属性:class,表示被实例化的Layout类的全限定名。Layout类负责把事件转换为字符串。当Layout指是PatternLayout时,可以省略class属性。

2.子标签<encoder>

必要属性:class,表示被实例化的Encoder类的全限定名。Encoder 负责两件事,一是把事件转换为字节数组,二是把字节数组写入输出流。当Layout指是PatternLayoutEncoder时,可以省略class属性。

3.子标签<filter>

必要属性:class,表示被实例化的Filter类的全限定名。

5.appender累积

默认情况下,appender是累积的,logger会把记录输出到它自身和所有祖先的appender。因此,把一个appender关联到多个logger会导致重复输出。

解决方法:设置logger的additivity属性为false。

6.设置上下文(LoggerContext)名称

每个logger都会关联到logger上下文。默认情况下,logger上下文名称为default。

<contextName>标签:设置logger上下文名称。可以方便区分来自不同应用程序的记录。

注意:一旦设置logger上下文名称后就不能更改了。

在layout模式里添加“%contextName”就会输出上下文名称。

7.变量替换

什么意思呢,举个例子。当你需要将记录输出到文件中的时候,在<appender>中需要用<file>标签指定文件名(通常需要使用绝对路径名),这样固定文件路径可能比较死板,那么还有一种方式,就是通过变量来指定文件路径。

1.简单变量替换

在配置文件中的<configuration>里使用<property>标签设置变量,在<file>标签中使用变量,通过环境变量指定路径就可以,file标签中结合变量与文件名组成文件的完整路径名称。如下图:

2.系统变量替换

示例1:系统变量替换

当需要很多变量时,更方便的做法是在一个单独文件里声明所有变量。如下示例2

示例2:

<configuration> 
  <property file="src/main/java/chapters/configuration/variables1.properties" />
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${USER_HOME}/myApp.log</file>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="FILE" />
  </root>
</configuration>
这个配置文件包含对文件“variables1.properties”的引用,该文件里的变量会被读入logback 配置文件的上下文里。
 

java日志框架系列(4):logback框架xml配置文件语法的更多相关文章

  1. Java日志:集成slf4j和logback

    Java日志方案有很多,包括:java.util.logging.Apache的commons-logging和log4j.slf4j以及logback. 一个大型项目会用到众多第三方jar包,这些j ...

  2. java日志之slf4j与logback简单使用

    最近在开发遇到日志是使用slf4j与logback.xml的配置,所以就记录下来了. 1.导入这几个jar包: Logback 分为三个模块:logback-core,logback-classic, ...

  3. 【光速使用开源框架系列】数据库框架OrmLite

    [关于本系列] 最近看了不少开源框架,网上的资料也非常多,但是我认为了解一个框架最好的方法就是实际使用.本系列博文就是带领大家快速的上手一些常用的开源框架,体会到其作用. 由于作者水平有限,本系列只会 ...

  4. Java日志记录--log4j and logback

    问题的引入: 把所有的信息打印在控制台上不行吗? 01.控制台有行数限制: 02.System.out.println()影响系统性能: 03.如果我们需要对一些用户的行为习惯进行分析,我们找不到用户 ...

  5. Mybatis框架基础入门(四)--SqlMapConfig.xml配置文件简介

    SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器) o ...

  6. logback的xml配置文件模板(超详细)

    <?xml version="1.0" encoding="UTF-8" ?> <!-- 在此未说明属性为非必须的,那就表示属性必须设置 -- ...

  7. Java SSH框架系列:用户登录模块的设计与实现思路

    1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...

  8. spring+mybatis+mina+logback框架搭建

    第一次接触spring,之前从来没有学过spring,所以算是赶鸭子上架,花了差不多一个星期来搭建,中间遇到各种各样的问题,一度觉得这个框架搭建非常麻烦,没有一点技术含量,纯粹就是配置,很低级!但随着 ...

  9. junit小试log4j及xml配置文件说明

        上篇文章介绍了java日志框架使用情况,以及xml配置文件的简单说明.但主要还是根据别人的博客整理一下知识结构,只能是纸上谈兵,本文通过junit测试框架来玩玩log4j. 1.junit+l ...

随机推荐

  1. css添加了原始滚动条要隐藏滚动条的显示

    // 添加伪类 <style> ::-webkit-scrollbar {display:none} </style> <div style=" width:2 ...

  2. python3 调用 beautifulSoup 进行简单的网页处理

    python3 调用 beautifulSoup 进行简单的网页处理 from bs4 import BeautifulSoup file = open('index.html','r',encodi ...

  3. FOI冬令营 Day1

    目录 T1.全连(fc) 传送门 Code  T2.原样输出(copy) 传送门 Code  T3.不同的缩写(diff) 传送门 Code  打算把省冬的题目放上来,主要是防止自己偷懒不订正 T1. ...

  4. linux 安装nginx(转)

    转自https://www.cnblogs.com/xiaochongc/p/11527492.html 步骤: 1. 安装所需环境 a)安装gcc:安装 nginx 需要先将官网下载的源码进行编译, ...

  5. Web API 跨域

    1. NuGet下载## microsoft.aspnet.webapi.cors 2 . Web API 路由中 config.EnableCors(new EnableCorsAttribute( ...

  6. Vue源码分析(一) : new Vue() 做了什么

    Vue源码分析(一) : new Vue() 做了什么 author: @TiffanysBear 在了解new Vue做了什么之前,我们先对Vue源码做一些基础的了解,如果你已经对基础的源码目录设计 ...

  7. appium-FAQ(持续更新...)

    Q1:未安装APP直接启用appium sever,初始化driver :driver = new AndroidDriver(new URL("http://127.0.0.1:4723/ ...

  8. OneDrive

    OneDrive https://onedrive.live.com

  9. spring bean容器加载后执行初始化处理@PostConstruct

    先说业务场景,我在系统启动后想要维护一个List常驻内存,因为我可能经常需要查询它,但它很少更新,而且数据量不大,明显符合缓存的特质,但我又不像引入第三方缓存.现在的问题是,该List的内容是从数据库 ...

  10. 对Mysql数据表本身进行操作

    创建实验环境 mysql> create database test_db; Query OK, 1 row affected (0.00 sec) mysql> use test_db; ...