多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 日志打印规范 打印日志主要是在业务复杂的方法上进行 error:错误日志,指比较严重的错误,对正常业务有影响 info:信息日志,记录排查问题的关键信息,如调用时间、出参入参等等; 1. 不要使用 System.out.println 这个是打印到控制台, 不打印到日志中, 虽然控制台输出的内容也能保存下来, 但是到长时间运行, 文件会很大, 每次重启会清空, 底层用了 synchronized 性能差 2. 不要使用e.printStackTrace() 和System.out.println 原因差不多, printStackTrace 底层是使用 System.err.println 3. 日志要打印出方法的入参、出参 重要的方法要打印关键日志, 打印入参出参, 出参数据太多要进行截取打印。 4. 多分支第一行要打印日志 用于明确进入哪个分支,方便排查问题 5. 使用参数占位{}打印 log.error("id {}", id) 6. 不要打印 e.getMessage(), 要打印的详细些 e.getMessage() 输出信息太少,特别是只输出个 null的时候 log.error("", e) 打印 e, 不需要用 {} 占位符。 7. ## 日期+文件大小进行生成日志 有部分项目, 每天的日志特别大, 这里进行日期+文件大小进行生成 生成的结果如下: 数据先保存到 error.log 中, 当 error.log 文件大于 设置的大小时, 再依次生成 error.2023-06-21.0.log error.2023-06-21.1.log error.2023-06-21.2.log ![](https://img.kancloud.cn/cb/98/cb98674cde444212e8af88317ac48709_769x206.png) ``` ~~~ <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 日志存放路径 要 修改 项目名称 为自己的 --> <property name="log.path" value="logs/项目名称" /> <!-- 日志输出格式 --> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> <!-- 控制台输出 --> <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}/info.log</file> <!-- 循环政策:基于时间和文件大小创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 超过这么大就重新生成一个文件 --> <maxFileSize>50MB</maxFileSize> <!-- 日志最大的历史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>INFO</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/error.log</file> <!-- 循环政策:基于时间和文件大小创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 超过这么大就重新生成一个文件 --> <maxFileSize>50MB</maxFileSize> <!-- 日志最大的历史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>ERROR</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 系统模块日志级别控制 --> <logger name="com" level="info" /> <!-- Spring日志级别控制 --> <logger name="org.springframework" level="warn" /> <root level="info"> <appender-ref ref="console" /> </root> <!--系统操作日志--> <root level="info"> <appender-ref ref="file_info" /> <appender-ref ref="file_error" /> </root> </configuration> ~~~ ```