• 4springboot:日志(上)


    1.主流的日志框架

     

    2.SLF4J使用

    如何在系统中使用SLF4j https://www.slf4j.org

    以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;
    给系统里面导入slf4j的jar和 logback的实现jar
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class HelloWorld {
      public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(HelloWorld.class);
        logger.info("Hello World");
      }
    }

     如下图:

    每一个日志的实现框架都有自己的配置文件。使用slf4j以后,

    配置文件还是做成日志实现框架自己本身的配置文件

    3.遗留问题

    a(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx
    统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出?

    如何让系统中所有的日志都统一到slf4j;
    1、将系统中其他日志框架先排除出去;
    2、用中间包来替换原有的日志框架;
    3、导入slf4j其他的实现

     4.springboot日志关系

     依赖:

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

     SpringBoot使用它来做日志功能:

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

    总结:
    1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录
    2)、SpringBoot也把其他的日志都替换成了slf4j;
    3)、中间替换包?
    @SuppressWarnings("rawtypes")
    public abstract class LogFactory {
    
        static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J =
         "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j"; static LogFactory logFactory = new SLF4JLogFactory();

    中间包

    如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉?
    Spring框架用的是commons-logging:
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <exclusions>
              <exclusion>
                   <groupId>commons-logging</groupId>
                   <artifactId>commons-logging</artifactId>
              </exclusion>
           </exclusions>
    </dependency>

     SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,

    引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可

    5.日志的使用

    1.默认配置
    SpringBoot默认帮我们配置好了日志;
    //记录器
    Logger logger = LoggerFactory.getLogger(getClass());
    
    @Test
    public void contextLoads() {
    
        logger.trace("trace...");
        logger.debug("debug");
        //默认输出info以及更高的级别
        //没有指定级别就是默认级别,可以在配置文件中进行指定
        logger.info("info...");
        logger.warn("warm...");
        logger.error("error....");

    日志的级别由低到高

    trace<debug<info<warn<error

    可以调整需要输出的日志级别

    可以调整输出的日志级别,日志就会这个级别及以后 高的级别生效

     默认是info及更高的级别(只能打印>=info的级别的)

    2.配置文件进行配置

    logging.level.com.mr=debug
    //指定扫描的包(红色备注)以及日志级别

     3.配置文件

    #当前项目下生成springboot.log日志
    #以日志文件的方式
    #此时我的是D盘根目录 logging.file
    =springboot.log #指定路径 logging.file=D:/springboot.log

     

    #在当前磁盘的根路径创建spring文件和和里面的log文件,使用spring.Log作为默认文件
    logging.path=/spring/Log

     

    4.输出格式

    #在控制台输出的日志格式
    logging.pattern.console=
    #指定在文件中日志输出的格式
    logging.pattern.file=
    日志输出格式:
                    %d表示日期时间,
                    %thread表示线程名,
                    %-5level:级别从左显示5个字符宽度
                    %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
                    %msg:日志消息,
                    %n是换行符
        -->
        %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

     

    代码小结:

    logging.level.com.cuzz=trace
    
    #logging.path=# 不指定路径在当前项目下生成springboot.log日志# 可以指定完整的路径;#logging.file=G:/springboot.log
    
    # 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件logging.path=/spring/log
    
    #  在控制台输出的日志的格式logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
    # 指定文件中日志输出的格式logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
  • 相关阅读:
    ORBSLAM2的资源
    工程思想
    Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH和ROS_PACKAGE_PATH
    CMkeList文件编写
    SLAM资料
    windows下隐藏文件夹
    Ubuntu16装Flash
    知识管理
    学习纲领
    lsof详解
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/10121937.html
Copyright © 2020-2023  润新知