Spring

您所在的位置:网站首页 springboot日志输出写入文件 Spring

Spring

2024-06-23 13:09| 来源: 网络整理| 查看: 265

1.导入依赖

Spring-boot2 中Starters包含log4j2,所以进入log4j2只要引入以下依赖性进入pom.xml

org.springframework.boot spring-boot-starter-log4j2 但是springboot默认使用logback进行日志管理 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging 2.配置lo4j2 FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> D:/apache-tomcat-8.5.33/logs %d{yyyy-MM-dd HH:mm:ss} %-5level %class{36} %L %M - %msg%xEx%n ${PATTERN_FORMAT} 3. 配置Hikari数据库连接池(springboot默认的)

在config路径下创建新的类ConnectionFactoryConfig,初始化Hikari的数据库连接池,返回一个Connection.

package com.sdk.management.config; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.Connection; import java.sql.SQLException; /** * @author caohongyun */ public class ConnectionFactoryConfig{ private static interface Singleton{ final ConnectionFactoryConfig INSTANCE = new ConnectionFactoryConfig(); } private HikariDataSource dataSource; private ConnectionFactoryConfig(){ //也可以使用配置文件直接加载 // HikariConfig config = new HikariConfig("application.properties"); // this.dataSource = new HikariDataSource(config); String user = "xxxxx"; String password = "xxxxxx"; String url = "jdbc:mysql://127.0.0.1:3306/xxxxxx?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai"; String driverClassName = "com.mysql.cj.jdbc.Driver"; HikariConfig config = new HikariConfig(); config.setDriverClassName(driverClassName); config.setJdbcUrl(url); config.setUsername(user); config.setPassword(password); config.addDataSourceProperty("cachePrepStmts","true"); config.addDataSourceProperty("prepstmtCacheSize","250"); config.addDataSourceProperty("prepstmtCacheSqlLimit","2048"); //设置连接超时为8小时 config.setConnectionTimeout(8*60*60); this.dataSource = new HikariDataSource(config); } public static Connection getDatabaseConnection() throws SQLException{ return Singleton.INSTANCE.dataSource.getConnection(); } }

配置文件详解 (1).根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger).

status:Configuration的属性,用来指定log4j本身的打印日志的级别. monitorinterval:Configuration的属性,用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.

(2).Appenders节点,常见的有三种子节点:Console、RollingFile、File.

Console节点用来定义输出到控制台的Appender. name:Console的属性,指定Appender的名字. target:Console的属性,SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT. PatternLayout:Console的子节点,输出格式,不设置默认为:%m%n. File节点用来定义输出到指定位置的文件的Appender. name:File的属性,指定Appender的名字. fileName:File的属性,指定输出日志的目的文件带全路径的文件名. PatternLayout:File的子节点,输出格式,不设置默认为:%m%n. RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender. name:RollingFilede的属性,指定Appender的名字. fileName:RollingFilede的属性,指定输出日志的目的文件带全路径的文件名. filePattern:RollingFilede的属性,指定新建日志文件的名称格式. PatternLayout:RollingFilede的子节点,输出格式,不设置默认为:%m%n. DefaultRolloverStrategy:RollingFilede的子节点,用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。 Policies:RollingFilede的子节点,指定滚动日志的策略,就是什么时候进行新建日志文件输出日志. TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am. SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小. Filters:RollingFilede的子节点,决定日志事件能否被输出。过滤条件有三个值:ACCEPT(接受), DENY(拒绝) or NEUTRAL(中立)(后面具体讲) ACCEP和DENY比较好理解就是接受和拒绝的意思,在使用单个过滤器的时候,一般就是使用这两个值。但是在组合过滤器中,如果用接受ACCEPT的话,日志信息就会直接写入日志文件,后续的过滤器不再进行过滤。所以,在组合过滤器中,接受使用NEUTRAL(中立),被第一个过滤器接受的日志信息,会继续用后面的过滤器进行过滤,只有符合所有过滤器条件的日志信息,才会被最终写入日志文件。 ThresholdFilter:Filters的子节点 level:ThresholdFilterde的属性,将被过滤的级别。 onMatch:ThresholdFilterde的属性,默认值是NEUTRAL onMismatch:ThresholdFilterde的属性,默认是DENY

(3).Loggers节点,常见的有两种:Root和Logger.

Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 level:Root属性,日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF. appender-ref:Root的子节点,用来指定该日志输出到哪个Appender,通过ref指定. Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。 level:Logger属性,日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF. name:Logger属性,用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点. additivity:Logger属性

appender-ref:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

4.创建数据库就不说了 5.测试功能 /* * 测试输出日志到数据库 * */ @GetMapping("warn") public Object errorTest() { logger.error("除数不能为0啊!"); int i=1/0; return null; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3