springboot-日志管理&任务调度

一、任务调度

  1. 定时任务的配置
    –schedule基本使用步骤:

1)启动类里面 @EnableScheduling开启定时任务,自动扫描

@SpringBootApplication
@EnableScheduling   //开启 定时任务 自动扫描
public class Springboot05Application {
    public static void main(String[] args) {
        SpringApplication.run(Springboot05Application.class, args);
    }
}

2)定时任务业务类 加注解 @Component被容器扫描
3)定时执行的方法加上注解 @Scheduled(fixedRate=2000) 定期执行一次

@Component
public class TaskTest {

    @Scheduled(fixedRate = 2000)   //定时2秒执行一次
    public void test1(){
        System.out.println("任务调度1------" + new Date());
    }
}
  1. 其他配置
    a、cron配置定时任务表达式https://tool.lu/crontab/
    b、fixedRate: 定时多久执行一次(上一次开始执行时间点后xx秒再次执行;)
    c、fixedDelay: 上一次执行结束时间点后xx秒再次执行
    d、fixedDelayString: 字符串形式,可以通过配置文件指定
@Component
public class TaskTest {
    @Scheduled(cron = "*/2 * * * * *")   //定时2秒执行一次
    public void test2(){
        System.out.println("任务调度2------" + new Date());
    }

    @Scheduled(fixedDelay = 3000)   //上一次执行结束时间点后3秒再次执行
    public void test3(){
        System.out.println("任务调度3------" + new Date());
    }

    @Scheduled(fixedDelayString = "3000")   //字符串形式,上一次执行结束时间点后3秒再次执行
    public void test4(){
        System.out.println("任务调度4------" + new Date());
    }

}
  1. 配置异步定时任务

a.启动类需加注解:@EnableAsync

@SpringBootApplication
//@EnableAsync   //异步定时任务
public class Springboot05Application {
    public static void main(String[] args) {
        SpringApplication.run(Springboot05Application.class, args);
    }
}

b.增加Future 返回结果 AsyncResult(“task执行完成”);
c.如果需要拿到结果 需要判断全部的 task.isDone()

@RestController
@RequestMapping("/api")
public class AsyncController {

    @Autowired
    public AsyncTask asyncTask;

    @GetMapping("/async")
    public Object async() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Future<String> future1 = asyncTask.test1();
        Future<String> future2 = asyncTask.test2();
        Future<String> future3 = asyncTask.test3();

        Thread.sleep(2000);

        while (true){
            if (future1.isDone() & future2.isDone() & future3.isDone()) {
                break;         //异步接口内部都执行完毕,终止循环
            }
        }
        long end = System.currentTimeMillis();

        long time = end - begin;
        System.out.println("异步的总执行时间是:" + time);
        return JsonData.buildSuccess(time); //这调用了Json工具类
    }
}

二、日志管理

  1. 日志介绍
    1.1、常用处理java的日志组件 slf4j,log4j,logback,common-logging 等
    1.2、logBack是在log4j基础的改良,但不能单独使用,可配合slf4j使用
    1.3、logBack核心对象
    Logger: 日志记录器
    Appender:指定日志输出目的地,可以是控制台或文件
    Layout: 日志布局,用于格式化日志信息的输出
    1.4、日志级别:debug<info<warn<error
    1.5、 实例,见备注
    1.6、Log4j日志转换为logBack在线工具(可以将log4j.properties文件内容转成logback.xml) 网址:https://logback.qos.ch/translator/

    log4j实例:

		===========log4j示例===========
        ### 设置###
        log4j.rootLogger = debug,stdout,D,E

        ### 输出信息到控制抬 ###
        log4j.appender.stdout = org.apache.log4j.ConsoleAppender
        log4j.appender.stdout.Target = System.out
        log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
        log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

        ### 输出DEBUG 级别以上的日志到=D://logs/error.log ###
        log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
        log4j.appender.D.File = D://logs/log.log
        log4j.appender.D.Append = true
        log4j.appender.D.Threshold = DEBUG
        log4j.appender.D.layout = org.apache.log4j.PatternLayout
        log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

        ### 输出ERROR 级别以上的日志到=D://logs/error.log ###
        log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
        log4j.appender.E.File =C://logs/error.log 
        log4j.appender.E.Append = true
        log4j.appender.E.Threshold = ERROR
        log4j.appender.E.layout = org.apache.log4j.PatternLayout
        log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

        ===========logback============
  1. 整合自定义logback
    springboot整合logback参考文档:
    https://docs.spring.io/spring-boot/docs/2.2.5.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-logging

    LogBack官网:https://logback.qos.ch/manual/index.html
    
    1、默认情况下,Spring Boot将日志输出到控制台,日志信息属于logBack
    2、整合logBack
    在工程的Resources中创建日志文件logback-spring.xml,官方推荐 -spring.xml结尾
    

    logback-spring.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>

	 <appender name="consoleApp" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            </pattern>
        </layout>
    </appender>

    <appender name="fileInfoApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            </pattern>
        </encoder>
        <!-- 滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 路径 -->
            <fileNamePattern>app_log/log/app.info.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <appender name="fileErrorApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            </pattern>
        </encoder>
        
        <!-- 设置滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 路径 -->
            <fileNamePattern>app_log/log/app.err.%d.log</fileNamePattern>
            
            <!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,
            且<maxHistory> 是1,则只保存最近1个月的文件,删除之前的旧文件 -->
             <MaxHistory>1</MaxHistory>
            
        </rollingPolicy>
    </appender>
   <root level="INFO">  
        <appender-ref ref="consoleApp"/>
        <appender-ref ref="fileInfoApp"/>
        <appender-ref ref="fileErrorApp"/>
    </root>
</configuration>
发布了38 篇原创文章 · 获赞 7 · 访问量 2181

猜你喜欢

转载自blog.csdn.net/q_2540638774/article/details/105075302