自定義logback.xml時application.yml里的日志開關配置依然生效
logging:
level:
net.jy.redis.controller.testlog: off
root: info
即使logback.xml里配置了日志輸出, net.jy.redis.controller.testlog 這個文件也不會有日志輸出。因為application.yml設置日期級別為off
logback輸出有三種方式:ConsoleAppender 控制台輸出、RollingFileAppender 根據規則輸出到不同文件、FileAppender輸出到文件
ConsoleAppender 配置最為簡單,只需要設定好encoder。
一、基本格式:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="1 seconds">
<!-- 日志上下文 -->
<contextName>logback</contextName>
<!--日志輸出到控制台規則 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d[%level]%c{100}.%M:%L%m%n
</pattern>
</encoder>
</appender>
<root level="trace">
<appender-ref ref="console"/>
</root>
</configuration>
以上就是一個簡單模板。
指定一個appender模板,然后綁定到root根路徑(除非額外設定,否則都默認按照root指定的appender輸出日志)
1、appender name名稱可以自定義,建議使用stdout:標准輸出到屏幕
2、root標簽里可以引入多個appender
二、過濾器
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 增加過濾器,控制日志級別-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<!-- 定義日志格式-->
<encoder>
<pattern>
%d[%level]%c{100}.%M:%L%m%n
</pattern>
</encoder>
</appender>
其中<filter>標簽控制了只輸出error級別及以上日志信息
三、可以配置多個控制台輸出appender,root標簽也可以增加多個appender屬性
<root level="trace">
<appender-ref ref="console"/>
<appender-ref ref="stdout"/>
</root>
這樣輸出的時候,兩個appender的日志格式都會打印到控制台
四、logger標簽
(1)<!-- 沒有指定使用哪個appender,則默認調用root標簽的,同時日志級別為error-->
<logger name="net.jy.redis.controller.logback" level="error"/>
(2)<!-- 指定appender-->
<logger name="mytest" level="warn">
<appender-ref ref="stdout"/>
</logger>
在class文件中通過private final static Logger logger = LoggerFactory.getLogger("mytest");實現后即可使用
不過這時會出現兩套日志輸出,mytest一套,root設置了一套。
進入日志請求controller
2020-01-16 10:59:47,626[ERROR]testLog:error 日志
2020-01-16 10:59:47,626[ERROR]mytest.testLog:32error 日志
2020-01-16 10:59:47,628[WARN]testLog:warn 日志
2020-01-16 10:59:47,628[WARN]mytest.testLog:40warn 日志
如果不想重復,增加屬性即可<logger name="mytest" level="warn" additivity="false">
additivity="false"代表不適用root根目錄配置
進入日志請求controller
2020-01-16 10:58:44,833[ERROR]testLog:error 日志
2020-01-16 10:58:44,836[WARN]testLog:warn 日志
<logger name="mytest" level="warn" additivity="false"/>
如果同時設定了additivity="false",又沒有指定appender,則不會進行任何日志輸出
進入日志請求controller
五、------------------測試pattern屬性
(1)%-6relative%thread%level%d%m%n
34651 http-nio-9201-exec-1ERROR2020-01-13 16:56:09,430error 日志
34652 http-nio-9201-exec-1INFO2020-01-13 16:56:09,431info 日志
34652 http-nio-9201-exec-1WARN2020-01-13 16:56:09,431warn 日志
%level日志級別 %d日期 %m自定義日志信息 %n換行
(2)%thread%level%d%m%n
http-nio-9201-exec-2ERROR2020-01-13 17:04:39,496error 日志
http-nio-9201-exec-2INFO2020-01-13 17:04:39,496info 日志
http-nio-9201-exec-2WARN2020-01-13 17:04:39,496warn 日志
(3)%d[%level]%m%n
2020-01-13 17:06:21,583[ERROR]error 日志
2020-01-13 17:06:21,583[INFO]info 日志
2020-01-13 17:06:21,583[WARN]warn 日志
可加入[]符號,這樣輸出日志結構更為清晰
(4)%d[%level]%M%m%n
2020-01-13 17:07:42,374[ERROR]testLogerror 日志
2020-01-13 17:07:42,374[INFO]testLoginfo 日志
2020-01-13 17:07:42,374[WARN]testLogwarn 日志
%M 日志輸出所屬方法
(5)%d[%level]%c{30}.%M:%m%n
2020-01-13 17:10:55,319[ERROR]n.j.r.c.l.LogbackController.testLog:error 日志
2020-01-13 17:10:55,320[INFO]n.j.r.c.l.LogbackController.testLog:info 日志
2020-01-13 17:10:55,320[WARN]n.j.r.c.l.LogbackController.testLog:warn 日志
%c{30}輸出class路徑
(6)%d[%level]%c{100}.%M:%m%n
2020-01-13 17:11:44,954[ERROR]net.jy.redis.controller.logback.LogbackController.testLog:error 日志
2020-01-13 17:11:44,955[INFO]net.jy.redis.controller.logback.LogbackController.testLog:info 日志
2020-01-13 17:11:44,955[WARN]net.jy.redis.controller.logback.LogbackController.testLog:warn 日志
(7)%d[%level]%c{100}.%M:%C{30}%m%n
2020-01-13 17:12:39,904[ERROR]net.jy.redis.controller.logback.LogbackController.testLog:n.j.r.c.l.LogbackControllererror 日志
2020-01-13 17:12:39,905[INFO]net.jy.redis.controller.logback.LogbackController.testLog:n.j.r.c.l.LogbackControllerinfo 日志
2020-01-13 17:12:39,905[WARN]net.jy.redis.controller.logback.LogbackController.testLog:n.j.r.c.l.LogbackControllerwarn 日志
%c{100} 和%C{30}%功能相似
(8)%d[%level]%c{100}.%M:%caller{30}%m%n
2020-01-13 17:13:44,983[ERROR]net.jy.redis.controller.logback.LogbackController.testLog:Caller+0 at net.jy.redis.controller.logback.LogbackController.testLog(LogbackController.java:31)
Caller+1 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Caller+2 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Caller+3 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Caller+4 at java.lang.reflect.Method.invoke(Method.java:497)
Caller+5 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
Caller+6 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
Caller+7 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
error 日志
2020-01-13 17:13:44,983[INFO]net.jy.redis.controller.logback.LogbackController.testLog:Caller+0 at net.jy.redis.controller.logback.LogbackController.testLog(LogbackController.java:33)
Caller+1 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Caller+2 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Caller+3 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Caller+4 at java.lang.reflect.Method.invoke(Method.java:497)
Caller+5 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
Caller+6 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
Caller+7 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
info 日志
2020-01-13 17:13:44,983[WARN]net.jy.redis.controller.logback.LogbackController.testLog:Caller+0 at net.jy.redis.controller.logback.LogbackController.testLog(LogbackController.java:39)
Caller+1 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Caller+2 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Caller+3 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Caller+4 at java.lang.reflect.Method.invoke(Method.java:497)
Caller+5 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
Caller+6 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
Caller+7 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
warn 日志
:%caller{30}顯示調用層級
(10)%d[%level]%c{100}.%M:%L%m%n
進入日志請求controller
2020-01-13 17:15:10,015[ERROR]net.jy.redis.controller.logback.LogbackController.testLog:31error 日志
2020-01-13 17:15:10,016[INFO]net.jy.redis.controller.logback.LogbackController.testLog:33info 日志
2020-01-13 17:15:10,016[WARN]net.jy.redis.controller.logback.LogbackController.testLog:39warn 日志
:L打印日志信息所在Class類行次