一、日志框架:
JUL、JCL、Jboss-logging、logback、log4j、log4j、log4j2、slf4j
日志抽象层 | 日志实现 |
JCL、SLF4J、jboos-logging | Log4J、JUL、Log4j2、Logback |
springBoot 底层是spring框架 spring框架默认是用jcl,springBoot选用 SLF4j和logback
二、SLF4J使用
在开发的时候,日志记录方法调用的应该是抽象层而不是具体实现层 ,在实际观察到代码实现中开发也是这么做的
每个日志的实现框架 都有自己的配置文件 使用slf4j以后 配置文件还是做成日志实现框架的配置文件
三、遗留问题
例如a系统使用 slf4j+logback,spring(commons-logging)、Hibernate(jboss-logging) 、MyBatis、xxx
统一日志记录,即使是别的框架统一使用 slf4j 进行输出
jcl-over-slf4j 又做了一层适配
如何让系统中所有的日志 都统一到slf4j
1、将系统中其他日志框架先排除出去
2、用中间包来替换原有的日志框架
3、我们导入slf4j其他的实现
创建springboot项目 根据maven的依赖关系,springboot已经自动引入了中间的适配层
四、如果我们要引入其他框架
一定要把这个框架的默认日志依赖移除掉
五、配置
1、properties文件
server.port=17777 logging.level.com.example = trace # 指定日志文件输入 路径 如果不指定路径则在当前项目下生成 springboot.log日志 #logging.file.path=/logs #logging.file.name=springBootLog ## 在控制台输出的日志格式 #logging.pattern.console=%d{yyyy-MM-dd} [%thread%] %-5level %logger{50} - %msg%m # ## 指定文件汇总日志输入的格式 #logging.pattern.file=%d{yyyy-MM-dd} === [%thread%] === %-5level === %logger{50} === %msg%m
2、使用 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<property name="log.path" value="/Users/yuanxu/IdeaProjects/slf4j-demo/logs/sit.log" />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="com.example.logback.filter.MyFilter" /> -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- <level>ERROR</level> 可以省略不写 -->
<!-- <level>ERROR</level>-->
</filter>
<encoder>
<!--
日志输出格式
%d 表示日期时间
%thread 表示线程名
%-5level 级别从左显示5个字符宽度
%logger{50} 标识logger名字最长50个长度 否则按照句点分割
%msg 日志消息
%n 换行符
-->
<pattern>%d{yyyy-MM-dd} %contextName [%thread] %-5level %logger{36} ---> [%file : %line]- %msg%n
</pattern>
</encoder>
</appender>
<appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<!-- rollingPolicy 指定文件是滚动的-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>
%date %level [%thread] %logger{36} [%file : %line]- %msg%n
</pattern>
<!-- <pattern>-->
<!-- ${log.path}.[%file : %line]-->
<!-- </pattern>-->
</encoder>
</appender>
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<logger name="com.example.slf4j-demo" level="warn" />
</configuration>
logback-spring.xml 则变成由spring识别 可以使用spring配置文件(yml)中的profiles
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="true" scanPeriod="1 seconds"> <contextName>logback</contextName> <property name="log.path" value="/Users/yuanxu/IdeaProjects/slf4j-demo/logs/sit.log" /> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- <filter class="com.example.logback.filter.MyFilter" /> --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- <level>ERROR</level> 可以省略不写 --> <!-- <level>ERROR</level>--> </filter> <encoder> <pattern>%d{yyyy-MM-dd} %contextName [%thread] %-5level %logger{36} ---> [%file : %line]- %msg%n </pattern> </encoder> </appender> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}</file> <!-- rollingPolicy 指定文件是滚动的--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern> </rollingPolicy> <encoder> <springProfile name="dev"> <pattern> %date %level [%thread] %logger{36} [%file : %line]- %msg%n </pattern> <!-- <pattern>--> <!-- ${log.path}.[%file : %line]--> <!-- </pattern>--> </springProfile>> <springProfile name="!dev"> <pattern> %date *** %level *** [%thread] %logger{36} [%file : %line]- %msg%n </pattern> </springProfile>> </encoder> </appender> <root level="info"> <appender-ref ref="console" /> <appender-ref ref="file" /> </root> <logger name="com.example.slf4j-demo" level="warn" /> </configuration>
标签:logging,--,Spring,file,日志,logback,logger From: https://www.cnblogs.com/yuan-x/p/16928929.html