diff --git a/ruoyi-admin/src/main/resources/logback.properties b/ruoyi-admin/src/main/resources/logback.properties new file mode 100644 index 000000000..cc02b7760 --- /dev/null +++ b/ruoyi-admin/src/main/resources/logback.properties @@ -0,0 +1,10 @@ +# error?????? +LOG_ERROR_HOME=./logs/error/ +# info?????? +LOG_INFO_HOME=./logs/info/ +# user?????? +LOG_USER_HOME=./logs/user/ +# ?????? +MAX_HISTORY=7 +# ?????? +MAX_FILE_SIZE=10MB \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml index d69a57207..e4ad5724a 100644 --- a/ruoyi-admin/src/main/resources/logback.xml +++ b/ruoyi-admin/src/main/resources/logback.xml @@ -1,31 +1,40 @@ <?xml version="1.0" encoding="UTF-8"?> <configuration> - <!-- 日志存放路径 --> - <property name="log.path" value="/home/ruoyi/logs" /> - <!-- 日志输出格式 --> - <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> + <property resource="logback.properties"/> + <!-- 彩色日志依赖的渲染类 --> + <conversionRule conversionWord="clr" + converterClass="org.springframework.boot.logging.logback.ColorConverter"/> + <conversionRule conversionWord="wex" + converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/> + <conversionRule conversionWord="wEx" + converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/> - <!-- 控制台输出 --> - <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> - <encoder> - <pattern>${log.pattern}</pattern> - </encoder> - </appender> - - <!-- 系统日志输出 --> - <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${log.path}/sys-info.log</file> + <!-- 日志输出格式 --> + <property name="log.pattern" + value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){blue} %clr([%-5p]){green} %clr([%X{TRACE_ID}]){red} %clr(${PID:- }){magenta} %clr(--){faint} [%thread] %-5level %clr(%-40.40logger{60} Line:%-3L){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx }}"/> + + <!-- 控制台输出 --> + <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>${log.pattern}</pattern> + </encoder> + </appender> + + <!-- 系统日志输出 --> + <appender name="sys_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 循环政策:基于时间创建日志文件 --> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> - <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> - <!-- 日志最大的历史 60天 --> - <maxHistory>60</maxHistory> - </rollingPolicy> - <encoder> - <pattern>${log.pattern}</pattern> - </encoder> - <filter class="ch.qos.logback.classic.filter.LevelFilter"> + <fileNamePattern>${LOG_INFO_HOME}%d/%d-info-%i.log</fileNamePattern> + <maxHistory>${MAX_HISTORY}</maxHistory> + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> + <maxFileSize>${MAX_FILE_SIZE}</maxFileSize> + </timeBasedFileNamingAndTriggeringPolicy> + </rollingPolicy> + <encoder> + <pattern>${log.pattern}</pattern> + </encoder> + <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>INFO</level> <!-- 匹配时的操作:接收(记录) --> @@ -33,16 +42,17 @@ <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> - </appender> - - <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${log.path}/sys-error.log</file> + </appender> + + <appender name="sys_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- 日志文件名格式 --> - <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> - <!-- 日志最大的历史 60天 --> - <maxHistory>60</maxHistory> + <!--路径--> + <fileNamePattern>${LOG_ERROR_HOME}%d/%d-error-%i.log</fileNamePattern> + <maxHistory>${MAX_HISTORY}</maxHistory> + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> + <maxFileSize>${MAX_FILE_SIZE}</maxFileSize> + </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> @@ -50,44 +60,74 @@ <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>ERROR</level> - <!-- 匹配时的操作:接收(记录) --> + <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> - <!-- 不匹配时的操作:拒绝(不记录) --> + <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> - - <!-- 用户访问日志输出 --> - <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${log.path}/sys-user.log</file> + + <!-- 用户访问日志输出 --> + <appender name="sys_user" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- 按天回滚 daily --> - <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern> - <!-- 日志最大的历史 60天 --> - <maxHistory>60</maxHistory> + <!--路径--> + <fileNamePattern>${LOG_USER_HOME}%d/%d-user-%i.log</fileNamePattern> + <maxHistory>${MAX_HISTORY}</maxHistory> + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> + <maxFileSize>${MAX_FILE_SIZE}</maxFileSize> + </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> - - <!-- 系统模块日志级别控制 --> - <logger name="com.ruoyi" level="info" /> - <!-- Spring日志级别控制 --> - <logger name="org.springframework" level="warn" /> - <root level="info"> - <appender-ref ref="console" /> - </root> - - <!--系统操作日志--> + <!-- 异步输出 --> + <appender name="async_info" class="ch.qos.logback.classic.AsyncAppender"> + <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> + <discardingThreshold>0</discardingThreshold> + <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> + <queueSize>256</queueSize> + <!-- 添加附加的appender,最多只能添加一个 --> + <appender-ref ref="sys_info"/> + </appender> + + <appender name="async_error" class="ch.qos.logback.classic.AsyncAppender"> + <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> + <discardingThreshold>0</discardingThreshold> + <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> + <queueSize>256</queueSize> + <!-- 添加附加的appender,最多只能添加一个 --> + <appender-ref ref="sys_error"/> + </appender> + + <appender name="async_user" class="ch.qos.logback.classic.AsyncAppender"> + <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> + <discardingThreshold>0</discardingThreshold> + <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> + <queueSize>256</queueSize> + <!-- 添加附加的appender,最多只能添加一个 --> + <appender-ref ref="sys_user"/> + </appender> + + <!-- 系统模块日志级别控制 --> + <logger name="com.ruoyi" level="info"/> + <!-- Spring日志级别控制 --> + <logger name="org.springframework" level="warn"/> + <root level="info"> - <appender-ref ref="file_info" /> - <appender-ref ref="file_error" /> + <appender-ref ref="console"/> </root> - - <!--系统用户操作日志--> + + <!--系统操作日志--> + <root level="info"> + <appender-ref ref="async_info"/> + <appender-ref ref="async_error"/> + </root> + + <!--系统用户操作日志--> <logger name="sys-user" level="info"> - <appender-ref ref="sys-user"/> + <appender-ref ref="async_user"/> </logger> </configuration> \ No newline at end of file