在微服务里使用了logback来对日志输出进行配置,由于配置文件里有很多通用的设置,所以有必要将通用的都提取到一个公共文件里,这样所有的微服务更改配置格式的话,只需更新通用文件即可,不用每个地方都改一遍了。
如果一个logback.xml文件想在其他的项目中被引用,那么就需要用iucluded标签,将定义的appender跟logger包围起来,表示这个是可以被导入其他项目的。
下面的是通用配置文件:logback-common.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | <?xml version="1.0" encoding="UTF-8" ?> <included> <!-- 控制台日志输出--> <appender name="${CONSOLE_APPENDER}" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> [%d{yyyy-MM-dd HH:mm:ss.SSS,GMT+8}] %-5level [%t] [%c] - %msg%n </pattern> </layout> </appender> <!--日志文件--> <appender name="${FILE_INFO_APPENDER}" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--过滤--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern> [%d{yyyy-MM-dd HH:mm:ss.SSS,GMT+8}] %-5level [%t] [%c] - %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径--> <fileNamePattern>${LOG_DIR}/${LOG_SERVICE_NAME}-info.%d.log</fileNamePattern> <maxHistory>${LOG_HIS_MAX}</maxHistory> <!-- <maxFileSize>${LOG_FILE_SIZE_MAX}</maxFileSize>--> <totalSizeCap>${LOG_TOTAL_SIZE}</totalSizeCap> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> </appender> <appender name="${FILE_ERROR_APPENDER}" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--过滤--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> [%d{yyyy-MM-dd HH:mm:ss.SSS,GMT+8}] %-5level [%t] [%c] - %msg%n </pattern> </layout> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径--> <fileNamePattern>${LOG_DIR}/${LOG_SERVICE_NAME}-error.%d.log</fileNamePattern> <maxHistory>${LOG_HIS_MAX}</maxHistory> <!-- <maxFileSize>${LOG_FILE_SIZE_MAX}</maxFileSize>--> <totalSizeCap>${LOG_TOTAL_SIZE}</totalSizeCap> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> </appender> <springProfile name="dev"> <root level="info"> <appender-ref ref="${CONSOLE_APPENDER}"/> <appender-ref ref="${FILE_INFO_APPENDER}"/> <appender-ref ref="${FILE_ERROR_APPENDER}"/> </root> </springProfile> <springProfile name="uat"> <root level="error"> <appender-ref ref="${CONSOLE_APPENDER}"/> <appender-ref ref="${FILE_INFO_APPENDER}"/> <appender-ref ref="${FILE_ERROR_APPENDER}"/> </root> </springProfile> </included> |
下面的是每个微服务自己的配置文件:logback-spring.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?xml version="1.0" encoding="UTF-8" ?> <configuration> <!--微服务名的简称--> <property scope="local" name="LOG_SERVICE_NAME" value="demo" /> <!--日志存储目录--> <property scope="local" name="LOG_DIR" value="/data/log" /> <!--保留多少天的日志--> <property scope="local" name="LOG_HIS_MAX" value="10" /> <property scope="local" name="LOG_TOTAL_SIZE" value="2GB" /> <property scope="local" name="CONSOLE_APPENDER" value="consoleLog" /> <property scope="local" name="FILE_INFO_APPENDER" value="fileInfoLog" /> <property scope="local" name="FILE_ERROR_APPENDER" value="fileErrorLog" /> <include resource="logback-common.xml"/> </configuration> |
在测试过程中出现了一个问题,就是控制台输出的日志时间是正常的,但在日志文件里输出的日志时间和实际时间相差了8个小时,判断是logback的配置文件还需要加上时区,如下:
1 2 3 | <pattern> [%d{yyyy-MM-dd HH:mm:ss.SSS,GMT+8}] %-5level [%t] [%c] - %msg%n </pattern> |
在时间格式后面增加了 GMT+8,表示输出的日志时区设定为东8区,即北京时间。
经过测试发现问题解决,文件里显示的也是实际时间了。