https://blog.csdn.net/qq_27093465/article/details/62928590
使用slf4j的優點:
提供帶參數的日志輸出方法(SLF4J 1.7及以后版本)。
日志級別
- OFF 為最高等級 關閉了日志信息
- FATAL 為可能導致應用中止的嚴重事件錯誤
- ERROR 為嚴重錯誤 主要是程序的錯誤
- WARN 為一般警告,比如session丟失
- INFO 為一般要顯示的信息,比如登錄登出
- DEBUG 為程序的調試信息
- TRACE 為比DEBUG更細粒度的事件信息
- ALL 為最低等級,將打開所有級別的日志
配置日志信息輸出目的地
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)
- org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
- org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
配置日志信息的格式
- org.apache.log4j.HTMLLayout(以HTML表格形式布局),
- org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
- org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
- org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
日志信息格式中幾個符號所代表的含義:
-X號: X信息輸出時左對齊;
%p: 輸出日志信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%r: 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c: 輸出日志信息所屬的類目,通常就是所在類的全名
%t: 輸出產生該日志事件的線程名
%l: 輸出日志事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
%%: 輸出一個"%"字符
%F: 輸出日志消息產生時所在的文件名稱
%L: 輸出代碼中的行號
%m: 輸出代碼中指定的消息,產生的日志具體信息
%n: 輸出一個回車換行符,Windows平台為"/r/n",Unix平台為"/n"輸出日志信息換行可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
- 1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。
- 2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,"-"號指定左對齊。
- 3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。
- 4)%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊較遠輸出的字符截掉。
使用辦法
pom中只需引入slf4j,然后maven會引入它所依賴的其它JAR包。
1.在pom文件中添加代碼
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
建立log4j的配置文件,假設只輸出到控制台
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER"
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 輸出日志到控制台 ConsoleAppender -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%p:%d{dd HH:mm:ss,SSS\}ms- [%c{1}]%L行-%m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="INFO"/>
</filter>
<!--
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="INFO" />
</filter>
-->
<filter class="org.apache.log4j.varia.StringMatchFilter">
<param name="StringToMatch" value="Configkeeper" />
<param name="AcceptOnMatch" value="false" />
</filter>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="console" />
</root>
</log4j:configuration>
3.在web.xml中配置log4j
<!-- 配置log4j配置文件路徑 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/config/log4jConfig.xml</param-value>
</context-param>
<!-- 配置Log4j監聽器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
如果在某個Controller或者Model或者Service或者Dao中輸出日志的時候需要引入
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
然后實例化,比如在controller中

需要打印日志的地方
logger.info("當前狀態{}", "收到列表請求,並進入");
運行效果 
當不需要使用log4j 用回java的loggin的時候,
在pom.xml中進行如下修改,重新部署即可

輸出風格又回來了

