1、springboot推荐的日志类库是slf4j、日志系统为logback,确实我回头一看项目中使用的都是slf4j,说明这个东西确实有他的优点。上文中也说了一点,slf4j有个接口叫Logger,提供了丰富的日志输出方法,包含了所有日志级别的输出。使用方式也是特别的简单,用slf4j的工厂类获取一个logger ,然后就可以输出日志了,默认情况下,日志只会输出到控制台。
2、通过在application.properties文件中配置logging.file、logging.path可以控制日志文件的输出路径和文件名。不过有些细节需要注意,否则配置不生效,我测试了几种情况。
3、如果,两者都配置了:logging.file=myLog.log、logging.path=D:/data/mylog,注意windos的路径(后面配置文件中也是/),此时并不会在d盘下生成日志文件,只会在项目的根目录下创建一个myLog.log的文件(workspace中,此项目的根目录)。其原因是,没有logback-spring.xml配置文件,系统只认识logging.file,不认识logging.path。
4、所以要配置logback-spring.xml,spring boot会默认加载此文件,为什么不配置logback.xml,因为logback.xml会先application.properties加载,而logback-spring.xml会后于application.properties加载,这样我们在application.properties文中设置日志文件名称和文件路径才能生效。
5、且看logback-spring.xml的配置详情。注意${LOG_PATH}和${LOG_FILE}分别是获取配置文件中的路径和文件名称,必须使用这两个全局的配置去获取。然后重启项目,发现在配置的目录下,有了相应的日志文件。
6、日志文件的配置结构:(1)FILE_LOG_PATTERN:日志输出格式变量,在控制台输出和文件中输出的append中都引用了此变量。(2)consoleLog:定义一个控制台的appender(3)fileLog:定义一个日志文件的appender,这就是文件输出的详细配置,<File>是日志文件的输出地址:必须要为${LOG_PATH}/${LOG_FILE},这样我们在application.properties中的配置才有效。level标签:如果我们设置了level为info,只会输出info的日志信息,其他日志级别的日志就会过滤掉,建议不配置level属性。(4)logger:其name就是项目中对应的包路径,appender-ref是appender的引用,在本配置文件中,意思就是com.example.xyx.MySpringBootTest包下文件的日志,按照fileLog的配置去输出,即按照FILE_LOG_PATTERN的格式,输出到D:/data/mylog/myLog.log文件中。标签level="debug"是设置日志级别:作用是debug级别及其以上级别的日志会输出(debug、info、warn、error,,,),注意此处的level是一个下线,比其日志级别高的日志信息也会输出,很重要。additivity="false"是配置此logger是否提交给其他的logger或者root节点,如果true,则root也会执行或者其他的可以拦截到的logger节点,且logger的level优先级高;否则不会执行,在本配置文件中即控制台不会输出com.example.xyx.MySpringBootTest包下文件的日志。(5)root:根节点,在logback-spring.xml中只引用了控制台日志输出配置,不会输出到文件,如果想输出到文件,可以写再写一个引用。level=info,在控制台输出into级别及其以上级别的日志。会拦截所有包下的日志,但是其输出会受到logger的影响,即注意logger中的additivity属性,如果为false,com.example.xyx.MySpringBootTest包下的日志不会输出到控制台。