[java学习笔记]logback的使用
建立一个简单的springboot的项目,不需要引入额外的依赖即可使用logback日志;
默认的日志记录级别是info,即只显示info, warn, error的日志,debug级别的日志不会显示;
可以通过配置文件的形式,将错误日志和正常的日志分开记录,指定日志的级别,日志的格式等操作,默认的配置文件名是logback-spring.xml,一个配置文件的例子;

<?xml version="1.0" encoding="UTF-8"?> <configuration> <!--定义日志文件的存储地址,使用绝对路径--> <property name="LOG_HOME" value="G:/jarpro/ly_log/log"/> <!-- Console 输出设置 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <!--匹配到error,则拒绝,不输出--> <OnMatch>DENY</OnMatch> <!--其他的输出到该文件--> <OnMismatch>ACCECT</OnMismatch> </filter> <!--滚动策略按照时间滚动,一天一个日志文件--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--滚动策略按照时间滚动,一天一个日志文件--> <!--增加filter,只显示error--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!--含义为只显示error以上级别的日志--> <level>ERROR</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}_error.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!--在控制台的输出--> <logger name="org.apache.ibatis.cache.decorators.LoggingCache" level="DEBUG" additivity="false"> <appender-ref ref="CONSOLE"/> </logger> <logger name="org.springframework.boot" level="DEBUG"/> <!--针对类进行级别设置--> <!--<logger name="cn.ly.ly_sell.LoggerTest" level="DEBUG"/>--> <!--全局设置级别设置--> <root level="info"> <!--<appender-ref ref="ASYNC"/>--> <appender-ref ref="FILE"/> <appender-ref ref="FILEERROR"/> <appender-ref ref="CONSOLE"/> </root> </configuration>
日志的使用:
Logger logger = LoggerFactory.getLogger(LyLogApplicationTests.class); @Test public void contextLoads() { // 默认情况下debug不会显示 logger.info("info日志"); logger.debug("debug日志"); logger.error("error日志"); logger.warn("warn日志"); // 在日志中拼装变量 String name = "ly"; logger.info("日志:{}", name); }
使用日志对象的记录日志的方法;创建logger时指定的类对象是会在这条日志输出时显示出来,所以要指定本类的类对象,方便定位到日志输出的类;
还可以使用lomback的@Slf4j的注解,简化日志记录:
@RunWith(SpringRunner.class) @SpringBootTest @Slf4j // lombok提供的日志记录注解 public class LyLogApplicationTests {
@Test // lombok简化日志记录 public void test() { log.info("info日志"); log.debug("debug日志"); log.error("error日志"); log.warn("warn日志"); } }
学习java的新手,尝试将学到的内容总结为博客,内容如有错误,欢迎指正,感激不尽。