循序渐进看Java web日志跟踪(2)-Java日志API认识
生活随笔
收集整理的這篇文章主要介紹了
循序渐进看Java web日志跟踪(2)-Java日志API认识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
接觸過Java的朋友應該都會知道,java的開源框架百花齊放,實現同樣的功能,總能找到幾個強大的開源框架來進行選擇。在日志方面,Java同樣不遜色。除了JDK本身自帶的簡單的日志工具,java還有如log4j,commons-loggin,slf4j,logback等眾多第三方工具框架可供開發者使用,其中,上述幾個框架,雖說都實現了日志記錄的功能,但相互之間各分伯仲,同時,也存在著一定的聯系。比如,log4j,slf4j,logback就是出自同一個人之手。 在了解各個框架之前,首先過過大部分日志框架的使用時會遇到的一些概念。 1、日志工具類(logger):通常,大部分的日志框架都會定義一個主要的日志輸出的工具類,開發者只需要聲明該類,即可實現大部分的日志輸出操作 2、日志輸出級別(Level):日志輸出的級別,意味著該日志的重要程度,大部分的日志框架的級別會分為:Debug(調試模式),Info,warn,error,fatal,其中,根據級別的大小排序,debug>info>warn>error>fatal。級別的大小,將會影響日志的輸出,將級別設置的越高,輸出的信息將會越多 3、日志輸出格式(format):日志輸出的格式,通常可以進行自定義,通過自定義的格式,輸出的詳細效果將不同 4、日志輸出的方式:即將日志輸出到哪?常見的輸出方式包括如:控制臺,文本文件,數據庫等 5、日志分割:日志文件若以文件的方式進行輸出的話,會存在文件大小問題,所以需要對日志進行分割,分割的方式可以分為按大小,按日期等。 如圖,常見的日志框架的工作流程大約都會圍繞著幾個對象展開。首先,通過日志工廠產生一個日志工具類,通過該類來進行日志的輸出和日志輸出級別的設置,該類的輸出,其實是通過另外的框架中定義的不同類型輸出類進行輸出,常見的包括文件輸出,數據庫輸出,都有與之相對應的日志輸出類。同時,該類接收來自配置文件或者開發者自定義的日志輸出格式,會根據該日志格式進行日志的輸出。 了解過大部分日志框架的工作方式,接下來了解一下,java的一些日志框架。 首先,java日志框架嫡長子,jdk自帶的log工具,該工具自JDK1.4版本開始就包含在java.util.logging包下。該工具由于太過粗糙,所以并沒有得到廣泛的使用,但是log框架應有的日志處理功能還是能夠實現的: 以下是通過JDK自帶的日志工具實現輸出的實例代碼: 1 public class SimpleLog {
2
3
4 public static void main(String[] args) throws SecurityException, IOException {
5 Logger log=Logger.getLogger("Test");
6 //添加log處理,默認是console
7 ConsoleHandler console=new ConsoleHandler();
8 console.setLevel(Level.ALL);
9 log.addHandler(console);
10 FileHandler file=new FileHandler("log.log");
11 file.setLevel(Level.WARNING);
12 log.addHandler(file);
13 //設置日志輸出格式
14 file.setFormatter(new Formatter() {
15
16 @Override
17 public String format(LogRecord record) {
18 // TODO Auto-generated method stub
19 return new SimpleDateFormat("yyyy-MM-dd hh-mm-ss").format(new Date(record.getMillis())) +"------"+record.getLevel()+"-------"+record.getClass()+"-------"+record.getLoggerName()+"----"+record.getMessage()+"\t\n";
20 }
21 });
22 console.setFormatter(new Formatter() {
23
24 @Override
25 public String format(LogRecord record) {
26 return new SimpleDateFormat("yyyy-MM-dd hh-mm-ss").format(new Date(record.getMillis())) +"------"+record.getLevel()+"-------"+record.getClass()+"---"+record.getSourceMethodName()+"-------"+record.getLoggerName()+"----"+record.getMessage()+"\t\n";
27 }
28 });
29 //日志控制
30 log.log(Level.SEVERE, "測試日志");
31 log.log(Level.INFO, "測試日志");
32 log.log(Level.WARNING, "測試日志");
33 log.log(Level.OFF, "測試日志");
34
35 }
?
接下來,看一下常見的日志框架,common-loggin,log4j,slf4j,logback。其實,個人認為,真正其中真正算是日志框架的只有log4j和logback而已。因為common-logging和slf4j都是進行日志框架整合的工具,本身并沒有獨特的日志處理功能。commons-logging其實是一個日志集合api,它通過檢測classpath環境下存在怎么樣的log工具,然后通過調用該工具來進行日志輸出操作 。默認情況下,common-logging是通過jdk自帶的log工具來實現日志輸出的,當檢測到項目中存在log4j此類的日志框架及其配置文件的時候,common-logging就會去調用該框架來進行日志的輸出。 接著,看下log4j,一個強大的日志框架。它支持文件俺輸出,復雜的自定義格式輸出,支持輸出成html,數據庫等,一系列的強大功能讓它成為了許多開源框架首選的日志工具。具體的關于log4j的配置,后續繼續更新。 再說說slf4j,其實它和common-logging有相似的功能,只不過,它并不是通過自己實現日志的整合,而是通過定義接口的,定義標準的方式進行的。Common-logging是通過自身來實現日志框架的調用,而slf4j并不同,它自身其實并沒有實現功能,它定義了接口,使用它進行日志輸出,通常需要導入slf4j的標準包,日志框架的包,還有就是繼承了slf4j定義的接口的操作對應日志框架的實現類包。表面上,我們是在使用slf4j進行日志輸出,其實,我們使用的是對應的實現類包中的方法進行日志輸出。 最后一個說到的日志框架,是logback,他和slf4j,log4j是同一個作者。后期,log4j停止了更新后,他又開源了一個新的日志框架就是logback,目前,國外的許多框架也已經開始使用logback了。因為是同出一人,所以logback的一些api其實與log4j有些相似之處,同時,logback也符合slf4j定義的標準,所以如果在項目中使用了slf4j和log4j,后期要改成logback,需要做的調整會比較少。轉載于:https://www.cnblogs.com/Seanit/p/5126019.html
總結
以上是生活随笔為你收集整理的循序渐进看Java web日志跟踪(2)-Java日志API认识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring MVC 学习笔记 json
- 下一篇: SQL Server时间粒度系列----