SLF4J+logback的日志使用,以及小工具lombok

普通使用只要声明SLF4J包下的Logger类就可以直接使用了

maven依赖加上:

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
@RunWith(SpringRunner.class)
@SpringBootTest
public class test {
    private final Logger logger = LoggerFactory.getLogger(test.class);
    //所在类类名和路径,如果写其他类,打印输出的时候就会显示其他类的类名

		    @Test
		    public void test1(){
		        logger.info("info-----------");
		        logger.debug("debug----------");
		        logger.error("error-----------");
		    }
    }
yml中配置日志等级后可以查看到debug信息:logging.level.root: debug

否者只能看到info和error信息;因为系统默认的日志级别是info,日记级别 > info可以输出,debug level < info 所以要在yml中配置等级后才可以输出。
在windows下的idea中默认搜索快捷键,ctrl+shift+n,搜索SLF4J包下的Level类就可以看到所有的日志等级。

日志等级日志等级
yml中配置日志等级为debug后的console输出信息yml中配置日志等级为debug后的console输出信息


或者用更方便的方式,用注解的形式来声明;


同样先加上maven依赖,这是个小工具

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.0</version>
    </dependency>
    //选择版本的时候在maven reposiry中捞一个使用人数最多的就行,不然会踩中一脸懵逼的坑
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j	//注解可以省去手动声明Logger类,并且在LoggerFactory.getLogger中默认当前类
public class test {

    @Test
    public void test3(){
        log.debug("debg---------------");
        log.info("info-------------------");
        log.error("error----------------------");
		//输出变量,用{}做占位符,类似C中的printf
		String name = "qqq";
		String password = "qqq";
		log.info("info-------------------name:{},password:{}",name ,password );

    }

}

既然都用上注解了,当然还有更好玩的;logback可以自定义配置;而配置又分为:application.yml和logback-spring.xml两种方式。前者配置简单,后者可以进行复杂的配置。

yml中简单配置yml中的配置

logging:
    pattern:
      #日志输出格式,%d日期;%msg日志信息;%n换行
      console: "%d - %msg%n"
    #日志文件的存放目录
    #path: d:/tomcat
    #path和file二者只需要一个,默认叫spring.log
    file: d:/tomcat/temp.log
    #日志级别
    #level: debug
    #或者针对某一个类设置日志级别
    level:
      com.chan.wechatshop.impl.test: debug

真实项目中用第二种方式logback-spring.xml比较常见

	在resources路径下新建logback-spring.xml文件
<?xml version="1.0" encoding="utf-8" ?>  <configuration>
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout clas="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %d - %msg%n
            </pattern>
        </layout>
    </appender>

    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--&lt;!&ndash;过滤输出到日志文件的日志内容&ndash;&gt;
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>
                &lt;!&ndash;只配置这个还是会输出ERROR等级的日志,因为error level > info level;拦截的是>=info等级的内容&ndash;&gt;
                INFO
            </level>
        </filter>-->

        <!--要用下面这种方式才能过滤输出到日志文件的ERROR信息,类似switch case,onMatch和onMisMatch中的指令在LevelFilter类的FilterReply中可以看到-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <!--匹配到上面level的ERROR等级日志时,禁止输出到日志文件中-->
            <onMatch>DENY</onMatch>
            <!--匹配到上面的ERROR日志时,输出到日志文件中,(还有一个指令NEUTRAL,代表当前这条策略不做操作,让下一条策略去匹配)-->
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略,按照时间滚动-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径要先去建好,不然会报错,linux/Mac下要给予可写权限,sudo chmod -R 777 /var/log/tomcat
            windows 类似,D:\log\tomcat-->
            <fileNamePattern>
                <!--在文件名中带上时间,配置完后要在下面root level中指定这个配置-->
                D:\tomcat\info.%d.log
            </fileNamePattern>
        </rollingPolicy>
    </appender>

    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--过滤输出到日志文件的日志内容-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>
                ERROR
            </level>
        </filter>
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略,按照时间滚动,每天创建一个文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径要先去建好,不然会报错,linux/Mac下要给予可写权限,sudo chmod -R 777 /var/log/tomcat
            windows 类似,D:\log\tomcat-->
            <fileNamePattern>
                <!--在文件名中带上时间,配置完后要在下面root level中指定这个配置-->
                D:\tomcat\error.%d.log
            </fileNamePattern>
        </rollingPolicy>
    </appender>

    <!--root代表整个项目的日志等级-->
    <root level="info">
        <!--上面配置的appender中的name-->
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
    </root> 
    </configuration>

或者可以参考springboot自己的日志设置
在这里插入图片描述

logbackxml demo2

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 -->
    <property name="LOG_HOME" value="/workspace/logs" />
    <property name="APPLICATION_NAME" value="blank_hand" />

    <!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
    <!-- 控制台输出 -->
    <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}:%L - %msg%n</pattern>-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/${APPLICATION_NAME}-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>30</MaxHistory>
            <maxFileSize>10MB</maxFileSize>
        </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}:%L - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 生成 error html格式日志开始 -->
    <appender name="HTML" class="ch.qos.logback.core.FileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--设置日志级别,过滤掉info日志,只输入error日志-->
            <level>ERROR</level>
        </filter>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%p%d%msg%M%F{32}%L</pattern>
            </layout>
        </encoder>
        <file>${LOG_HOME}/error-log.html</file>
    </appender>
    <!-- 生成 error html格式日志结束 -->

    <!-- 每天生成一个html格式的日志开始 -->
    <appender name="FILE_HTML" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/${APPLICATION_NAME}-%d{yyyy-MM-dd}.%i.html</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>30</MaxHistory>
            <MaxFileSize>10MB</MaxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%p%d%msg%M%F{32}%L</pattern>
            </layout>
        </encoder>
    </appender>
    <!-- 每天生成一个html格式的日志结束 -->

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="HTML" />
        <appender-ref ref="FILE_HTML" />
    </root>

</configuration>

有新的理解再补上,菜鸡奔跑中~~~~~~~

运行异常信息丢失,没有输出到error日志文件中(情况1)

当一个运行时的异常没有被try
catch捕获的时候,此时如果之前配置的info日志文件剔除了error日志消息,这个时候error日志中不会写入这个报错。这个错误信息就会丢失。
所以在写代码的时候,如果不能保证没有异常,最好外面加个try catch以便在以后出问题的时候可以捕获这个异常

yml中指定logback文件

在这里插入图片描述

logging:
  config: classpath:log/logback-dev.xml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值