logback 配置详解(一)——logger、root

2023-05-16

1、根节点<configuration>包含的属性

scan:

当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

scanPeriod:

设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。

debug:

当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

例如:

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

2、根节点<configuration>的子节点

  

 2.1、设置上下文名称:<contextName>

2.1、设置上下文名称:<contextName>

  1. 默认方式:<contextName>
    每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。
     <configuration scan="true" scanPeriod="60 seconds" debug="false">  
          <contextName>myAppName</contextName>  
          <!-- 其他配置省略-->  
    </configuration>

  2. 设置变量: <property>
    用来定义变量值的标签,<property> 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
    例如使用<property>定义上下文名称,然后在<contentName>设置logger上下文时使用。
     <configuration scan="true" scanPeriod="60 seconds" debug="false">  
          <property name="APP_Name" value="myAppName" />   
          <contextName>${APP_Name}</contextName>  
          <!-- 其他配置省略-->  
    </configuration>

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

 2.2、设置loger、root

  1. 设置loger
    用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。
    name:用来指定受此loger约束的某一个包或者具体的某一个类。
    level:用来设置打印级别(日志级别),大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
    addtivity:是否向上级loger传递打印信息。默认是true。

    <loger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。
  2. 设置root
    也是<loger>元素,但是它是根loger。只有一个level属性,应为已经被命名为"root".
    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。

    <root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。
  3. 举例说明-demo
    例如:LogbackDemo.java类
     package logback;  
      
    import org.slf4j.Logger;  
    import org.slf4j.LoggerFactory;  
      
    public class LogbackDemo {  
        private static Logger log = LoggerFactory.getLogger(LogbackDemo.class);  
        public static void main(String[] args) {  
            log.trace("======trace");  
            log.debug("======debug");  
            log.info("======info");  
            log.warn("======warn");  
            log.error("======error");  
        }  
    }

    logback.xml配置文件

    第1种:只配置root

     <configuration>   
       
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
        <!-- encoder 默认配置为PatternLayoutEncoder -->   
        <encoder>   
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   
        </encoder>   
      </appender>   
       
      <root level="INFO">             
        <appender-ref ref="STDOUT" />   
      </root>     
         
     </configuration>

    其中appender的配置表示打印到控制台(稍后详细讲解appender );
    <root level="INFO">将root的打印级别设置为“INFO”,指定了名字为“STDOUT”的appender。

    当执行logback.LogbackDemo类的main方法时,root将级别为“INFO”及大于“INFO”的日志信息交给已经配置好的名为“STDOUT”的appender处理,“STDOUT”appender将信息打印到控制台;
    打印结果如下:

    
    13:30:38.484 [main] INFO logback.LogbackDemo - ======info 
    13:30:38.500 [main] WARN logback.LogbackDemo - ======warn 
    13:30:38.500 [main] ERROR logback.LogbackDemo - ======error
      

    第2种:带有loger的配置,不指定级别,不指定appender,

    <configuration>   
       
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
        <!-- encoder 默认配置为PatternLayoutEncoder -->   
        <encoder>   
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   
        </encoder>   
      </appender>   
       
      <!-- logback为java中的包 -->   
      <logger name="logback"/>   
       
      <root level="DEBUG">             
        <appender-ref ref="STDOUT" />   
      </root>     
         
     </configuration>

    其中appender的配置表示打印到控制台(稍后详细讲解appender );
    <logger name="logback" />将控制logback包下的所有类的日志的打印,但是并没用设置打印级别,所以继承他的上级<root>的日志级别“DEBUG”;
    没有设置addtivity,默认为true,将此loger的打印信息向上级传递;
    没有设置appender,此loger本身不打印任何信息。
    <root level="DEBUG">将root的打印级别设置为“DEBUG”,指定了名字为“STDOUT”的appender。

    当执行logback.LogbackDemo类的main方法时,因为LogbackDemo 在包logback中,所以首先执行<logger name="logback" />,将级别为“DEBUG”及大于“DEBUG”的日志信息传递给root,本身并不打印;
    root接到下级传递的信息,交给已经配置好的名为“STDOUT”的appender处理,“STDOUT”appender将信息打印到控制台;
    打印结果如下:

    
    13:19:15.406 [main] DEBUG logback.LogbackDemo - ======debug  
    13:19:15.406 [main] INFO  logback.LogbackDemo - ======info  
    13:19:15.406 [main] WARN  logback.LogbackDemo - ======warn  
    13:19:15.406 [main] ERROR logback.LogbackDemo - ======error  

     第3种:带有多个loger的配置,指定级别,指定appender 

     <configuration>   
       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
        <!-- encoder 默认配置为PatternLayoutEncoder -->   
        <encoder>   
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   
        </encoder>   
      </appender>   
       
      <!-- logback为java中的包 -->   
      <logger name="logback"/>   
      <!--logback.LogbackDemo:类的全路径 -->   
      <logger name="logback.LogbackDemo" level="INFO" additivity="false">  
        <appender-ref ref="STDOUT"/>  
      </logger>   
        
      <root level="DEBUG">             
        <appender-ref ref="STDOUT" />   
      </root>     
    </configuration>

    其中appender的配置表示打印到控制台(稍后详细讲解appender );

    <logger name="logback" />将控制logback包下的所有类的日志的打印,但是并没用设置打印级别,所以继承他的上级<root>的日志级别“DEBUG”;
    没有设置addtivity,默认为true,将此loger的打印信息向上级传递;
    没有设置appender,此loger本身不打印任何信息。

    <logger name="logback.LogbackDemo" level="INFO" additivity="false">控制logback.LogbackDemo类的日志打印,打印级别为“INFO”;

    additivity属性为false,表示此loger的打印信息不再向上级传递,

    指定了名字为“STDOUT”的appender。

    <root level="DEBUG">将root的打印级别设置为“DEBUG”,指定了名字为“STDOUT”的appender。

    当执行logback.LogbackDemo类的main方法时,先执行<logger name="logback.LogbackDemo" level="INFO" additivity="false">,将级别为“INFO”及大于“INFO”的日志信息交给此loger指定的名为“STDOUT”的appender处理,在控制台中打出日志,不再向次loger的上级 <logger name="logback"/> 传递打印信息;

    <logger name="logback"/>未接到任何打印信息,当然也不会给它的上级root传递任何打印信息;
    打印结果如下:

    
    14:05:35.937 [main] INFO  logback.LogbackDemo - ======info  
    14:05:35.937 [main] WARN  logback.LogbackDemo - ======warn  
    14:05:35.937 [main] ERROR logback.LogbackDemo - ======error  

    如果将<logger name="logback.LogbackDemo" level="INFO" additivity="false">修改为 <logger name="logback.LogbackDemo" level="INFO" additivity="true">那打印结果将是什么呢?
    没错,日志打印了两次,想必大家都知道原因了,因为打印信息向上级传递,logger本身打印一次,root接到后又打印一次
    打印结果如下:

    
    14:09:01.531 [main] INFO  logback.LogbackDemo - ======info  
    14:09:01.531 [main] INFO  logback.LogbackDemo - ======info  
    14:09:01.531 [main] WARN  logback.LogbackDemo - ======warn  
    14:09:01.531 [main] WARN  logback.LogbackDemo - ======warn  
    14:09:01.531 [main] ERROR logback.LogbackDemo - ======error  
    14:09:01.531 [main] ERROR logback.LogbackDemo - ======error   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

