一.Log4j簡介:html
1.Log4j(log for java)java
01.是apache的一個開源項目apache
02.是使用java語言編寫的一個日誌框架api
03.用於記錄程序中的日誌信息app
04.能夠將日誌信息輸出到控制檯,文件等目的地框架
(咱們日常看到的那些以.log結尾的文件,就是日誌文件)spa
2.log4j的做用:線程
1.記錄代碼中變量的變化狀況,易於咱們的代碼調試和後期維護debug
2.週期性的保存一些數據到文件中,以便於後續使用調試
3.能夠設置日誌信息的級別,便於管理
二.log4j的經常使用配置
1.log4j的日誌組成部分
01.日誌記錄器(logger)
OFF:級別最高,用於關閉全部的日誌記錄
FATAL:嚴重的錯誤事件將會致使應用程序到退出
ERROR:錯誤事件,但仍然不影響席同德繼續運行
WARN:會出現潛在的錯誤信息
INFO:消息在粗粒度級別上突出強調應用程序的運行過程
DEBUG:細粒度信息事件對調試應用程序很是有幫助
TRACE:細粒度比DEBUG更低的信息事件
ALL:級別最低,用於開啓全部的日誌記錄
(生產環境時:建議吧DEBUG日誌級別換成WARN,避免產生大量文件)
02.日誌的輸出格式
%p : 日誌信息的優先級
%d : 日誌的輸出時間 好比
%d{yyyy-MM-dd hh:mm:ss}
%C : 輸出日誌信息的全類名
%l : 日誌輸出的位置,包含類名,線程和日誌輸出的行號
%m : 日誌輸出的信息
%M : 日誌輸入所在的方法
%n : 換行 %r : 從程序啓動到輸出日誌信息,經歷的時間(毫秒)
%t : 輸出日誌信息的線程
03.日誌的輸出目的地
01.指定日誌信息輸出到哪一個地方
02.能夠同時指定多個輸出目的地
03.一個輸出目的地就是一個Appender ===》一個類
例子: 將日誌信息輸出到console控制檯 =====》ConsoleAppender
將日誌信息輸出到文件中 =====》RollingFileAppender DailyRollingFileAppender
RollingFileAppender :按照文件的大小生成新文件
DailyRollingFileAppender : 按照時間生成新文件
三.Log4j的使用:
1.配置log4j.properties
//1.咱們須要實例化一個類 //2.ConsoleAppender console=new ConsoleAppender();//建立對象 //3.調用對象的屬性或者方法賦值 console.set 屬性 //4.log4j.appender 前綴 咱們通常不改變 log4j.appender.console=org.apache.log4j.ConsoleAppender //console.Target=System.out 對象名.屬性名=輸出位置 log4j.appender.console.Target=System.out //實例化一個Layout對象 由於Layout是一個抽象類 //因此咱們實例化一個Layout的子類便可 設置輸出格式 log4j.appender.console.Layout=org.apache.log4j.PatternLayout //%d 日期 %c 類class %1 行號 line %m錯誤信息 message %n換行 newLine log4j.appender.console.Layout.ConversionPattern=%d{yyyy-mm-dd hh\:mm\:ss} %c %l %m %n //使用log4j.rootLogger=級別,變量1,變量2... //級別,必須位於第一個位置 變量1,變量2 位置能夠互換 log4j.rootLogger=debug.console //把日誌信息打印在文件中,根據文件大小會建立新文件 log4j.appender.file=org.apache.log4j.RollingFileAppender //文件的存放位置 log4j.appender.file.File=MaxFileSize=e\:/log/log4j..log //每一個文件的最大容量 log4j.appender.file.MaxFileSize=1kb //若是超過了大小,默認產生額外文件的數量 log4j.appender.fileMaxBackupIndex=3 //設置內容滿了 以後是否覆蓋以前的內容 log4j.appender.file.Append=true log4j.appender.file.Layout=org.apache.log4j.PatternLayout log4j.appender.file.%d{yyyy-mm-dd hh\:mm\:ss} %c %l %m %n //使用log4j.rootLogger=級別,變量1,變量2....設置日誌級別和輸出目的地 log4j.rootLogger=debug.file //每分鐘生成一個新文件 log4j.appender.file2=org.apache.log4j.DailyRollingFileAppender log4j.appender.file2.Append=true //DatePattern能夠指定6中時間方式,實現日誌記錄 log4j.appender.file2.DatePattern=yyyy-mm-dd-hh-mm'.log' log4j.appender.file2.File=e\:/log/log4j..log log4j.appender.file2.Threshold=debug log4j.appender.file2.Layout=org.apache.log4j.PatternLayout log4j.appender.file2.Layout.ConversionPattern=%d{yyyy-mm-dd hh\:mm\:ss} %c %l %m %n //設置日誌輸出級別 log4j.rootLogger=debug.file2
Logback的應用
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-access --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.4</version> </dependency> <?xml version="1.0" encoding="UTF-8"?> <!-- scan:當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true。 scanPeriod:設置監測配置文件是否有修改的時間間隔,(通俗講:就是設置多長時間查看一下logback.xml文件有沒有被修改)若是沒有給出時間單位, 默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。 debug:當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。 --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 整個logback.xml文件中只有四個主要的標籤:其一是根標籤configuration,其他是三個子標籤:appende,logger,root 可是有人會疑問:那property和timestamp是作什麼的?答案是:這兩個標籤是用來爲以上提到的是三個子標籤訂義屬性和賦值的。例如: 第一個property標籤中定義了一個USER_HOME屬性,其值是/logs,scope是這個屬性的做用範圍,scope="context"是指該屬性只能在本配置文件中使用。 而timestamp定義了一個時間戳,也就是定義了一個時間格式,以供三個子標籤使用。 --> <property name="USER_HOME" value="e:/logs" /> <property scope="context" name="FILE_NAME" value="mylog-logback" /> <timestamp key="byDay" datePattern="yyyy-MM-dd" /> <!-- 第一個子標籤appender: name:標籤名,爲了讓其餘標籤調用的惟一標示,至關於html標籤中的id class:引用的類,今後類中能夠看出該appender標籤訂義的是日誌輸出的位置,也就是往哪裏輸出 ch.qos.logback.core.ConsoleAppender能夠看出是往控制檯上輸出。 encoder:該標籤中定義了日誌的輸出格式 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度 %msg:日誌消息,%n是換行符 級別分別是:TRACE < DEBUG < INFO <WARN < ERROR --> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender> <!-- class:今後類中能夠看出該appender標籤訂義的日誌輸出位置是回滾文件,也就是說:把日誌輸出到一個文件中,而且該文件能夠回滾,至於怎麼回滾請看下面的註釋 --> <appender name="log_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 定義了日誌文件的目錄結構和文件名:磁盤根目錄:/logs/mylog-logback.log 注意了:該文件名是在日誌文件沒有觸發回滾要求時的文件名,也就是說如今的日誌文件尚未知足xxMB, 一旦知足了就會按照rollingPolicy裏設置的屬性進行從新命名 --> <file>${USER_HOME}/${FILE_NAME}.log</file> <!-- rollingPolicy:回滾策略 fileNamePattern:標籤中定義的是日誌文件一旦知足5MB就從新命名成新文件的命名格式, 其中minIndex和maxIndex分別對應的是知足5MB的日誌文件的命名序號(1~10)對應%i.log中的i值。 如:mylog-logback-2016-07-12-1.log,mylog-logback-2016-07-12-2.log,mylog-logback-2016-07-12-3.log --> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${USER_HOME}/${byDay}/${FILE_NAME}-${byDay}-%i.log</fileNamePattern> <minIndex>1</minIndex> <maxIndex>10</maxIndex> </rollingPolicy> <!-- 觸發策略:當日志文件知足5MB就會出發回滾策略--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize> </triggeringPolicy> <!--%-4relative 表示,將輸出從程序啓動到建立日誌記錄的時間 進行左對齊 且最小寬度爲4。--> <encoder> <pattern>%d{HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n </pattern> </encoder> </appender> <!-- 設置哪一個目錄或者包,類使用哪一個日誌 將com.xdf包下的全部類的日誌的打印,level是打印級別:debug,若是不設置level,它將繼承它的上級<root>的日誌級別「DEBUG」 若是沒有設置addtivity,默認爲true,將此loger的打印信息向上級傳遞; 若是沒有設置appender-ref,此loger自己不打印任何信息。 --> <!-- <logger name="com.xdf" level="debug" additivity="true"> <appender-ref ref="console" /> </logger>--> <root level="debug"> <appender-ref ref="console" /> </root> </configuration>