标签:erro public 级别 编码 其他 filename inf 创建 second
Slf4j的全称是Simple Loging Facade For Java(Java简单日志门面),它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已。所以单独的Slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如apache的org.apache.log4j.Logger,jdk自带的java.util.logging.Logger等。
Slf4j只是一种接口,它本身并不关心你底层使用的是什么日志实现方案,所以它支持各种日志实现方案。简单的说,只要我们在类库中使用Slf4j打日志,那么底层使用什么日志实现方案是使用者决定的,怎么决定?依靠配置文件和jar库。
Slf4j打印日志使用了{}占位符,这样就不会有字符串拼接操作,减少了无用ring对象的数量,节省了内存,也提高了时间效率,同时编码更加方便。
slf4j有四个级别的log level可供选择。
Debug
简单来说,对程序调试有利的信息都可以debug输出
info
对用户有用的信息
warn
可能会导致错误的信息
error
顾名思义,发生错误的地方
logback和log4j以及log4j2三者,推荐使用logback,因为logback的效率显著高于log4j,而且logback也是Springboot推荐并且默认使用的日志系统。
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </dependency>
在 src\main\resources 路径下创建logback.xml配置文件。
<?xml version="1.0" encoding="utf-8"?> <configuration scan="true" scanPeriod="10 seconds"> <!-- 文件输出格式 --> <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-40.40logger{39} : %m%n" /> <property name="charsetEncoding" value="UTF-8" /> <!--<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>--> <!--控制台日志--> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${pattern}</pattern> <charset>UTF-8</charset> </encoder> </appender> <appender name="file" class="ch.qos.logback.core.FileAppender"> <file>./logback/logfile.log</file> <append>true</append> <encoder> <pattern>${pattern}</pattern> <charset>${charsetEncoding}</charset> </encoder> </appender> <logger name="org.springframework.web" level="debug"/> <!-- show parameters for hibernate sql 专为 Hibernate 定制 --> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> <!--myibatis log configure--> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <root level="debug"> <appender-ref ref="console"/> <appender-ref ref="dailyRollingFileAppender"/> <appender-ref ref="file"/> </root> </configuration>
系统日志全部写在一个文件会导致文件越来越大,这时候可以用文件日志来切分控制台日志,在logback.xml中添加:
<appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>/usr/local/log/app.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <FileNamePattern>logback.%d{yyyy-MM-dd}.log</FileNamePattern> <!-- keep 30 days‘ worth of history --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern> </encoder> </appender>
注:
logback.%d{yyyy-MM-dd}.log定义了日志的切分方式——把每一天的日志归档到一个文件中,30表示只保留最近30天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd HH:mm:ss SSS}来定义精确到分的日志切分方式。
@RestController @RequestMapping("/Test") public class HelloWorld { @Autowired private HelloService helloService; private final static Logger logger = LoggerFactory.getLogger(HelloWorld.class);
@GetMapping("/hello") public String sayHello(){ logger.info("hello Sfl4j + logback......"); return helloService.sayHello(); } }
参考文献
https://blog.csdn.net/u012806787/article/details/78725259
标签:erro public 级别 编码 其他 filename inf 创建 second
原文地址:https://www.cnblogs.com/gavincoder/p/10090592.html