perf: 优化日志记录

pull/9/head
Carina 4 years ago
parent 5d1d18c661
commit 1b8ec6211a

1
.gitignore vendored

@ -1,6 +1,7 @@
.DS_Store .DS_Store
HELP.md HELP.md
target/ target/
logs/
!.mvn/wrapper/maven-wrapper.jar !.mvn/wrapper/maven-wrapper.jar
!**/src/main/** !**/src/main/**
!**/src/test/** !**/src/test/**

@ -33,9 +33,9 @@ spring:
#primary: master #primary: master
datasource: datasource:
master: master:
url: jdbc:mysql://127.0.0.1:3306/opsli-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://10.0.0.28:3306/opsli-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai
username: root username: opsli-boot
password: 12345678 password: asRtHGtxSZYGEtmJ
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
# 多数据源配置 # 多数据源配置
#slave-datasource: #slave-datasource:
@ -84,7 +84,8 @@ opsli:
web: web:
upload-path: var/files upload-path: var/files
# 系统日志 # 日志
log: logging:
path: var/log level:
root: info

@ -84,7 +84,8 @@ opsli:
web: web:
upload-path: var/files upload-path: var/files
# 系统日志 # 日志
log: logging:
path: var/log level:
root: info

@ -79,6 +79,7 @@ opsli:
web: web:
upload-path: var/files upload-path: var/files
# 系统日志 # 日志
log: logging:
path: var/log level:
root: info

@ -79,7 +79,8 @@ opsli:
web: web:
upload-path: var/files upload-path: var/files
# 系统日志 # 日志
log: logging:
path: var/log level:
root: info

@ -26,6 +26,8 @@ server:
# include: metrics,httptrace # include: metrics,httptrace
spring: spring:
application:
name: opsli-boot
profiles: profiles:
#此处由maven的环境选择决定 #此处由maven的环境选择决定
active: "@spring.active@" active: "@spring.active@"
@ -110,6 +112,7 @@ spring:
# 通过connectProperties属性来打开mergeSql功能慢SQL记录 # 通过connectProperties属性来打开mergeSql功能慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
#mybatis-plus 插件 #mybatis-plus 插件
mybatis-plus: mybatis-plus:
#所有的mapper映射文件 #所有的mapper映射文件

@ -1,118 +1,209 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration> <configuration>
<!-- ========================== 自定义输出格式说明================================ -->
<!-- %p 输出优先级即DEBUGINFOWARNERRORFATAL -->
<!-- %r 输出自应用启动到输出该log信息耗费的毫秒数 -->
<!-- %c 输出所属的类目,通常就是所在类的全名 -->
<!-- %t 输出产生该日志事件的线程名 -->
<!-- %n 输出一个回车换行符Windows平台为“/r/n”Unix平台为“/n” -->
<!-- %d 输出日志时间点的日期或时间默认格式为ISO8601也可以在其后指定格式比如%d{yyy MMM dd HH:mm:ss,SSS}输出类似2002年10月18日 221028921 -->
<!-- %l 输出日志事件的发生位置包括类目名、发生的线程以及在代码中的行数。举例Testlo4.main(TestLog4.java:10) -->
<!-- ========================================================================== -->
<!-- ========================== 输出方式说明================================ -->
<!-- Log4j提供的appender有以下几种: -->
<!-- org.apache.log4j.ConsoleAppender(控制台), -->
<!-- org.apache.log4j.FileAppender(文件), -->
<!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
<!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), -->
<!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) -->
<!-- ========================================================================== -->
<!--日志格式应用spring boot默认的格式也可以自己更改--> <!--日志格式应用spring boot默认的格式也可以自己更改-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/> <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--定义日志存放的位置,默认存放在项目启动的相对路径的目录--> <springProperty scope="context" name="app_name" source="spring.application.name" defaultValue="opsli-boot"/>
<springProperty scope="context" name="LOG_PATH" source="log.path" defaultValue="app-opsli-log"/> <springProperty scope="context" name="log_level" source="logging.level.root"/>
<springProperty scope="context" name="file_path" source="logging.file.path" defaultValue=""/>
<!-- ****************************************************************************************** --> <property name="log_path" value="${file_path}logs/${app_name}"/>
<!-- ****************************** 本地开发只在控制台打印日志 ************************************ --> <property name="file_size" value="64MB"/>
<!-- ****************************************************************************************** --> <property name="file_count" value="50"/>
<springProfile name="local"> <property name="maxHistory" value="15"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- 异步缓冲队列的深度,该值会影响性能.默认值为256 -->
<property name="queueSize" value="512"/>
<!-- 控制台日志 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志文件的格式 -->
<encoder> <encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern> <pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf-8</charset> <charset>UTF-8</charset>
</encoder> </encoder>
</appender> </appender>
<!--默认所有的包以info--> <!-- DEBUG文件日志 -->
<root level="info"> <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<appender-ref ref="STDOUT"/> <filter class="ch.qos.logback.classic.filter.LevelFilter">
</root> <level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<!--各个服务的包在本地执行的时候打开debug模式--> <onMismatch>DENY</onMismatch>
<logger name="org.opsli" level="debug" additivity="false"> </filter>
<appender-ref ref="STDOUT"/> <file>${log_path}/${app_name}_debug.log</file>
</logger> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
</springProfile> <fileNamePattern>${log_path}/history/${app_name}_debug.log.%d{yyyy-MM-dd}.zip</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
<!-- ********************************************************************************************** --> </rollingPolicy>
<!-- **** 放到服务器上不管在什么环境都只在文件记录日志控制台catalina.out打印logback捕获不到的日志 **** -->
<!-- ********************************************************************************************** -->
<springProfile name="!local">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
<charset>utf-8</charset> <charset>UTF-8</charset>
</encoder> </encoder>
</appender>
<!-- 日志记录器,日期滚动记录 --> <!-- 追加方式记录日志 -->
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append>
</appender>
<!-- 正在记录的日志文件的路径及文件名 --> <!-- INFO文件日志 -->
<file>${LOG_PATH}/opsli_log_error.log</file> <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<!-- 日志记录器的滚动策略,按日期,按大小记录 --> <file>${log_path}/${app_name}_info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天一归档 -->
<!-- 归档的日志文件的路径,%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${log_path}/history/${app_name}_info.log.%d{yyyy-MM-dd}_%i.zip</fileNamePattern>
<fileNamePattern>${LOG_PATH}/error/opsli-log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
<!-- 除按日志记录之外还配置了日志文件不能超过2M若超过2M日志文件会以索引0开始 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
命名日志文件例如log-error-2013-12-21.0.log --> <!-- 最大64MB 超过最大值,会重新建一个文件 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${file_size}</maxFileSize>
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy> </timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy> </rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} %-5level [%thread] %logger{50}-%L %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 追加方式记录日志 --> <!-- 追加方式记录日志 -->
<append>true</append> <append>true</append>
</appender>
<!-- 日志文件的格式 --> <!-- 警告文件日志 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <appender name="FILE_WARN"
<pattern>${FILE_LOG_PATTERN}</pattern> class="ch.qos.logback.core.rolling.RollingFileAppender">
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录error级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level> <level>WARN</level>
<onMatch>ACCEPT</onMatch> <onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch> <onMismatch>DENY</onMismatch>
</filter> </filter>
</appender> <file>${log_path}/${app_name}_warn.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_path}/history/${app_name}_warn.log.%d{yyyy-MM-dd}.zip</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<!-- 日志记录器,日期滚动记录 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 正在记录的日志文件的路径及文件名 --> <!-- 追加方式记录日志 -->
<file>${LOG_PATH}/opsli_log_total.log</file> <append>true</append>
</appender>
<!-- 日志记录器的滚动策略,按日期,按大小记录 --> <!-- 错误文件日志 -->
<appender name="FILE_ERROR"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>${log_path}/${app_name}_error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_path}/history/${app_name}_error.log.%d{yyyy-MM-dd}.zip</fileNamePattern>
<!-- 归档的日志文件的路径,%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <maxHistory>${maxHistory}</maxHistory>
<fileNamePattern>${LOG_PATH}/total/opsli-log-total-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 除按日志记录之外还配置了日志文件不能超过2M若超过2M日志文件会以索引0开始
命名日志文件例如log-error-2013-12-21.0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy> </rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 追加方式记录日志 --> <!-- 追加方式记录日志 -->
<append>true</append> <append>true</append>
</appender>
<!-- 日志文件的格式 --> <appender name="ASYNC_LOG_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<pattern>${FILE_LOG_PATTERN}</pattern> <discardingThreshold>0</discardingThreshold>
<charset>utf-8</charset> <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
</encoder> <queueSize>${queueSize}</queueSize>
<appender-ref ref="FILE_DEBUG"/>
</appender>
<appender name="ASYNC_LOG_INFO" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>${queueSize}</queueSize>
<appender-ref ref="FILE_INFO"/>
</appender>
<appender name="ASYNC_LOG_WARN" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>${queueSize}</queueSize>
<appender-ref ref="FILE_WARN"/>
</appender> </appender>
<!--记录到文件时记录两类一类是error日志一个是所有日志--> <appender name="ASYNC_LOG_ERROR" class="ch.qos.logback.classic.AsyncAppender">
<root level="info"> <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<appender-ref ref="STDOUT"/> <discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>${queueSize}</queueSize>
<appender-ref ref="FILE_ERROR"/> <appender-ref ref="FILE_ERROR"/>
<appender-ref ref="FILE_ALL"/> </appender>
<!-- local环境只输出控制台日志 -->
<springProfile name="local">
<root level="${log_level}">
<appender-ref ref="consoleAppender" />
</root> </root>
</springProfile>
<!-- dev环境 -->
<springProfile name="dev">
<root level="${log_level}">
<appender-ref ref="consoleAppender" />
<appender-ref ref="ASYNC_LOG_INFO" />
<appender-ref ref="ASYNC_LOG_ERROR" />
</root>
</springProfile>
<!-- test环境 -->
<springProfile name="test">
<root level="${log_level}">
<appender-ref ref="consoleAppender" />
<appender-ref ref="ASYNC_LOG_INFO" />
<appender-ref ref="ASYNC_LOG_ERROR" />
</root>
</springProfile>
<!-- prod环境 -->
<springProfile name="prod">
<root level="${log_level}">
<appender-ref ref="consoleAppender" />
<appender-ref ref="ASYNC_LOG_INFO" />
<appender-ref ref="ASYNC_LOG_ERROR" />
</root>
</springProfile> </springProfile>
</configuration> </configuration>

@ -430,36 +430,36 @@
<!-- 环境选择 --> <!-- 环境选择 -->
<profiles> <profiles>
<profile> <profile>
<!-- 开发环境 --> <!-- 本地环境 -->
<id>dev</id> <id>local</id>
<properties> <properties>
<spring.active>dev</spring.active> <spring.active>local</spring.active>
</properties> </properties>
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile> </profile>
<profile> <profile>
<!-- 发布环境 --> <!-- 发环境 -->
<id>release</id> <id>dev</id>
<properties> <properties>
<spring.active>release</spring.active> <spring.active>dev</spring.active>
</properties> </properties>
</profile> </profile>
<profile> <profile>
<!-- 测试环境 --> <!-- 测试环境 -->
<id>beta</id> <id>test</id>
<properties> <properties>
<spring.active>beta</spring.active> <spring.active>test</spring.active>
</properties> </properties>
</profile> </profile>
<profile> <profile>
<!-- 本地环境 --> <!-- 发布环境 -->
<id>local</id> <id>prod</id>
<properties> <properties>
<spring.active>local</spring.active> <spring.active>prod</spring.active>
</properties> </properties>
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile> </profile>
</profiles> </profiles>

Loading…
Cancel
Save