使用logback输出日志总结

1.日志级别

logback有5种级别,分别是TRACE 、 DEBUG 、INFO 、WARN 、ERROR,定义于ch.qos.logback.classic.Level类中,如下:

在这里插入图片描述
如上图:

  • Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出.

  • Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.

  • Info:消息在粗粒度级别上突出强调应用程序的运行过程.

  • Warn:输出警告及warn以下级别的日志.

  • Error:输出错误信息日志.

  • OFF:表示关闭全部日志.

  • ALL:表示开启全部日志.

等级从低到高分别是TRACE < DEBUG < INFO < WARN < ERROR,如果logger没有被分配级别,name它将从有被分配级别的最近的父类那里继承级别,root logger默认级别是DEBUG;日志输出的时候,级别大的会输出,根据当前ROOT 级别,日志输出时,级别高于root默认的级别时会输出,比如如果root的级别是DEBUG,那么会输出DEBUG以及DEBUG级别以上的日志,也就是会输出DEBUG ,INFO , WARN 和ERROR。

2.用法介绍

配置文件读取步骤:

  1. 尝试在classpath下查找文件logback-test.xml
  2. 如果logback-test.xml文件不存在,尝试在classpath下查找logback.xml
  3. 如果两个文件都不存在,LogBack用BasicConfiguration自动对自己进行最小化配置,这样不需要添加任何配置就可以输出日志信息。
2.1简单的控制台输出日志(无配置文件,自动对自己进行最小化配置)

简单的控制台输出只需要两步操作,如下图所示:
在这里插入图片描述
在这里插入图片描述

2.2简单的控制台输出日志(配置文件)

配置文件名阔以自己指定,也可以用系统默认的配置文件名,logback-test.xml或logback.xml都行。

<?xml version="1.0" encoding="UTF-8" ?>

<!--scan默认值为true,表示配置文件如果发生改变,将会被重新加载-->
<!--scanPeriod 当上述scan参数为true时,此属性才生效,设置时间间隔,用来监测配置文件是否有被修改,单位默认是毫秒,默认的时间间隔是1分钟 -->
<!--debug 默认值为false,当此属性设置为true时,将打印出logback内部日志信息,实时查看logback内部运行状态-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">   
	<!-- ConsoleAppender 控制台输出日志 -->
    <appender name="console_ysw" class="ch.qos.logback.core.ConsoleAppender">        
    	<encoder>            
    	<!-- 设置日志输出格式 %d表示日期,%-5level表示级别从左显示5个字符宽度,%thread表示线程名,%logger日志输出所在的类的全限定类名,%msg:日志消息,%n是换行符-->            
    		<pattern>                
    			%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger - %msg%n            
    		</pattern>        
    	</encoder>    
    </appender> 
       
    <!-- 根输出级别为DEBUG,控制台中将出现包含debug及以上级别的日志-->   
    <!-- 日志输出级别 -->    
    <root level="debug">        
    	<!-- ref值与上面的appender标签的name相对应 -->        
    	<appender-ref ref="console_ysw" />    
    </root>
</configuration>

如下图为输出结果,大家阔以对照着刚刚的格式%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger - %msg%n 对比着看一看,
在这里插入图片描述

2.3把日志输出到文件中(按天输出,一天一个日志文件)
<?xml version="1.0" encoding="UTF-8" ?>

<!--scan默认值为true,表示配置文件如果发生改变,将会被重新加载-->
<!--scanPeriod 当上述scan参数为true时,此属性才生效,设置时间间隔,用来监测配置文件是否有被修改,单位默认是毫秒,默认的时间间隔是1分钟 -->
<!--debug 默认值为false,当此属性设置为true时,将打印出logback内部日志信息,实时查看logback内部运行状态-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 定义日志文件的存储地址,配置的./logs_ysw作为日志的输出根目录,所以LogBack自动在项目根目录下创建名叫做logs_ysw的文件夹-->
   	<!-- 使用property来定义常量,即以key-value的形式存取,需要使用${}进行取值,比如${LOG_HOME} -->
    <property name="LOG_HOME" value="./logs_ysw"/>

    <!-- 按照每天生成日志文件 -->
    <appender name="file_ysw" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 设置日志输出格式 %d表示日期,%-5level表示级别从左显示5个字符宽度,%thread表示线程名,%logger日志输出所在的类的全限定类名,%msg:日志消息,%n是换行符-->
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger - %msg%n
            </pattern>
        </encoder>
        <!-- TimeBasedRollingPolicy按照时间进行拆分日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名  -->
            <!-- %d表示按天拆分文件,即每天新生成一个日志文件 -->
            <FileNamePattern>${LOG_HOME}/mylog%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- 日志文件保留天数(天) -->
            <MaxHistory>60</MaxHistory>
        </rollingPolicy>
        <!-- 日志文件最大的大小 -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>20MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 日志输出级别 -->
    <!-- 根输出级别为DEBUG,文件中将出现包含debug及以上级别的日志-->
    <root level="debug">
        <!-- ref值与上面的appender标签的name相对应 -->
        <appender-ref ref="file_ysw" />
    </root>
