logback.xml:
<configuration>
<!--日志入库的配置,这里通过springProperty标签直接读取application.yml中数据库的配置-->
<springProperty scope="context" name="driverClassName" source="portal.jdbc.driverClassName"
defaultValue="com.mysql.jdbc.Driver"/>
<springProperty scope="context" name="jdbcUrl" source="portal.jdbc.jdbcUrl"/>
<springProperty scope="context" name="username" source="portal.jdbc.username"/>
<springProperty scope="context" name="password" source="portal.jdbc.password"/>
<!-- 输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 输出格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${PID} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- error级别单独记录 -->
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/error.log</file>
<!-- 以day为单位自动回滚 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/error/error-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${PID} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<!-- error级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- warn级别单独记录 -->
<appender name="warnAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/warn.log</file>
<!-- 以day为单位自动回滚 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/warn/warn-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<!-- 最多记录30天日志 -->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 文件大小到达30MB自动打包 -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${PID} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<!-- warn级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/info/info-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${PID} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 将WARN级别日志写入数据库 -->
<appender name="WARN-MYSQL" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="org.apache.commons.dbcp.BasicDataSource">
<driverClassName>${driverClassName}</driverClassName>
<url>${jdbcUrl}</url>
<username>${username}</username>
<password>${password}</password>
</dataSource>
</connectionSource>
<!-- WARN级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="ERROR-MYSQL" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="org.apache.commons.dbcp.BasicDataSource">
<driverClassName>${driverClassName}</driverClassName>
<url>${jdbcUrl}</url>
<username>${username}</username>
<password>${password}</password>
</dataSource>
</connectionSource>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 输出某个包下面的日志-->
<logger name="" level="debug"
additivity="true">
<appender-ref ref="STDOUT"/>
</logger>
<!-- 根,所有logger的祖先 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="errorAppender"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="warnAppender"/>
<appender-ref ref="WARN-MYSQL"/>
<appender-ref ref="ERROR-MYSQL"/>
</root>
</configuration>
application.yml:
## portal DB portal.jdbc: type: mysql driverClassName: com.mysql.jdbc.Driver # jdbcUrl: jdbc:mysql://10.100.1.85:3306/frms-mt-mgr2.2?useUnicode=true&characterEncoding=UTF-8 jdbcUrl: jdbc:mysql://10.100.1.85:3306/frms-mt-mgr2.3?useUnicode=true&characterEncoding=UTF-8 # jdbcUrl: jdbc:mysql://127.0.0.1:3306/frms-mt-mgr2.1?useUnicode=true&characterEncoding=UTF-8 username: # password: password: connectionTestQuery: SELECT 1 FROM DUAL maximumPoolSize: 10 minimumIdle: 1 maxLifetime: 2000000 connectionTimeout: 30000 idleTimeout: 30000