Spring boot日誌---slf4j+logback

愛吃水餃的小京發表於2020-12-18

定義一個日誌xml框架

logback-spring.xml

在resource下新建一個名為logback-spring.xml的檔案,用來配置logback

搭建一個基礎的logback配置框架
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--該變數代表日誌檔案存放的目錄名-->
    <property name="log.dir" value="logs"/>
    <!--該變數代表日誌檔名-->
    <property name="log.appname" value="eran"/>

    <!--定義一個將日誌輸出到控制檯的appender,名稱為STDOUT-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--內容待定-->
    </appender>

    <!--定義一個將日誌輸出到檔案的appender,名稱為FILE_LOG-->
    <appender name="FILE_LOG" class="ch.qos.logback.core.FileAppender">
        <!--內容待定-->
    </appender>

    <!--指定com.demo包下的日誌列印級別為INFO,但是由於沒有應用appender,所以該logger不會列印日誌資訊,日誌資訊向上傳遞-->
    <logger name="com.demo" level="INFO"/>

    <!--指定最基礎的日誌輸出級別為DEBUG,並且繫結了名為STDOUT的appender,表示將日誌資訊輸出到控制檯-->
    <root level="debug">
        <appender-ref ref="STDOUT"/>
    </root>


</configuration>
詳細的配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   
    <!--定義一個將日誌輸出到控制檯的appender,名稱為STDOUT-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--encoder定義日誌的輸出格式-->
        <encoder>
            <pattern>%date-%thread-%line-%level-%logger--%msg%n</pattern>
        </encoder>
    </appender>

    <!--定義一個將日誌輸出到檔案的appender,名稱為FILE_LOG-->
    <appender name="FILE_LOG" class="ch.qos.logback.core.FileAppender">
        <!--encoder定義日誌的輸出格式-->
        <encoder>
            <pattern>%date-%thread-%line-%level-%msg-%logger%n</pattern>
        </encoder>
        <!--file定義檔名和路徑,在工程所在的根目錄下建立log資料夾-->
        <file>/log/biz.log</file>
        <!--append是否在原檔案上追加-->
        <append>true</append>

    </appender>

    <!--指定com.demo包下的日誌列印級別為INFO,但是由於沒有應用appender,所以該logger不會列印日誌資訊,日誌資訊向上傳遞-->
    <logger name="com.demo" level="INFO"/>

    <!--指定最基礎的日誌輸出級別為INFO,並且繫結了名為STDOUT的appender,表示將日誌資訊輸出到控制檯-->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE_LOG"/>
    </root>


</configuration>
如何在程式碼中使用logback
@Service
public class AccountModel {

    private final static Logger log= LoggerFactory.getLogger(AccountModel.class);


    @Autowired
    AccountDao accountDao;

    public Map<String,Object> queryAll(){
        List<Account> accountList=accountDao.queryAll();
        Map<String,Object> accounts=new HashMap<String,Object>();
        accounts.put("accounts",accountList);
        log.info("accounts的值是{}",accountList.toString());
        return accounts;
    }


}
property屬性的使用

property屬性是定義一個變數名和它的值,可以在後續中引用這個變數名

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--該變數代表日誌檔案存放的目錄-->
    <property name="log" value="/log/log"/>

    <!--定義一個將日誌輸出到控制檯的appender,名稱為STDOUT-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--encoder定義日誌的輸出格式-->
        <encoder>
            <pattern>%date-%thread-%line-%level-%logger--%msg%n</pattern>
        </encoder>
    </appender>

    <!--定義一個將日誌輸出到檔案的appender,名稱為FILE_LOG-->
    <appender name="FILE_LOG" class="ch.qos.logback.core.FileAppender">
        <!--encoder定義日誌的輸出格式-->
        <encoder>
            <pattern>%date-%thread-%line-%level-%msg-%logger%n</pattern>
        </encoder>
        <!--file定義檔名和路徑-->
        <file>${log}/biz.log</file>
        <!--append是否在原檔案上追加-->
        <append>true</append>

    </appender>

    <!--指定com.demo包下的日誌列印級別為INFO,但是由於沒有應用appender,所以該logger不會列印日誌資訊,日誌資訊向上傳遞-->
    <logger name="com.demo" level="INFO"/>

    <!--指定最基礎的日誌輸出級別為INFO,並且繫結了名為STDOUT的appender,表示將日誌資訊輸出到控制檯-->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE_LOG"/>
    </root>


</configuration>

相關文章