SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。
创建logback.xml文件,并且把文件放到classpath下,
spring boot默认就是使用Logback。
<?xml version="1.0" encoding="UTF-8"?><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<file>d:/log/output.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>d:/llog/output.log.%i</fileNamePattern>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>1MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="ERROR">
<!--以下内容表示把日志输出到控制台-->
<appender-ref ref="CONSOLE" />
<!--以下内容表示把日志输出到上面配置的文件里面-->
<appender-ref ref="FILE" />
</root>
然后在类文件中加入代码
Logger logger= LoggerFactory.getLogger(TestController.class);
logger.error(“系统发生错误,参数1:{}”,参数值);在打印日志尽量使用占位符的方式,方便查看。不过查看源代码后都是采用Stringbuilder进行拼接。此处引申出StringBuilder是线程不安全,StringBuffer是线程安全的。
日志中配置的文件中就写入了“系统发生错误”信息。
如果使用了lombok,则在类上增加@Slf4j的注解
通过log.error(“系统发生错误”);来输出日志
日志在需要输出类名和函数名时,采用以下代码:
String className = this.getClass().getName();// 这是完整的类路径名
String simpleClassName = this.getClass().getSimpleName();// 仅仅是类名
以下是获取方法名
String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
如果要写入到日志配置文件中的固定的文件,比如配置文件中有以下配置,
<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>logs/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!--系统用户操作日志-->
<logger name="sys-user" level="info">
<appender-ref ref="sys-user"/>
</logger>
那么可以通过以下代码来进行
private static final Logger logger = LoggerFactory.getLogger(“sys-user”);
logger.info(“user opt”);