说明:本文是基于spring boot lombok @Slf4j
1.进入包
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
2.logback.xml配置 主要为第三个自定义日志配置
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <include resource="org/springframework/boot/logging/logback/base.xml" /> <property name="LOG_PATH" value="${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}" /> <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>${LOG_PATH}/info.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/info-%d{yyyyMMdd}.log.%i</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>7</maxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n </Pattern> </layout> </appender> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <File>${LOG_PATH}/error.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/error-%d{yyyyMMdd}.log.%i </fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>7</maxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n </Pattern> </layout> </appender> <!--自定义日志--> <appender name="MY_INFO" class="com.richfit.sod.appserver.common.log.CustomLog"> </appender> <root level="INFO"> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> <appender-ref ref="MY_INFO" /><!--自定义日志--> </root> </configuration>
3.日志业务处理
public class CustomLog<E> extends UnsynchronizedAppenderBase<ILoggingEvent> { @Override public void append(ILoggingEvent event) { //这里可以写业务 入库 try { if(event != null){ String message = event.getFormattedMessage(); if(message != null && message.contains("aaa")){ Object[] arg = event.getArgumentArray(); if(arg != null && arg.length > 0){ String oneArg = message.replace("'", "''"); String twoArg = arg[0].toString(); String thrArg = arg[1].toString(); System.out.println(oneArg); System.out.println(twoArg); System.out.println(thrArg); System.out.println(message); } } //Map<String, String> map = new HashMap<>(); //map.put("level", event.getLevel().levelStr); //map.put("message", message.replace("'", "''")); } /*if(message != null && message.contains("aaa")){ Thread.sleep(5000); System.out.println("aaaaaaaaaaaaaaa"); }*/ // 处理逻辑 } catch (Exception e) { System.err.println(e); } } }
4.代码使用案例
@Slf4j @RestController @RequestMapping("sfEntityList") @Api(value = "tree服务", tags = "tree服务") public class SfEntityListController { @Autowired private SfEntityListService sfEntityListService; @GetMapping(value = "/show") @ApiOperation(value = "配置树-根据树entityListId查询当前节点对象", notes = "配置树-配置树-根据树entityListId查询当前节点对象", produces = "application/json") public BaseResult show(@ApiParam(required = true, value = "业务树id") @RequestParam(value = "entityListId", required = true) String entityListId) { log.info("aaa","bbb","ccc","ddd","fff");//日志使用 return new SuccessResult(sfEntityListService.getById(entityListId)); }
5.到此日志结束,每天进步一点点。。。。。。。。。