</configuration>

在这里我定义的输出格式与控制输出格式是一样的,配置的./logs_ysw作为日志的输出根目录,所以LogBack自动在项目根目录下创建名叫做logs_ysw的文件夹,并且项目启动时第一次记录日志时会自动创建根据我们的命名方式的文件。
日志文件及内容如下图所示:
在这里插入图片描述
在这里插入图片描述

2.4自定义logger对象(以身试坑,重难点)

我们创建的对象默认没有父的话,那么默认的父对象为root logger,我们也可以自定义logger对象

<logger name="com.ysw"></logger>

name属性表示com.ysw包下的所有子包和类都属于上述自定义logger对象的子实现,也会是说上述logger为父类logger对象

<logger name="com.ysw" level="info" additivity="false"></logger>

其中还有两个属性,

  • 其中additivity表示自定义logger是否继承root logger,为true时,表示继承root logger,表示当前logger的appender-ref和rootLogger的appender-ref都有效。(因为name="com.ysw,所以logger在com.ysw包子包或其子类中有效,logger是有作用范围的,其他包没有logger,还是默认用root打印输出
    如果写了 root标签并且里面有appender-ref子标签,则会输出两次,如图:

    在这里插入图片描述
    为false时,表示不继承root logger,表示只用当前logger的appender-ref ,日志只输出一次additivity默认值为true

  • level为日志级别,控制大于等于该日志级别的进行输出

另外当同时出现root 和自定义的logger时,

  1. 如果自定义的logger中additivity属性为false,即自定义logger不继承root logger,则此时root logger失效,使用自定义的logger进行打印,如下图:
    配置文件:
    在这里插入图片描述
    打印结果:(此时additivity为false,即自定义logger不继承root logger,root logger为info类型,自定义logger为debug类型,最终还是有debug类型的日志输出)
    在这里插入图片描述
  2. 如果自定义的logger中additivity属性为true,即自定义logger继承root logger,root logger中的内容(比如appender-ref)将被继承到自定义的logger中进行打印输出

如果没有自定义logger,系统将使用默认的root logger进行输出日志

2.5异步日志输出

在实际的开发过程中我们经常使用到的是异步的日志输出,同步的日志输出需要等待日志打印完毕后才会进行下一步操作,会影响到程序的性能,所以这里简单接受一下异步日志的用法,其实也比较容易,下面举例用异步日志输出到控制台:

<?xml version="1.0" encoding="UTF-8" ?>

<!--scan默认值为true,表示配置文件如果发生改变,将会被重新加载-->
<!--scanPeriod 当上述scan参数为true时,此属性才生效,设置时间间隔,用来监测配置文件是否有被修改,单位默认是毫秒,默认的时间间隔是1分钟 -->
<!--debug 默认值为false,当此属性设置为true时,将打印出logback内部日志信息,实时查看logback内部运行状态-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 定义日志文件的存储地址,不要在logback的配置中使用相对路径 -->
    <property name="LOG_HOME" value="./logs_ysw"/>

    <!-- ConsoleAppender 控制台输出日志 -->
    <appender name="console_ysw" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 设置日志输出格式 %d表示日期,%-5level表示级别从左显示5个字符宽度,%thread表示线程名,%logger日志输出所在的类的全限定类名,%msg:日志消息,%n是换行符-->
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger - %msg%n
            </pattern>
        </encoder>
    </appender>

   <!-- 异步日志输出 -->
    <appender name="async_ysw" class="ch.qos.logback.classic.AsyncAppender">
  <!-- ref值与上面的appender标签的name相对应 -->
        <appender-ref ref="console_ysw" />
    </appender>
 
    <!-- 日志输出级别 -->
    <root level="debug">
        <!-- ref值与上面的appender标签的name相对应 -->
        <appender-ref ref="async_ysw" />
    </root>
</configuration>
2.6 屏蔽记录日志

在项目的配置文件(application.yml 或 application.properties)中进行如下配置,在application.yml配置文件内,off必须添加双引号,否则不会生效:

logging:
  level:
    com.ysw.logback.test:  'off'

添加如上配置后,就会屏蔽掉com.ysw.logback.test包下的日志打印,也就是说com.ysw.logback.test包下的所有类都不会打印出日志了。

3.配置文件总结

为方便以后在用到的时候阔以快速查看其配置文件的配置用法,这里进行了汇总,每个配置上面都有一段注释,大家阔以参考使用:
ps:以下内容参考了http://www.51gjie.com

<?xml version="1.0" encoding="UTF-8" ?>

<!-- 级别从高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
<!-- scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
<!-- scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 动态日志级别 -->
    <jmxConfigurator/>

    <!-- 定义常量,类似与key-value的形式,log.home_dir作为日志文件的输出路径,之后用${log.home_dir}取出-->
    <property name="log.home_dir" value="/usr/local/springboot/log"/>
    <!-- 定义日志文件的输出文件名-->
    <property name="log.app_name" value="http-demo"/>
    <!-- 定义常量log.maxHistory,日志最大的历史 30天 -->
    <property name="log.maxHistory" value="30"/>
    <!-- 定义日志根级别,默认是DEBUG级别,我们也可以主动去定义,在下面会用到-->
    <property name="log.level" value="debug"/>
    <!-- 定义日志文件最大的大小-->
    <property name="log.maxSize" value="5MB" />

    <!-- ConsoleAppender 控制台输出日志 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                <!-- 设置日志输出格式 -->
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger - %msg%n
            </pattern>
        </encoder>
    </appender>

    <!-- ERROR级别日志 -->
    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志拆分记录到其他文件 RollingFileAppender -->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 过滤器,只记录WARN级别的日志 -->
        <!-- 过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 设置过滤级别 -->
            <level>ERROR</level>
            <!-- 用于配置符合过滤条件的操作,超过ERROR级别的日志输出到日志文件当中-->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合过滤条件的操作,没超过ERROR级别的日志进行拦截 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责触发滚动, 即可以根据时间和文件大小进行拆分 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志输出位置 可相对、和绝对路径 -->
            <fileNamePattern>
            	<!-- 下面中的%d表示安装天进行拆分日志文件,%i表示当某一天中日志文件大小超过 MaxFileSize标签规定的大小,i的取值会从1,2,3.....n这样的进行命令差分后的文件-->
                ${log.home_dir}/error/%d{yyyy-MM-dd}/${log.app_name}-%i.log
            </fileNamePattern>
            <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,且<maxHistory>是30天,
            则只保存最近30天的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 -->
            <maxHistory>${log.maxHistory}</maxHistory>
            <!--按照文件大小进行拆分-->
            <MaxFileSize>${log.maxSize}</MaxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>
                <!-- 设置日志输出格式 -->
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <!-- INFO级别日志 appender -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.home_dir}/info/%d{yyyy-MM-dd}/${log.app_name}-%i.log</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>
            <MaxFileSize>${log.maxSize}</MaxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern>
        </encoder>
    </appender>


    <!-- DEBUG级别日志 appender -->
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.home_dir}/debug/%d{yyyy-MM-dd}/${log.app_name}-%i.log</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>
            <MaxFileSize>${log.maxSize}</MaxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <!--设置一个向上传递的appender,所有级别的日志都会输出-->
    <appender name="ysw_all" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.home_dir}/app/%d{yyyy-MM-dd}/${log.app_name}-%i.log</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>
            <MaxFileSize>${log.maxSize}</MaxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern>
        </encoder>
    </appender>

	<!-- name:用来指定受此loger约束的某一个包或者具体的某一个类。
	level:用来设置打印级别(日志级别),大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
	addtivity:是否向上级loger传递打印信息。默认是true。 -->
    <!--org.springframework.web包下的类的日志输出-->
    <logger name="org.springframework.web" additivity="false" level="INFO">
        <appender-ref ref="INFO"/>
    </logger>
    <!--com.zgd包下的类的日志输出-->
    <logger name="com.zgd" additivity="false" level="DEBUG" >
        <appender-ref ref="ysw_all" />
        <appender-ref ref="ERROR" />
        <!--打印控制台-->
        <appender-ref ref="CONSOLE" />
    </logger>

	<!-- root级别   DEBUG -->
    <root>
        <!-- 打印debug级别日志及以上级别日志 -->
        <level value="${log.level}"/>
        <!-- 控制台输出 -->
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