logback 配置详解(一)——logger、root 的相关文章

  • spring-boot 从 1.3.2 升级到 1.3.3:logback 问题

    从 spring boot 1 3 2 升级到最近发布的 1 3 3 时 我们遇到了一个问题 我们的应用程序一直在使用以下依赖项 每个都是最新的 没有问题
  • Flink 日志记录限制:如何将日志记录配置传递给 Flink 作业

    我有一个 flink 作业 它使用 logback 作为日志记录框架 因为日志需要发送到logstash 而 logback 有一个 logstash 附加程序 Logstash logback appender Appender 工作正常
  • Logback:用 ******** 和最后两位数字替换 10 位数字

    我在我的模式 logback xml 中使用以下内容来替换日志中的 10 位数字 replace msg d 10 这种方法的一个问题是 它还匹配 11 位数字的前 10 位数字 有没有办法精确匹配10位数字 现在更大的问题是我需要显示这个
  • Logback 从根目录中排除记录器

    我有几个打包好的 想单独记录
  • 停止自定义 logback 异步附加程序的正确方法

    我使用 Amazon 的 Java SDK 创建了 Amazon SQS 和 SNS logback 附加程序 基本附加程序使用同步 Java API 但我还通过扩展创建了两者的异步版本ch qos logback classic Asyn
  • logback 支持 log4j 附加程序吗?

    为 log4j 创建的自定义 Appender 扩展 AppenderSkeleton 可以与 new 一起使用吗logback框架 我知道logback带有自己的一组类似于 log4j 的附加程序 但这是否可以重用现有的附加程序 如何 以
  • 如何在 logback 自动加载 logback.xml 之前定义 logback 变量/属性?

    我的公司有一个环境管理工具 使您能够使用 Java 以编程方式从环境中查找属性 我想利用这个工具来配置 logback 例如 假设我有一个 logback xml 如下 特别是文件附加器部分
  • 无法在 root 设备上运行程序“su”

    我有一部运行 Android N AOSP 版本 的 root 手机 我试图从我的应用程序获取 root 权限 但它不断被拒绝 这是我正在尝试的 java lang Process p runtime exec su DataOutputS
  • 放弃root权限

    我有一个以 root 身份启动的守护进程 因此它可以绑定到低端口 出于安全原因 初始化后我非常希望它放弃 root 权限 谁能指点我已知正确C 中的一段代码可以做到这一点 我阅读了手册页 研究了不同应用程序中的各种实现 它们都是不同的 其中
  • 带有 CompletableFuture 的 MDC 记录器

    我正在使用 MDC Logger 除了一种情况外 它对我来说非常适合 无论我们在代码中的何处使用 CompletableFuture 对于创建的线程 MDC 数据都不会传递到下一个线程 因此日志会失败 例如 在代码中我使用下面的代码片段来创
  • PHP:如何访问根目录之外的下载文件夹? [复制]

    这个问题在这里已经有答案了 我如何创建一个 PHP 脚本 页面 允许会员 买家下载存储在根目录之外的下载文件夹中的压缩文件 产品 我正在使用 Apache 服务器 请帮忙 谢谢 保罗 G 您可能会在 soac 提供的链接中找到一些更好的信息
  • Android 屏幕共享编程(Root)

    在 Android gt 5 中 是否可以从 root adb shell 进行屏幕共享 而无需通过 miracast 或 chromecast 进行用户交互 我正在寻找启用 禁用此功能的命令https support google com
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • Android Root 执行 su 带参数

    我在使用参数执行 su 时遇到问题 包含空格 我的 Command java 看起来像这样 public class Command Process process public String executeCommand String c
  • 禁用 com.android.systemui 是否安全?

    我发现 Android 最近的应用程序对话框可以通过禁用来禁用 包裹com android systemui 我想在信息亭模式下运行我的 已取得 root 权限的 设备 因此长按时不要显示最近的应用程序对话框至关重要 现在 到底是什么com
  • 越狱后,iOS应用程序会以root权限运行吗?

    一旦 iOS 设备越狱 我们就可以构建越狱应用程序 使用 theos 并将其安装在 Applications预加载应用程序以 root 权限运行的目录 如果应用程序是使用 Xcode 构建的 一旦安装 它就会进入 private var m
  • 如何设置 commons-logging 来使用 logback?

    我们使用 slf4j logback 并且碰巧有一些使用 commons logging 的第三方库 如何设置它以使用 logback 答案是不要使用 commons logging jar 因为 SLF4J 的设计目的与 commons
  • Spring 框架 application.properties 与 logback.xml

    我正在使用 Spring 和 Spring boot 最近 在尝试使用 EhCache 时 我尝试为 EhCache 启用日志记录 在 application properties 中设置日志级别 logging level org spr
  • 如何根据上下文名称有条件地配置 logback?

    我有三个独立的项目 每个项目都有自己的嵌入式 logback xml 文件 这些文件中的每一个都包含用户主目录中的通用日志记录配置文件
  • 如何以非root用户身份运行node.js?

    我正在运行一个 node js 服务器 它将服务端口 80 上的请求等 显然 这需要应用程序以 root 身份运行 在 Linux 上 正在看这个帖子 http syskall com dont run node dot js as roo

随机推荐