当前位置: 首页 > 科技观察

一篇文章了解Logback的配置

时间:2023-03-12 06:32:08 科技观察

前言文字已收录在我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger种一棵树最好的时间是十年前,其次是为什么现在要写这个?是这样的,每次小六六建系统都会涉及到这块的配置,然后才发现自己建了这么多系统。大部分情况下,原来是通过copy来完成的,然后在这次搭建的过程中,对这些配置有了一些了解,所以打算把一些重点分享给大家,让大家有更深入的了解了解Java项目的日志!当然这里的文章想必也能让你对logback的配置有一个清晰的认识!尽量写得直截了当!文章拟从以下几个方面来描述官网文档logback的常用配置。xml参考配置(实战)开发时,小六六自己的特殊用法(实战)参考文档,先把参考文档贴出来给大家!但我认为你不应该读它们,哈哈。我也是一样,看不懂官方文档logback.xml常用配置详细常用节点结构图:相信大家对这张图应该不陌生,也就是spring-logback.xml中我们需要配置的文件是这些配置,如下先详细说一下。根节点配置包含以下三个属性scan:当该属性设置为true时,如果配置文件发生变化,将重新加载。默认值是true。scanPeriod:设置监控配置文件是否被修改的时间间隔。如果没有给出时间单位,则默认单位为毫秒。此属性在scan为真时生效。默认时间间隔为1分钟。debug:当该属性设置为true时,会打印logback的内部日志信息,可以实时查看logback的运行状态。默认值为假。子节点appender负责写日志,有两个必须的属性name和班级。name指定appender的名称,class指定appender的完全限定名称。下面小六六就给大家介绍一些我们常用的appender!工作中肯定用到的ConsoleAppender,将日志输出到consoleencoder:格式化日志。${CONSOLE_LOG_PATTERN}FileAppender:将日志添加到文件中file:要写入的文件名,可以是相对目录,也可以是绝对目录。如果上级目录不存在,则自动创建,无默认值。append:如果为true,日志追加到文件末尾,如果为false,现有文件将被清除,默认为true。编码器:格式化记录的事件。prudent:如果为true,日志会被安全的写入文件,即使其他FileAppenders也在写入这个文件,效率较低,默认为false。<配置>testFile.logtrue%-4relative[%thread]%-5level%logger{35}-%msg%nRollingFileAppender滚动记录文件,先将日志记录到指定文件中,当满足一定条件时,再将日志记录到其他文件中。这个小六六认为是用的最多的文件:要写入的文件名,可以是相对目录也可以是绝对目录。如果父目录不存在,会自动创建,没有默认值。append:如果为true,日志追加到文件末尾,如果为false,现有文件将被清除,默认为true。rollingPolicy:确定发生滚动时RollingFileAppender的行为,涉及文件移动和重命名。属性类定义了具体的滚动策略类class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy":最常用的滚动策略,根据时间制定滚动策略,同时负责滚动和启动滚动。${log.path}/dataBi.dat${log.path}/dataBi.dat.%d{yyyyMMdd}.gz30<编码器><字符集>UTF-8%date|%msg%nclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy":查看当前的大小activefile,如果超过指定大小,它会告诉RollingFileAppender触发当前active文件滚动${log.path}/debug.log${log.path}/%d{yyyy-MM,aux}/debug。%d{yyyy-MM-dd}.%i.log.gz50MB30%date[%线程]%-5level[%logger{50}]%file:%line-%msg%n子节点logger用于设置某个包或特定类的日志打印级别,以及指定logger只有一个name属性,一个可选的level和一个可选的addtivity属性可以包含零个或多个元素,标识这个appender将被添加到这个logger。name:用来指定这个loger所绑定的某个包或者特定的类。level:用于设置打印级别,不区分大小写:TRACE、DEBUG、INFO、WARN、ERROR、ALL和OFF,以及一个特殊值INHERITED或同义词NULL,代表执行上级。如果没有设置这个属性,当前的loger会继承parent的级别。addtivity:是否将打印信息传递给上级记录器。默认为真。可以包含零个或多个appender-ref元素,表示此appender将添加到此记录器。像我们的bi日志,一般这种标准化、流线型的日志。子节点root也是一个logger元素,但它是rootloger,都是上级。level属性只有一个,因为名字已经命名为“root”,已经是最高级别了。好了,上面就是我们比较重要的了就是几个元素,如果有那么一两个小元素,小六六就不给大家展示了。logback.xml配置示例%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log30%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n10MB小案例加深配置的理解<encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder">%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}。log30%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n10MB开发过程中,小六六的一些特殊用法(实战)第一个是在日志中加入traceId,这样的好处是可以当日志收集到日志平台??,可以很好的查看整个过程${graylogHost}${graylogPort}${originHost}falsetruetruefalsefalsetrue%m%nopex%m%napp_name:${appName}app_version:${appVersion}os_arch:${os.arch}os_name:${os.name}os_version:${os.version}uri:%X{uri}uid:%X{uid}ip:%X{ip}traceId:%X{traceId}${log.path}/dataBi.dat${log.path}/dataBi.dat.%d{yyyyMMdd}.gz30<编码器><字符集>UTF-8%date|%msg%n${log.path}/dataDi.dat${log.path}/dataDi.dat.%d{yyyyMMdd}.gz30<编码器>UTF-8%date|%msg%n类似这样。最后,我是小六六。三天打鱼,两天晒网。今天就到这里!