美文网首页
SpringBoot整合Slf4j+logback日志框架(转)

SpringBoot整合Slf4j+logback日志框架(转)

作者: 是我拉叔 | 来源:发表于2019-10-12 09:46 被阅读0次

    https://www.cnblogs.com/gavincoder/p/10090592.html

    SpringBoot整合Slf4j+logback日志框架

    一、Slf4j简单介绍与优势

    1、介绍

      Slf4j的全称是Simple Loging Facade For Java(Java简单日志门面),它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已。所以单独的Slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如apache的org.apache.log4j.Logger,jdk自带的java.util.logging.Logger等。

    2、优势

    解耦客户端

      Slf4j只是一种接口,它本身并不关心你底层使用的是什么日志实现方案,所以它支持各种日志实现方案。简单的说,只要我们在类库中使用Slf4j打日志,那么底层使用什么日志实现方案是使用者决定的,怎么决定?依靠配置文件和jar库。

    提高效率

      Slf4j打印日志使用了{}占位符,这样就不会有字符串拼接操作,减少了无用ring对象的数量,节省了内存,也提高了时间效率,同时编码更加方便。

     3、log level

    Slf4j有四个级别的log level可供选择,级别从上到下由低到高,优先级高的将被打印出来。

    Debug

    简单来说,对程序调试有利的信息都可以debug输出

    info

    对用户有用的信息

    warn

    可能会导致错误的信息

    error

    顾名思义,发生错误的地方

     

    二、SpringBoot整合Slf4j+logback

      logback和log4j以及log4j2三者,推荐使用logback,因为logback的效率显著高于log4j,而且logback也是Springboot推荐并且默认使用的日志系统。

    1、配置依赖

    <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId></dependency>

    2、配置logback

    在  src\main\resources 路径下创建logback.xml配置文件。

    <?xml version="1.0" encoding="UTF-8"?><configuration debug="false"><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="LOG_HOME" value="/home"/><!--控制台日志, 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!--文件日志, 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!-- show parameters for hibernate sql 专为 Hibernate 定制 --><logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/><logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG"/><logger name="org.hibernate.SQL" level="DEBUG"/><logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/><logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/><!--myibatis log configure--><logger name="com.apache.ibatis" level="TRACE"/><logger name="java.sql.Connection" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/><!-- 日志输出级别 --><root level="DEBUG"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/></root></configuration>

    3、配置文件日志

    系统日志全部写在一个文件会导致文件越来越大,这时候可以用文件日志来切分控制台日志,在logback.xml中添加:

    <appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>/usr/local/log/app.log</File><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- daily rollover --><FileNamePattern>logback.%d{yyyy-MM-dd}.log</FileNamePattern><!-- keep 30 days' worth of history --><maxHistory>30</maxHistory></rollingPolicy><encoder><Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern></encoder></appender>

    注:

    logback.%d{yyyy-MM-dd}.log定义了日志的切分方式——把每一天的日志归档到一个文件中,30表示只保留最近30天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd HH:mm:ss SSS}来定义精确到分的日志切分方式。

    三、Springboot应用使用Slf4j+logback

    示例:

    @RestController

    @RequestMapping("/Test")publicclass HelloWorld {

        @Autowired

        private HelloService helloService;

        privatefinalstaticLogger logger = LoggerFactory.getLogger(HelloWorld.class);

    @GetMapping(

    "/hello")

        public String sayHello(){

            logger.info("hello Sfl4j + logback......");

            return helloService.sayHello();

        }

    }

    运行效果:

    参考文献

    https://blog.csdn.net/u012806787/article/details/78725259

    相关文章

      网友评论

          本文标题:SpringBoot整合Slf4j+logback日志框架(转)

          本文链接:https://www.haomeiwen.com/subject/einfmctx.html