完结
于2021.8.5

  • 25
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
### 回答1: Logback是一个Java日志框架,使用它可以方便地记录程序的运行过程和异常信息。要使用Logback,首先需要将logback.jar包下载到本地。 首先,我们可以到Logback官方网站上下载logback.jar包。在网站上,你可以找到Logback的下载页面,其中包含了各个版本的Logback的jar包下载链接。你可以根据自己的需求选择合适的版本进行下载。一般来说,建议选择最新版本的jar包,因为新版本可能修复了之前版本存在的一些问题,并且提供了新的功能。 另外,Logback也可以通过多种方式进行下载。比如,你可以在Maven等构建工具的配置文件中添加相关的依赖信息,然后通过构建工具自动下载和管理。你也可以通过在IDE(如eclipse或者IntelliJ IDEA)的项目中设置相关的依赖信息,然后IDE会自动下载并导入jar包到项目中。 下载完成后,将logback.jar包添加到你的项目中。具体的添加方式取决于你所使用的IDE或构建工具,一般来说,你可以将jar包拖拽到项目中,或者在IDE的项目设置中添加依赖。 完成这些步骤后,你就可以在项目中使用Logback框架了。你可以通过配置Logback的相关配置文件,指定日志输出格式、输出级别等信息。然后,在代码中使用Logback提供的API来记录日志信息。 总而言之,下载Logback的jar包可以通过官网下载或使用构建工具,然后将其添加到项目中即可开始使用Logback来记录日志。 ### 回答2: logback jar包是一个用于Java应用程序的日志记录框架,它支持各种日志级别日志输出格式和日志归档等功能。要下载logback jar包,可以采取以下步骤: 1. 打开Maven中央仓库网站(https://mvnrepository.com/),在搜索框中输入"logback"。 2. 在搜索结果中找到适合你项目的logback版本,通常选择较新的稳定版本。 3. 点击所选版本的名称或链接。 4. 进入版本页面后,你会看到相关的依赖信息和可用的下载选项。 5. 点击最合适的下载选项(通常是.jar文件)。 6. 下载完成后,将下载的logback jar包文件添加到你的项目中。 另外,如果你使用的是其他构建工具如Gradle或Ant,则可以在相应的构建文件中配置logback的依赖信息,以使构建工具从合适的仓库下载jar包。请根据你项目的具体情况进行调整。 总结一下,要下载logback jar包,你需要在Maven中央仓库或其他仓库网站搜索并选择合适版本,然后进行下载并添加到你的项目中。 ### 回答3: 要下载logback的jar包,可以按照以下步骤进行: 第一步,打开网页浏览器。可以使用任何一种常用的浏览器,比如Google Chrome、Mozilla Firefox、Safari等。 第二步,进入Maven Repository网站。Maven Repository是一个广泛使用的Java库存储库,其中包含了大量的Java库和框架的jar包。你可以通过搜索框直接搜索logback,也可以通过顶部的菜单选择相应的类别进行搜索。 第三步,找到logback的jar包。在搜索结果中,你应该能找到logback的相关条目。选择最新稳定版本的jar包。这通常是具有后缀名为.jar的文件。 第四步,下载jar包。在选择了正确的jar包后,点击下载按钮。这将会开始下载jar包到你的计算机中。 第五步,将jar包添加到项目中。将下载的logback的jar包复制到你的项目中。这可以通过拖放文件到项目文件夹中,或通过使用IDE工具如Eclipse或Intellij IDEA的jar包管理工具来完成。 第六步,更新项目依赖。打开你的项目的构建文件(比如pom.xml,如果你是使用Maven进行构建的话),将logback的依赖添加到项目中。这样就可以在项目中使用logback了。 请记住,下载的jar包的版本应与你的项目和其他依赖库相匹配,以确保兼容性和稳定性。另外,还应该注意logback的相关文档和使用指南,以了解如何正确配置和使用logback

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrYuShiwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值