01:是使用Java語言編寫的一個日誌框架
02:是Apache的一個開源項目
03:記錄咱們程序中的日誌信息
04:能夠將日誌信息輸出到指定的目的地html
Log4j的做用:
01:記錄咱們代碼中變量的變化,用於程序的調試和後期的維護
02:能夠週期性的保存一些數據,用於後期對數據的分析
03:經過設置日誌信息的級別,來用於咱們的管理apache
01:使用異常處理機制==>異常
02:經過debug調試(必須掌握)
03:system.out.print()
001:控制檯的行數有限
002:影響咱們的系統性能
003:若是咱們須要對用戶的行爲和習慣進行分析
咱們須要一個能把記錄用戶的行爲和習慣的代碼記錄在一個文件中
.log(日誌文件: 你們平時上網或者安裝軟件的時候,常常會看到一些以.log結尾的文件。這就是咱們的日誌文件!app
注意:並不是全部的日誌文件都是以.log結尾的,能夠是其餘的框架
把全部的信息打印在控制檯上不行嗎?
01.控制檯有行數限制;
02.System.out.println()影響系統性能;
03.若是咱們須要對一些用戶的行爲習慣進行分析,咱們找不到用戶的數據!ide
2:Log4j的經常使用配置性能
2-1: Log4j的日誌組成部分:測試
OFF: 級別最高 ,用於關閉全部的日誌輸出
ALL: 級別最低,用於開始全部的日誌輸出
Fatal: 嚴重的錯誤事件,將致使咱們的程序終止
Error: 錯誤事件,不會影響咱們程序的繼續執行
Warn: 存在潛在的度級別上的使用
Info: 指的是粗粒度級別上的使用
Debug: 指的是細粒錯誤場景
Trace: 比Debug還要細的
開發環境(開發階段):使用的日誌級別比較低 Debug
生產環境(項目上線):創建把Debug細粒度的設置成粗粒度Warn(生產環境時,建議把DEBUG日誌級別換成WARN,避免產生大量文件!)
2-3:日誌的輸出格式(Layout)
%P:日誌信息的優先級
%d:日誌的輸出的時間 %d{yyyy-MM-dd hh:mm:ss}
%C:日誌信息的輸出類
%l:日誌信息的輸出位置 類名+線程+行號
%M:日誌信息的輸出 所在方法
%m:日誌信息的輸出的內容
%n:輸出日誌信息以後 換行
%t:日誌信息的輸出 所在線程
%r:從程序啓動到輸出日誌信息所經歷的時間(毫秒)
2-4:日誌的輸出目的地(Appennder)
01:把咱們的日誌信息輸出到某個地址
02:能夠同時指定多個輸出地
03:一個輸出地就對應一個Appennder
將一個日誌輸出到Console控制檯中===》ConsoleAppennder
將日誌輸出到文件中
====>01:RollingFileAppennder 根據文件的大小建立新的日誌文件
====>02:DailyRollingFileAppennder 根據時間建立新的日誌文件
3:Log4j的使用
DailyRollingFileAppender中的 DatePattern共分爲6種方式
1.每個月 yyyy-MM
2.每週 yyyy-ww
3.天天 yyyy-MM-dd
4.每半天 yyyy-MM-dd-a
5.每小時 yyyy-MM-dd-hh
6.每分鐘 yyyy-MM-dd-hh-mm
框架:
在log4j.properties中寫代碼:
三種狀況:
01:第一種顯示在控制檯上
02:第二種在文件中以文件的形式顯示(根據時間)
03:第三種在文件夾中已存儲的容量大小顯示
共用的測試類:
package com.dzq; import org.apache.log4j.Logger; /** * Hello world! * */ public class App { public static void main( String[] args ) { //建立日誌記錄器 Logger logger = Logger.getLogger(App.class); logger.error("Error message"); logger.warn("Warn message"); logger.info("Info message"); logger.debug("Debug message"); logger.trace("Trace message"); } }
第一種狀況:
第一個:顯示在控制檯上 #實例化對象 #ConsoleAppender console =new ConsoleAppender(); log4j.appender.console =org.apache.log4j.ConsoleAppender #console.target=System.out/err 對象名.屬性名 log4j.appender.console.Target=System.out #console.Layout =new PatternLayout();//建立輸出格式對象 log4j.appender.console.Layout=org.apache.log4j.PatternLayout #console.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} %l %m %n//指定輸出格式 log4j.appender.console.Layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} %l %m %n #指定日誌的輸出級別 #log4j.rootLogger=debug,console log4j.logger.com.dzq=dubug,console
第二種狀況:spa
第二個:把日誌輸出到文件中(時間) #把日誌輸出到文件中 log4j.appender.file =org.apache.log4j.DailyRollingFileAppender #指定頻率 log4j.appender.file.DataPattern='.'yyyy-MM-dd-HH-mm'.log #指定輸出文件的位置 第一次生成的文件名稱 log4j.appender.file.File=e\:/log/log4j.log log4j.appender.file.Layout=org.apache.log4j.PatternLayout log4j.appender.file.Layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} %l %m %n #指定日誌的輸出級別 #log4j.rootLogger=debug,console log4j.logger.com.dzq=dubug,console
第三種狀況:線程
第三個:存儲大小 #把日誌信息打印在文件中,根據文件的大小建立新的文件 log4j.appender.file1=org.apache.log4j.RollingFileAppender #文件的存放位置 log4j.appender.file1.File=e\:/log4j/log4j.log #每一個文件的最大容量 log4j.appender.file1.MaxFileSize=1kb #若是超過了大小,默認產生的額度文件的數量 log4j.appender.file1.MaxBackupIndex=3 #設置內容滿了以後覆蓋的內容 log4j.appender.file1.Append=true log4j.appender.file1.Layout=org.apache.log4j.PatternLayout log4j.appender.file1.Layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} %l %m %n #指定日誌的輸出級別 #log4j.rootLogger=debug,console log4j.logger.com.dzq=dubug,console,file,file1
Logback:debug
<?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.dzq" level="debug" additivity="true"> <appender-ref ref="console" /> </logger> <root level="debug"> <appender-ref ref="console" /> </root> </configuration>
package com.dzq; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class logback { public static void main( String[] args ) { //建立日誌記錄器 Logger logger= LoggerFactory.getLogger(logback.class); logger.error("Error message"); logger.warn("Warn message"); logger.info("Info message"); logger.debug("Debug message"); logger.trace("Trace message"); } }
須要導入的四個架包