1.logback介紹api
logback是由log4j創始人設計的又一個開源日誌組件。logback當前分紅三個模塊:logback-core,logback-classic和logback-access。logback-core是其它兩個模塊的基礎模塊。logback-classic是log4j的一個改良版本。此外logback-classic完整實現SLF4J API使你能夠很方便地更換成其它日誌系統如log4j或JDK14 Logging。logback-access訪問模塊與Servlet容器集成提供經過Http來訪問日誌的功能(用的少)。app
2. maven依賴maven
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.1.7</version> </dependency>
logback-classic包含了logback-core,不須要再單獨引用了。ide
3. 配置和使用ui
1. 日誌使用this
咱們使用org.slf4j.LoggerFactory,就能夠直接使用日誌了。spa
private static final Logger logger = LoggerFactory.getLogger(this.getClass());
使用:debug
@Controller @RequestMapping(value = "") public class IndexController extends BaseController { /** * Success * @param response * @throws IOException */ @RequestMapping(value = "") @ResponseBody public void hello(HttpServletResponse response) throws IOException { logger.debug("DEBUG TEST 這個地方輸出DEBUG級別的日誌"); logger.info("INFO test 這個地方輸出INFO級別的日誌"); logger.error("ERROR test 這個地方輸出ERROR級別的日誌"); } }
logback的配置文件都放在/src/main/resource/文件夾下的logback.xml文件中。其中logback.xml文件就是logback的配置文件。只要將這個文件放置好了以後,系統會自動找到這個配置文件。設計
下面的配置中,咱們輸出特定的ERROR級別的日誌:日誌
<?xml version="1.0"?>
<configuration>
<!-- ch.qos.logback.core.ConsoleAppender 控制檯輸出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">
<pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日誌級別 -->
<root>
<level value="error" />
<appender-ref ref="console" />
</root>
</configuration>
結果只在控制檯輸出ERROR級別的日誌。
<?xml version="1.0"?>
<configuration>
<!-- ch.qos.logback.core.ConsoleAppender 控制檯輸出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日誌級別 -->
<root>
<level value="error" />
<level value="info" />
<appender-ref ref="console" />
</root>
</configuration>
設置兩個level,則能夠輸出 ERROR和INFO級別的日誌了。
additivity="false"不多將這個屬性設置爲true
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- ch.qos.logback.core.ConsoleAppender 控制檯輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder charset="UTF-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日誌輸出 --> <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${catalina.base}/logs/guide_info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${catalina.base}/logs/guide_info.%d{yyyy-MM-dd}-%i.log</fileNamePattern> <maxHistory>30</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <MaxFileSize>50MB</MaxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- ch.qos.logback.core.rolling.RollingFileAppender 異常日誌輸出 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${catalina.base}/logs/guide_error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${catalina.base}/logs/guide.%d{yyyy-MM-dd}-%i.log</fileNamePattern> <maxHistory>30</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <MaxFileSize>50MB</MaxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!--打印info級別的日誌--> <logger name="infoLog" level="info" additivity="false"> <appender-ref ref="INFO" /> </logger> <!--打印異常錯誤日誌--> <logger name="errorLog" level="error" additivity="false"> <appender-ref ref="ERROR" /> </logger> <!-- 日誌級別 --> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration>
public class Test { public static void main(String[] args) { Logger INFO_LOG = LoggerFactory.getLogger("infoLog"); Logger ERROR_LOG = LoggerFactory.getLogger("errorLog"); INFO_LOG.info("業務日誌"); ERROR_LOG.error("異常日誌"); } }
/** * Return a logger named according to the name parameter using the * statically bound {@link ILoggerFactory} instance. * * @param name * The name of the logger. * @return logger */ public static Logger getLogger(String name) { ILoggerFactory iLoggerFactory = getILoggerFactory(); return iLoggerFactory.getLogger(name); }
<logger name="com.xxx" additivity="false">
<level value="info" />
<appender-ref ref="file" />
<appender-ref ref="console" />
</logger>