springboot日志

Easter79
• 阅读 578

原则:

代码中尽量使用slf4j门面

尽量采用注解方式@Slf4j节省代码量

springboot日志

步骤:

1.排除springboot默认日志(logback)

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
        </exclusions>
</dependency>

2.引入slf4j和log4j2的jar包

<dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.8.0-beta2</version>
</dependency>

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

3.添加log4j2的配置文件log4j2-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <!--http://blog.csdn.net/u013066244/article/details/72461105-->
    <!--https://github.com/alibaba/druid/wiki/Druid中使用log4j2进行日志输出-->
    <Properties>
        <!-- 配置日志文件输出目录 -->
        <property name="LOG_HOME">/cwdata/logs</property>
        <property name="SERVER_NAME">first</property>
    </Properties>

    <Appenders>
        <!--这个输出控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level [%class{36}.%M: %L] - %msg%n" />
        </Console>

        <!-- 按天第天备份一个日志 -->
        <RollingFile name="RollingFile" fileName="${LOG_HOME}/xxx-web.log"
                     filePattern="${LOG_HOME}/xxx-web%d{yyyy-MM-dd}_%i.log">
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level [%class{36}.%M: %L] - %msg%n" />
            <Policies>
                <!-- 每24小时更新一次 -->
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                <SizeBasedTriggeringPolicy size="300 MB"/>
            </Policies>
            <!-- 最多备份30个 -->
            <DefaultRolloverStrategy fileIndex="max" max="60" />
        </RollingFile>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <!-- 
        <File name="Log_test" fileName="${LOG_HOME}/test.log" append="false">
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%class{36}.%M: %L] - %msg%n"/>
        </File>
         -->

    </Appenders>
    
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
            <!--<AppenderRef ref="AsyncMail"/>-->
        </Root>

        <!--<logger name="com.cloudwave.skm" level="error" additivity="false">-->
            <!--<AppenderRef ref="AsyncMail"/>-->
        <!--</logger>-->

        <logger name="org.springframework" level="info" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </logger>
        <logger name="org.mybatis" level="debug" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </logger>
        <logger name="org.mybatis.spring" level="info" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </logger>
        <logger name="java.sql.Connection" level="info" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </logger>
        <logger name="java.sql.Statement" level="info" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </logger>
        <logger name="java.sql.PreparedStatement" level="info" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </logger>
        <logger name="java.sql.ResultSet" level="info" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </logger>
        <logger name="com.cloudwave.skm.db.mapper" level="TRACE" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </logger>
        
        <logger name="org.codehaus.jackson" level="error" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </logger>
        
        <!--记录druid-sql的记录-->
        <logger name="druid.sql.Statement" level="debug" additivity="false">
            <AppenderRef ref="Console" />
            <appender-ref ref="RollingFile"/>
        </logger>
        <logger name="druid.sql.Statement" level="debug" additivity="false">
            <AppenderRef ref="Console" />
            <appender-ref ref="RollingFile"/>
        </logger>
        
         <!--log4j2 自带过滤日志-->
        <Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
        <Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
        <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
        <logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
        <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
        <Logger name="org.crsh.plugin" level="warn" />
        <logger name="org.crsh.ssh" level="warn"/>
        <Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
        <Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
        <logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/>
        <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
        <logger name="org.thymeleaf" level="warn"/>
    </Loggers>
</Configuration>

4.在application.yml中配置日志属性

# 日志配置
logging:
# 指定日志配置文件位置
  config: classpath:log4j2-spring.xml
# 设置具体打印策略
  level:
    com.xx: info
    org.springframework: WARN
    org.spring.springboot.dao: debug

5.代码中使用

maven添加lombok插件依赖,在任意类中加上@Slf4j注解,然后使用log.info()打印日志

springboot日志

点赞
收藏
评论区
推荐文章
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Souleigh ✨ Souleigh ✨
3年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
Wesley13 Wesley13
3年前
Java日志体系(八)最佳实践
java常用日志框架关系Log4j2与Log4j1发生了很大的变化,Log4j2不兼容Log4j1。Logback必须配合Slf4j使用。由于Logback和Slf4j是同一个作者,其兼容性不言而喻。比较常用的组合使用方式是Slf4j与Logback组合使用,Commons
Stella981 Stella981
3年前
LogBack入门实践
一、简介LogBack是一个日志框架,它是Log4j作者Ceki的又一个日志组件。LogBack,Slf4j,Log4j之间的关系  slf4j是TheSimpleLoggingFacadeforJava的简称,是一个简单日志门面抽象框架,它本身只提供了日志FacadeAPI和一个简单的日志类实现,一般常配合Lo
Stella981 Stella981
3年前
Spring Boot日志集成
!(https://oscimg.oschina.net/oscnet/1bde8e8d00e848be8b84e9d1d44c9e5c.jpg)SpringBoot日志框架SpringBoot支持JavaUtilLogging,Log4j2,Lockback作为日志框架,如果你使用star
Stella981 Stella981
3年前
Akka系列之Logging
在akka中如何使用logakka中显示日志不需要第三方jar,直接使用akka的Logging即可,Logging默认是输出到STDOUT,当然你也可以使用第三方插件如SLF4J来记录日志,Logging使用的异步方式以此来达到最小的性能损耗.代码中使用Loggingimportakka.actor.;
Wesley13 Wesley13
3年前
Java日志体系(四)slf4j
1.1简介                    !(https://oscimg.oschina.net/oscnet/408ac3be1e859f576253a7dbcafc3e5b6b6.png)与commonslogging相同,slf4j也是一个通用的日志接口,在程序中与其他日志框架结合使用,并对外提供服务。Simple
Stella981 Stella981
3年前
SpringBoot开发案例之整合Dubbo提供者(二)
!00.jpg(https://blog.52itstyle.com/usr/uploads/2017/07/1329278006.jpg)大家有没有注意到,上一篇中提供者,暴露接口的方式?混搭。springboot本身接口实现使用了注解的方式,而Dubbo暴露接口使用的是配置文件的实现方式,即如下:代码importorg.s
Easter79 Easter79
3年前
SpringBoot开发案例之整合Dubbo提供者(二)
!00.jpg(https://blog.52itstyle.com/usr/uploads/2017/07/1329278006.jpg)大家有没有注意到,上一篇中提供者,暴露接口的方式?混搭。springboot本身接口实现使用了注解的方式,而Dubbo暴露接口使用的是配置文件的实现方式,即如下:代码importorg.s
SLF4J门面日志框架源码探索 | 京东云技术团队
我们通过代码入手,层层加码,直观感受SLF4J打印日志,并跟踪代码追本溯源。主要了解,SLF4J是如何作为门面和其他日志框架进行解耦。
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k