把項目日誌系統封裝到基礎依賴包中。
把請求日誌提交給Cat客戶端進行監控。
log4j2.xml 配置文件
xml文件,定義一些屬性,properties
log4j2.xml的配置,log4j2.xml配置文件中各項標籤的意義。
配置文件的名稱以及在項目中的存放位置;
1)2.x版本配置文件後綴名只能爲".xml",".json"或者".jsn".
2)系統選擇配置文件的優先級(從先到後),項目resoureces目錄下。
3)一般默認使用log4j2.xml進行命名;
配置文件節點解析:屬性和節點。
根節點Configuration有兩個屬性:status和monitorinterval,有兩個子節點:Appenders和Loggers(表明可以定義多個Appender和Logger).只有定義了logger並引入的appender,appender纔會生效。
tatus用來指定log4j本身的打印日誌的級別.一般生產環境使用info級別,日誌的級別。
Appenders節點,常見的有三種子節點:Console、RollingFile、File.
Console節點用來定義輸出到控制檯的Appender.
1)name:指定Appender的名字.
2)target:SYSTEM_OUT 或 SYSTEM_ERR,一般只設置默認:SYSTEM_OUT.
3)PatternLayout:輸出格式,不設置默認爲:%m%n.
File節點用來定義輸出到指定位置的文件的Appender.
1)name:指定Appender的名字.
2)fileName:指定輸出日誌的目的文件帶全路徑的文件名.
3)PatternLayout:輸出格式,不設置默認爲:%m%n.
RollingFile節點用來定義超過指定大小自動刪除舊的創建新的的Appender.
name:指定Appender的名字.
fileName:指定輸出日誌的目的文件帶全路徑的文件名.
PatternLayout:輸出格式,不設置默認爲:%m%n.
filePattern:指定新建日誌文件的名稱格式.
Policies:指定滾動日誌的策略,就是什麼時候進行新建日誌文件輸出日誌.
基於時間的滾動策略,基於指定文件大小的滾動策略。
Loggers節點,常見的有兩種:Root和Logger.
Appender屬於日誌處理器。
Logger節點用來單獨指定日誌的形式,比如要爲指定包下的class指定不同的日誌級別等。
程序會打印高於或等於所設置級別的日誌,設置的日誌等級越高,打印出來的日誌就越少。
不同級別的日誌寫入到不同的文件中,RollingFile結點。
過濾掉spring和mybatis的一些無用的DEBUG信息。
使用Slf4j集成Log4j2構建項目日誌系統;使用slf4j可以很好的保證我們的日誌系統具有良好的兼容性,兼容當前常見幾種日誌系統
slf4j核心包,log4j2核心包,與slf4j保持橋接
一般不是使用slf4j的配置文件麼? 統一使用日誌門面的還是日誌實現的?一般使用日誌門面的配置文件。
日誌如何每天進行分頁?每天創建一個文件夾。
log日誌顯示的默認格式
日誌輸出級別,這個修改是如何影響你的代碼運行的?
日誌配置文件裏面是什麼? 日誌的顯示格式,如何分頁等?
爲什麼要關注顯示格式?
Kibana是爲Elasticsearch設計的開源分析和可視化平臺。你可以使用 Kibana 來搜索,查看存儲在 Elasticsearch索引中的數據並與之交互。你可以很容易實現高級的數據分析和可視化,以圖標的形式展現出來.所有的log數據全部存儲在ES上面。
https://www.cnblogs.com/new-life/p/9246143.html
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" monitorInterval="30">
<properties>
<property name="logPath" value="${sys:LOG_PATH:-/opt/tomcat-log}"/>
<property name="logPatternLayout"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%t] %class{36}.%M - %msg%xEx%n"/>
<property name="logRolloverSize" value="100M"/>
<property name="logKeepDays" value="15d"/>
<property name="logDirNumberOfFiles" value="300"/>
</properties>
<Appenders>
<!--CONSOLE-->
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout charset="UTF-8" pattern="${logPatternLayout}"/>
</Console>
<!--TRACE-->
<RollingFile name="TRACE" filename="${logPath}/trace.log"
filepattern="${logPath}/$${date:yyyy-MM-dd}/trace-%d{yyyyMMdd}-%i.log">
<PatternLayout charset="UTF-8" pattern="${logPatternLayout}"/>
<Filters>
<ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${logRolloverSize}"/>
</Policies>
<DefaultRolloverStrategy max="${logDirNumberOfFiles}">
<Delete basePath="${logPath}" maxDepth="3">
<IfFileName glob="*/trace*.log"/>
<IfLastModified age="${logKeepDays}"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<!--DEBUG-->
<RollingFile name="DEBUG" filename="${logPath}/debug.log"
filepattern="${logPath}/$${date:yyyy-MM-dd}/debug-%d{yyyyMMdd}-%i.log">
<PatternLayout charset="UTF-8" pattern="${logPatternLayout}"/>
<Filters>
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${logRolloverSize}"/>
</Policies>
<DefaultRolloverStrategy max="${logDirNumberOfFiles}">
<Delete basePath="${logPath}" maxDepth="3">
<IfFileName glob="*/debug*.log"/>
<IfLastModified age="${logKeepDays}"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<!--INFO-->
<RollingFile name="INFO" filename="${logPath}/info.log"
filepattern="${logPath}/$${date:yyyy-MM-dd}/info-%d{yyyyMMdd}-%i.log">
<PatternLayout charset="UTF-8" pattern="${logPatternLayout}"/>
<Filters>
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${logRolloverSize}"/>
</Policies>
<DefaultRolloverStrategy max="${logDirNumberOfFiles}">
<Delete basePath="${logPath}" maxDepth="3">
<IfFileName glob="*/info*.log"/>
<IfLastModified age="${logKeepDays}"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<!--WARN-->
<RollingFile name="WARN" filename="${logPath}/warn.log"
filepattern="${logPath}/$${date:yyyy-MM-dd}/warn-%d{yyyyMMdd}-%i.log">
<PatternLayout charset="UTF-8" pattern="${logPatternLayout}"/>
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${logRolloverSize}"/>
</Policies>
<DefaultRolloverStrategy max="${logDirNumberOfFiles}">
<Delete basePath="${logPath}" maxDepth="3">
<IfFileName glob="*/warn*.log"/>
<IfLastModified age="${logKeepDays}"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<!--ERROR-->
<RollingFile name="ERROR" filename="${logPath}/error.log"
filepattern="${logPath}/$${date:yyyy-MM-dd}/error-%d{yyyyMMdd}-%i.log">
<PatternLayout charset="UTF-8" pattern="${logPatternLayout}"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${logRolloverSize}"/>
</Policies>
<DefaultRolloverStrategy max="${logDirNumberOfFiles}">
<Delete basePath="${logPath}" maxDepth="3">
<IfFileName glob="*/error*.log"/>
<IfLastModified age="${logKeepDays}"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<CatAppender name="CatAppender"/>
</Appenders>
<Loggers>
<Root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="TRACE"/>
<appender-ref ref="DEBUG"/>
<appender-ref ref="INFO"/>
<appender-ref ref="WARN"/>
<appender-ref ref="ERROR"/>
<appender-ref ref="CatAppender"/>
</Root>
<Logger name="org.apache.catalina.startup.DigesterFactory" level="error"/>
<Logger name="org.apache.catalina.util.LifecycleBase" level="error"/>
<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn"/>
<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn"/>
<Logger name="org.crsh.plugin" level="warn"/>
<logger name="org.crsh.ssh" level="warn"/>
<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error"/>
<Logger name="org.hibernate.validator.internal.util.Version" level="warn"/>
<logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
<logger name="org.thymeleaf" level="warn"/>
</Loggers>
</Configuration>