谈谈日志:
一般而言,一个接口或者一段程序,其入口要有日志,记录传入的数据是什么;
部分重要的处理逻辑要有日志;
程序出口也要有日志,记录其最终的处理结果。
这样在解决生产上的问题时,方便定位问题。比凭空想象的好。
还有一点就是生产环境上严禁使用System.out输出,性能很低。原因是其输出会导致线程等待。
而使用Logger在输出日志时是异步的。
在记录日志时不要用+号连接日志内容 比如log.info("ddd"+abc);
而要用log.info("ddd{}",abc);这样可以减少创建的字符串对象。
一个spring boot的日志配置示例如下
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 应用名称 --> <springProperty scope="context" name="app_name" source="spring.application.name"/> <!-- 日志文件保存路径 --> <property name="log_home" value="logs" /> <!-- 控制台日志:输出全部日志到控制台 --> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - ip=%X{ip} - %m - duration=%X{duration}ms - method=%X{method}%n</pattern> </encoder> </appender> <!-- 文件日志:输出指定日志到文件 --> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_home}/${app_name}.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>14</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - ip=%X{ip} - %m - duration=%X{duration}ms - method=%X{method}%n</pattern> </encoder> </appender> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_home}/${app_name}_error.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>14</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="consoleLog" /> <appender-ref ref="fileInfoLog" /> <appender-ref ref="fileErrorLog" /> </root> </configuration>