SpringBoot--2

日志

1、概念

(1)常见的日志框架如下:

          抽象层:JCL(Jakarta Commons Logging)     SLF4j(Simple Logging Facade for Java)   jboss-logging

          实现层:Log4j      Log4j2     Logback    JUL(java.util.logging)

  抽象层只有接口,用户只需要使用这些接口进行开发就行了,这样如果想更换日志框架,只需要更换实现层即可。

(2)SpringBoot 默认抽象层使用的是 SLF4j,实现层使用的是 Logback。

(3)使用时调用 SLF4j 提供的接口即可,但是需要导入实现层的 jar 包。

          而配置文件中的日志配置是针对于实现层的,SLF4j 只是提供了调用的接口。

2、日志框架统一

(1)不同的框架使用的日志框架是不一样的,如 SpringBoot 使用的是 SLF4j 而 Spring 使用的是 commons-loggin。因此如果同时存在多个框架,而他们的日志框架又不相同,就会发生冲突。

(2)SpringBoot 中提供的解决方案:

     引入中间包(jul-toslf4j、log4j-over-slf4j、jcl-over-slf4j)来替换原来的日志包,下图是 SpringBoot 中日志部分的依赖关系

SpringBoot--2_第1张图片

注:中间包的原理:偷梁换柱,这些中间包中的类名和方法名都和原来的日志包中的相同,但是在方法内部有调用了 SLF4j 的接口来实现。这样原来的日志框架在调用日志记录方法的时候,就会进入到中间包的方法内,进而调用到 SLF4j 的接口。

    在引入中间包后,和原来的日志包会发生冲突,因此在导入其他框架的时候需要将原来的日志包给移除,不然会报错。

           
                org.springframework.ws
                spring-ws-core
                ${spring-ws.version}
                
                    
                        commons-logging
                        commons-logging
                    
                
            

总结:SpringBoot 能够自动适配所有日志框架,其底层采用的是 SLF4j + Logback 的方式记录日志,当引入其他框架时,需要把这个框架依赖的其他日志框架移除。

3、日志的使用和日志的级别

(1)日志级别

        trace(追踪程序运行用的信息,例如想输出运行到哪一步了) < debug(调试信息,关键步骤的输出) < info(自定义信息) < warn(返回值非预期) < error(异常)

SpringBoot 默认输出的是 info 级别的日志,如果想要更改日志的输出级别,可以通过配置文件更改

(2)使用 SLF4j 

public class SpringbootHelloworld {
    Logger logger = LoggerFactory.getLogger(SpringbootHelloworld.class);

    public void testLogging() {
        logger.trace("trace...");
        logger.debug("debug...");
        logger.info("info...");
        logger.warn("warn...");
        logger.error("error...");
    }

(3)日志的配置

     ① 在全局配置文件中配置

          利用 logging.level 来指定某个包的日志级别

          利用 logging.file 来指定日志输出文件

          利用 logging.path 来指定日志输出文件的目录,SpringBoot 会在指定目录下生成 spring.log 文件

          利用 logging.pattern.console 来指定控制台的日志输出格式

          利用 logging.pattern.file 来指定文件中日志的输出格式

注: logging.file 和 logging.path 均未配置时,日志不会输出到文件中,两者均配置时会以 logging.file 的配置为准。

logging.level.robinpractice.springboot_helloworld=trace
logging.file=robin.log
logging.path=E:/springboot/log

     ② 导入日志配置文件

         只需要将配置文件的名字改为下面的格式,放到资源目录下,配置文件就会被自动加载

Logging System Customization

Logback

logback-spring.xmllogback-spring.groovylogback.xml, or logback.groovy

Log4j2

log4j2-spring.xml or log4j2.xml

JDK (Java Util Logging)

logging.properties

        加载时,如果配置文件名不带 -spring,那么将会被 Spring 加载而不会被 SpringBoot 加载。若配置文件名为 **-spring.xml 则会被 SpringBoot 加载,这样就可以才可以使用 SpringBoot 的高级功能。因此推荐 **-spring.xml 的命名方式。

 

SpringBoot 与 Web

1、SpringBoot 对静态资源的映射

(1)通过 /** 这样的请求来访问资源,如果这个请求没有被处理(没有Mapping映射),就会去静态资源文件夹下寻找:

           ① classpath:/META-INF/resources/         实际上相当于 src/main/resources/META-INF/resources/

           ② classpath:/resources/           实际上相当于 src/main/resources/resources

           ③ classspath:/static/                实际上相当于 src/main/resources/static

           ④ classspath:/public/               实际上相当于 src/main/resources/public

           ⑤  /                                           这个是当前项目的根目录

注:classpath 实际上就相当于 src 下的 resources 目录和 java 目录。

       classpath 是编译后 target 下的 classes 目录;而 resources 目录和 java 目录中的内容均会被编译到这个目录下。

(2)欢迎页,通过 localhost:8080/ 请求来访问欢迎页,SpringBoot 会在静态资源文件夹下寻找 index.html 文件。

          当静态资源文件夹下有多个 index.html 时,按照 ① 中由上到下的顺序寻找。

(3)页面图标,SpringBoot 会在静态资源文件夹下寻找 favicon.ico 文件作为页面的图标

2、thymeleaf 

(1)SpringBoot 不支持 JSP,但是支持模板引擎,因此在开发时都会引入模板引擎开发前端页面。SpringBoot 推荐的模板引擎就是 thymeleaf。

(2)使用 thymeleaf 需要引入依赖 starter-thymeleaf 。

        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        

(3)页面跳转的前后缀

@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {
	public static final String DEFAULT_PREFIX = "classpath:/templates/";
	public static final String DEFAULT_SUFFIX = ".html";

从 ThymeleafProperties 类中可以看出,页面跳转的前缀为 classpath:/templates,后缀为 .html。因此跳转的页面应该放在 classpath:/templates 目录下。如果要修改前后缀可以在配置文件中配置。

(4)Thymeleaf 语法规则

         参考资料  https://www.thymeleaf.org/

         使用前可以引入命名空间,这样就会有提示

         ① 更改元素的属性值

       tx:text :改变当前元素的文本信息,可以设置默认的文本信息,在显示静态页面时,会显示默认信息,在显示动态页面时,会显示 tx:text 中的值。

        tx:任意属性:改变当前元素的任意属性值

          ② 表达式

         ${ }  / *{ }: 获取变量的值、获取对象的属性、调用方法

         #{ } :获取国际化内容

         @{ } :定义 URL

          ③ 支持常见的 数学运算/逻辑运算/比较运算/字符串拼接 等

          ④ 支持条件语句 th:if ,遍历 th:each,循环 th:for 等等



    
默认文本

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(SpringBoot--2)