1.maven引入jar
我这是springboot项目,引入的有如下jar包,有的版本号没写,用的话自己写
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.1</version>
</dependency>
2.logback-spring.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<springProperty scope="context" name="app-name" source="spring.application.name"/>
<springProperty scope="context" name="logging-path" source="logging.path"/>
<springProperty scope="context" name="logstash-hosts" source="logstash.hosts"/>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
<destination>${logstash-hosts}</destination>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} | %highlight(%-5level) | %boldYellow(%thread) | %boldBlue(%logger{36}[%line]) | %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} | %highlight(%-5level) | %boldYellow(%thread) | %boldBlue(%logger{36}[%line]) | %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<file>${logging-path}/${app-name}/${app-name}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${logging-path}/${app-name}/${app-name}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxHistory>365</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1024MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="STATISTICS" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} | %highlight(%-5level) | %boldYellow(%X{requestId}) | %boldBlue(%logger{36}[%line]) | %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<file>${logging-path}/${app-name}/${app-name}-formatted.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${logging-path}/${app-name}/${app-name}-formatted.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxHistory>365</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1024MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
<smtpHost>smtp.qq.com</smtpHost>
<smtpPort>587</smtpPort>
<SSL>true</SSL>
<subject>[${app-name}@online] report an error</subject>
<from>liujunzhong@koalareading.com</from>
<username>liujunzhong@koalareading.com</username>
<password>your password</password>
<asynchronousSending>true</asynchronousSending>
<to>pans@kaolaren.com</to>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<springProfile name="local">
<logger name="com.xykj.koala.logging.GlobalLogAspect" level="INFO" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="com.xykj.koala.logging.WebLogAspect" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="com.xykj" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="com.xykj.commons.http" level="INFO" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<springProfile name="test">
<logger name="com.alibaba.druid.filter.stat.StatFilter" level="ERROR">
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="FILE"/>
</logger>
<logger name="com.xykj.koala.logging.GlobalLogAspect" level="INFO" additivity="false">
<appender-ref ref="LOGSTASH"/>
</logger>
<logger name="com.xykj.koala.logging.WebLogAspect" level="DEBUG" additivity="false">
<appender-ref ref="STATISTICS"/>
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="FILE"/>
</logger>
<logger name="com.xykj" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="com.xykj.commons.http" level="INFO" additivity="false">
<appender-ref ref="FILE"/>
</logger>
<root level="WARN">
<appender-ref ref="FILE"/>
</root>
</springProfile>
<springProfile name="dev">
<logger name="com.alibaba.druid.filter.stat.StatFilter" level="ERROR">
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="FILE"/>
</logger>
<logger name="com.xykj.koala.logging.GlobalLogAspect" level="INFO" additivity="false">
<appender-ref ref="LOGSTASH"/>
</logger>
<logger name="com.xykj.koala.logging.WebLogAspect" level="DEBUG" additivity="false">
<appender-ref ref="STATISTICS"/>
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="FILE"/>
</logger>
<logger name="com.xykj" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="com.xykj.commons.http" level="INFO" additivity="false">
<appender-ref ref="FILE"/>
</logger>
<root level="WARN">
<appender-ref ref="FILE"/>
</root>
</springProfile>
<springProfile name="demo">
<logger name="com.xykj.koala.logging.WebLogAspect" level="DEBUG" additivity="false">
<appender-ref ref="STATISTICS"/>
<appender-ref ref="FILE"/>
</logger>
<logger name="com.xykj" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
</logger>
<logger name="com.xykj.commons.http" level="INFO" additivity="false">
<appender-ref ref="FILE"/>
</logger>
<root level="INFO">
<appender-ref ref="FILE"/>
<appender-ref ref="LOGSTASH"/>
</root>
</springProfile>
<springProfile name="load-test">
<logger name="com.alibaba.druid.filter.stat.StatFilter" level="ERROR">
<appender-ref ref="LOGSTASH"/>
</logger>
<logger name="com.xykj.koala.logging.WebLogAspect" level="INFO" additivity="false">
<appender-ref ref="STATISTICS"/>
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="FILE"/>
<appender-ref ref="EMAIL"/>
</logger>
<logger name="com.xykj.koala.logging.GlobalLogAspect" level="INFO" additivity="false">
<appender-ref ref="LOGSTASH"/>
</logger>
<logger name="com.xykj.commons.http" level="INFO" additivity="false">
<appender-ref ref="FILE"/>
</logger>
<logger name="com.xykj" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
</logger>
<root level="info">
<appender-ref ref="FILE"/>
<appender-ref ref="LOGSTASH"/>
</root>
</springProfile>
<springProfile name="online">
<logger name="com.xykj.koala.logging.GlobalLogAspect" level="INFO" additivity="false">
<appender-ref ref="LOGSTASH"/>
</logger>
<logger name="com.xykj.koala.logging.WebLogAspect" level="DEBUG" additivity="false">
<appender-ref ref="STATISTICS"/>
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="FILE"/>
<appender-ref ref="EMAIL"/>
</logger>
<logger name="com.xykj" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
</logger>
<logger name="com.xykj.commons.http" level="INFO" additivity="false">
<appender-ref ref="FILE"/>
</logger>
<root level="INFO">
<appender-ref ref="FILE"/>
<appender-ref ref="LOGSTASH"/>
</root>
</springProfile>
</configuration>
3.在项目中引入这个文件,同时我在上面的配置文件中指定的有变量,需要定义:
在springboot的配置文件中定义:
spring.profiles.active=dev
spring.application.name=course
logging.config=classpath:logback-spring.xml
logging.path=/var/log/java-app
#指定logstash的地址,没有可以不指定
logstash.hosts=you ip:5001
4.使用
使用时直接使用@Slf4j注解和log就可以了:
@RestController
@RequestMapping(UserClient+"/xxx/xxx")
@Slf4j
public class CourseLessonController extends BaseController{
@Autowired
private CourseLessonService courseLessonService;
@PostMapping("/xxx")
public Response<PageResponse<CourseLessonListVO>> XXX(@RequestBody LessonListPO po) {
log.info("desc:{},param:{}","内部系统查询课程列表", JSONObject.toJSONString(po));
PageResponse<CourseLessonListVO> list = courseLessonService.getLessonList(po);
return new Response<PageResponse<CourseLessonListVO>>().ok(list);
}
}