您的位置 首页 java

「Java例子」slf4j+logback实现不同环境日志配置和日志级别开关

介绍语

本号主要是 Java 常用关键技术点,通用工具类的分享;以及springboot+springcloud+ Mybatis plus+druid+ mysql + redis +swagger+ maven + docker 等集成框架的技术分享;datax、 kafka 、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!

望各位码友点击关注,冲1000粉。 后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊

如果码友觉得代码太长,可以从头到尾快速扫射一遍,了解大概即可。觉得有用后再转发收藏,以备不时之需。

正文:

不管大公司还是小公司都会有日志混乱的问题,当生产报错时开发人员排查问题,打开日志文件实时查看日志输出,但是由于不规范日志打印的很快,很难发现错误的日志。所以本次分享日志配置知识,由于代码过多所以 文末给出代码库地址,欢迎下载学习。

日志打印类

  import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot. Spring Application;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication
 @Slf4j
 public class DemoLogbackApplication {
 
     public  static   void  main(String[] args) {
         SpringApplication.run(DemoLogbackApplication.class, args);
 
         log.debug("debug...");
         log.info("info...");
         log.warn("warn...");
         log.error("error...");
     }
 }  

打印效果

「Java例子」slf4j+logback实现不同环境日志配置和日志级别开关

不同环境日志

只要配置下面属性即可对应使用相应的日志配置
开发环境 : spring.pro File s.active=dev
测试环境 : spring.profiles.active=test
生产环境: spring.profiles.active=prod

日志级别设置例子

关闭根日志
logging.level. root = off
打印某个包的日志,日志级别为debug
logging.level.javalaoniu.gitee.io.demo.logback = debug
关闭org.apache包的日志
logging.level.org.apache = off

动态设置日志环境

在项目启动时,传递环境参数,让日志自动使用相应的日志配置去打印日志(或记录到文件中) ,启动命令如下:
java -jar javalaoniu.gitee.io.demo.logback.DemoLogbackApplication –spring.profiles.active=dev

日志文件配置

logback-spring.xml

  <?xml version="1.0" encoding="UTF-8"?>  
 <configuration scan="true" scanPeriod="60 seconds" debug="false">  
     <contextName>dadi</contextName>  
     <springProperty scope="context" name="springAppName" source="spring.application.name"/>  
     <property name="log.path" value="logs/app-log"/>  
     <property name="log.maxHistory" value="15"/>  
     <property name="log.maxSize" value="10MB"/>  
     <!--配置输出,以不同颜色区分-->  
     <property name="log.colorPattern"  
               value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %boldCyan([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]) %yellow(%thread) %green(%logger) %L %msg%n"/>  
     <property name="log.pattern"  
               value="%d{yyyy-MM-dd HH:mm:ss} %-5level [${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] %thread %logger %L %msg%n"/>  
   
     <!--输出到控制台-->  
     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">  
         <encoder>  
             <pattern>${log.colorPattern}</pattern>  
         </encoder>  
     </appender>  
   
     <!--输出到文件-->  
     <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">  
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
             <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>  
             <MaxHistory>${log.maxHistory}</MaxHistory>  
         </rollingPolicy>  
         <encoder>  
             <pattern>${log.pattern}</pattern>  
         </encoder>  
         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
             <level>INFO</level>  
             <onMatch>ACCEPT</onMatch>  
             <onMismatch>DENY</onMismatch>  
         </filter>  
   
         <!--日志文件最大的大小-->  
         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">  
             <MaxFileSize>${log.maxSize}</MaxFileSize>  
         </triggeringPolicy>  
     </appender>  
   
     <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">  
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
             <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>  
         </rollingPolicy>  
         <encoder>  
             <pattern>${log.pattern}</pattern>  
         </encoder>  
         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
             <level>ERROR</level>  
             <onMatch>ACCEPT</onMatch>  
             <onMismatch>DENY</onMismatch>  
         </filter>  
   
         <!--日志文件最大的大小-->  
         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">  
             <MaxFileSize>${log.maxSize}</MaxFileSize>  
         </triggeringPolicy>  
     </appender>  
   
     <springProfile name="dev">  
         <!-- 开发环境时激活 -->  
         <!-- 指定输出日志的类,该包下的打印级别是info,在控制台会打印这个包中的info级别以上的信息 -->  
         <logger name="javalaoniu.gitee.io.demo.logback" level="debug" additivity="false">  
             <appender-ref ref="console"/>  
         </logger>  
     </springProfile>  
     <springProfile name="test | default">  
         <!-- 测试环境时激活 -->  
         <!-- 当spring.profiles.active无设置时也用这个打印日志-->  
         <!-- 指定输出日志的类,该包下的打印级别是info,在控制台会打印这个包中的info级别以上的信息 -->  
         <logger name="javalaoniu.gitee.io.demo.logback" level="info" additivity="false">  
             <appender-ref ref="console"/>  
         </logger>  
     </springProfile>  
     <springProfile name="prod">  
         <!-- 生产环境时激活 -->  
         <!-- 指定输出日志的类,该包下的打印级别是info,在控制台会打印这个包中的info级别以上的信息 -->  
         <logger name="javalaoniu.gitee.io.demo.logback" level="error" additivity="false">  
             <appender-ref ref="console"/>  
             <appender-ref ref="file_error"/>  
         </logger>  
     </springProfile>  
   
   
     <!-- 跟打印配置,整个项目输出级别为error-->  
     <root level="error">  
         <appender-ref ref="console"/>  
     </root>  
   
 </configuration>  

application.properties

  logging.level.root = off  
 logging.level.javalaoniu.gitee.io.demo.logback = debug  

日志规则

  • 日志文件命名为logback-spring.xml,这样可以读取application.properties中的配置;
  • logback-spring.xml文件和application.properties中同时设置,则application.properties中的配置覆盖logback-spring.xml中的配置;
  • application.properties中logging.level.root的级别设置不影响其他包的设置,如logging.level.root=info,包设置logging.level.demo.log=warn,则demo.log包的日志级别为warn
  • 日志级别由低到高,ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

gitee地址:

鄙人编码十年多,在项目中也积累了一些工具类,很多工具类在每个项目都有在用,很实用。大部分是鄙人封装的,有些工具类是同事封装的,有些工具类已经不记得是ctrl+c的还是自己封装的了,现在有空就会总结项目中大部分的工具类,分享给各位码友。 如果文章中涉及的代码有侵权行为请通知鄙人处理。

计划是先把工具类整理出来,正所谓工欲善其事,必先利其器。项目中不管是普通单体项目还是多模块maven项目或是分布式微服务,一部分功能模块都是可以重用的,工具类模块就是其中之一。

文章来源:智云一二三科技

文章标题:「Java例子」slf4j+logback实现不同环境日志配置和日志级别开关

文章地址:https://www.zhihuclub.com/194103.shtml

关于作者: 智云科技

热门文章

网站地图