• 中文
    • English
  • 注册
  • 查看作者
  • SpringBoot:开启日志

    一.  使用日志

    SpringBoot内部使用 Commons Logging 来记录日志想要使用日志,且自动配置了相关依赖,所以直接获取Logger对象使用即可。先获取Logger对象:

    private Logger logger = LoggerFactory.getLogger(XXXX.class);

    其中XXX即为要使用Logger对象的类名,比如在BookController中使用:

    import io.zhangjia.springboot06.aspect.LoggingAspect;
    import io.zhangjia.springboot06.entity.Book;
    import io.zhangjia.springboot06.service.BookService;
    import io.zhangjia.springboot06.util.R;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    
    @RestController
    public class BookController {
        @Autowired
        private BookService bookService;
    
        private Logger logger = LoggerFactory.getLogger(BookController.class);
      
        @GetMapping(value = "/book/{bookId}",produces = "application/json;charset=utf-8")
        public  R book(@PathVariable Integer bookId) {
            Book book = bookService.getBook(bookId);
            logger.info(book.toString());
            return R.success(book);
        }
       
    }

    此时访问http://localhost:8888/book/2,控制台输出:

    2019-07-29 19:34:04.368  INFO 32096 --- [nio-8888-exec-2] i.z.s.controller.BookController: Book{bookId=2, name='我的自传', author='孙著杰', price=25.0}

    其中:

    • 2019-07-29 19:34:04.368  :时间日期:精确到毫秒

    • INFO:日志级别

    • 32096:进程ID

    • — :分隔符,标识实际日志的开始

    • [nio-8888-exec-2]:线程名:方括号括起来(可能会截断控制台输出)

    • i.z.s.controller.BookController:Logger名:通常使用源代码的类名

    • Book{bookId=2, name='我的自传', author='孙著杰', price=25.0}:日志内容 [1]

    二.  日志等级

    除了上面我们使用到的logger.info外,使用Logger对象还可以输出以下信息

    import io.zhangjia.springboot06.controller.BookController;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringBoot06ApplicationTests {
    
        private Logger logger = LoggerFactory.getLogger(BookController.class);
        @ Test
        public void contextLoads(){
            logger.trace("trace");
            logger.debug("debug");
            logger.info("info"); //
            logger.warn("warn");
            logger.error("error");
        }
    
    }

    这5种不同的日志级别由低到高排列:

    • TRACE:比 DEBUG 级别的粒度更细,一般不会使用

    • DEBUG:指明细致的事件信息,一般用于调试应用

    • INFO:指明描述信息,从粗粒度上描述了应用运行过程。

    • WARN:指明潜在的有害状况。

    • ERROR:指明错误事件,但应用可能还能继续运行。[2]

    我们可以在主配置文件中,定义日志等级,这里以trace为例

    logging:
      level:
        io.zhangjia.springboot06: trace

    其中io.zhangjia.springboot06以为在该包下的所有文件都开启日志。接下来执行测试类,控制台输出:

    2019-07-29 19:56:55.270 DEBUG 36204 --- [main] i.z.s.controller.BookController : debug
    2019-07-29 19:56:55.270  INFO 36204 --- [main] i.z.s.controller.BookController : info
    2019-07-29 19:56:55.270  WARN 36204 --- [main] i.z.s.controller.BookController : warn
    2019-07-29 19:56:55.270 ERROR 36204 --- [main] i.z.s.controller.BookController : error

    如果定制的日志等级为debug,则只会输出info,warn,error,依次类推。

    在主配置文件中,除了定义日志等级外,还可以将日志保存在本地,限定文件大小等设置

    logging:
      level:
        io.zhangjia.springboot06: trace
      file: E:\logs\zhangjia.log

    如果file后的路径不存在,会自动创建。

    参考资料

    [1] flysun3344

    [2] 极客学院

  • 0
  • 0
  • 0
  • 3k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: