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. 决策单调性优化DP学习笔记

    用途 废话,当然是在DP式子满足某些性质的时候来优化复杂度-- 定义 对于\(j\)往大于\(j\)的\(i\)转移,可以表示成一个关于\(i\)的函数\(f_j(i)\),也就是\(dp_i=\ma ...

  2. jquery validate 表单验证插件 代码

    /* 表单验证 */ var signupFormValidator = $("#signupForm").validate({ /* 自定义验证规则 */ rules : { o ...

  3. 《Glibc内存管理》笔记DAY1

    目录 x86_64栈和mmap固定映射地址 内存的延迟分配 内核数据结构 mm_struct Heap 操作相关函数 Mmap 映射区域操作相关函数 内容来源 x86_64栈和mmap固定映射地址   ...

  4. sqlserver 动态sql执行execute和sp_executesql

    sp_executesql的运用 书写语法要点: exec sp_executesql @sql,N’参数1 类型1,参数2 类型2,参数3 类型3 OUTPUT’,参数1,参数2,参数3 OUTPU ...

  5. ubuntu12.04 64位安装opencv-2.4.9

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/dengshuai_super/artic ...

  6. Android下拉涮新第三方通用控件

    Android下拉涮新第三方通用控件https://github.com/chrisbanes/Android-PullToRefresh Pull To Refresh Views for Andr ...

  7. mysql插入数据时 insert IGNORE、ON DUPLICATE KEY UPDATE、replace into

    转: mysql insert时几个操作DELAYED .IGNORE.ON DUPLICATE KEY UPDATE的区别 博客分类: mysql基础应用   mysql insert时几个操作DE ...

  8. Maven打包SpringBoot

    Pom文件提交plugin <build> <finalName>Site</finalName><!--文件名可自定义--> <plugins& ...

  9. 123457123456#0#-----com.threeapp.renZheDadishu02-----忍者版打地鼠

    com.threeapp.renZheDadishu02-----忍者版打地鼠

  10. matlab学习——05插值和拟合(一维二维插值,拟合)

    05插值和拟合 1.一维插值 (1) 机床加工零件,试用分段线性和三次样条两种插值方法计算.并求x=0处的曲线斜率和13<=x<=15范围内y的最小值. x0=[0 3 5 7 9 11 ...