欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:log4j學習

柚子快報邀請碼778899分享:log4j學習

http://yzkb.51969.com/

依賴

log4j

log4j

1.2.17

org.junit.jupiter

junit-jupiter

RELEASE

compile

入門案例以及日志級別說明

@Test

public void test01() {

/*

Log4入門案例

注意在家初始化信息:BasicConfigurator.configure();

日志級別說明:

Log4j提供了8個級別的日志輸出,分別為

ALL 最低等級 用于打開所有幾倍的日志記錄

TRACE 程序推進下的追蹤信息,這個追蹤信息的日志級別非常低,一般情況下不使用

DEBUG 指出細粒度信息時間對調(diào)試應用程序是非常有幫助的,主要是配合開發(fā),在開發(fā)過程中打印一些重要的運行信息

INFO 消息的粗粒度級別運行信息

WARN 表示警告,程序在運行過程中會出現(xiàn)的有可能會發(fā)生的隱形的錯誤信息

注意:,有些信息不是錯誤,但是這個級別的輸出目的就是為了給程序員以提示

ERROR 系統(tǒng)的錯誤信息,發(fā)生的錯誤不影響系統(tǒng)的運行

一般情況下,如果不想輸出太多的日志,則使用該級別即可

FATAL 表示嚴重錯誤,它是哪一種一旦發(fā)生系統(tǒng)就不可能繼續(xù)運行的嚴重錯誤

如果這種級別的錯誤出現(xiàn)了,表示程序就可以停止運行了

OFF 最高等級的級別,用戶關閉所有的日志記錄

其中 DEBUG 是默認的日志輸出級別

*/

// 加載初始化配置

BasicConfigurator.configure();

Logger logger = Logger.getLogger(Log4jTest.class);

logger.fatal("fatal信息");

logger.error("error信息");

logger.warn("warn信息");

logger.info("info信息");

logger.debug("debug信息");

logger.trace("trace信息");

}

配置文件說明

log4j.rootLogger = trace,console

# 配置appender 輸出方式 日志輸出到哪里,現(xiàn)在是控制臺

log4j.appender.console = org.apache.log4j.ConsoleAppender

# 表示輸出的格式

log4j.appender.console.layout = org.apache.log4j.PatternLayout

log4j.appender.console.layout.conversionPattern = %r [%t] %p %c %x - %m%n

@Test

public void test02() {

/*

配置文件的說明

1、觀察原源碼 BasicConfigurator.configure();

可以得到兩條信息

(1)創(chuàng)建根節(jié)點對象 Logger root = Logger.getRootLogger();

(2)根節(jié)點添加了ConsoleAppender對象(表示默認打印到控制臺,自定義的格式化輸出)

2、不使用 BasicConfigurator.configure();加載

使用自定義的配置文件來實現(xiàn)功能

通過對上邊第一點的輸出

配置文件需要提供Logger、Appender、Layout 3個組件信息(通過配置文件來代替代碼)

分析

Logger logger = Logger.getLogger(Log4jTest.class);

進入到getLogger方法,會看到代碼

LogManager.getLogger(clazz.getName());

LogManager:是一個日志管理器

LogManager,里邊有很多常量,它們代表的就是不同形式(后綴名不同)的配置文件

最常使用的就是log4j.properties 這個屬性文件(語法簡單,使用方便)

問題:log4j.properties的加載時機

找到LogManager的static代碼塊

在static下遭到下列代碼

Loader.getResource("log4j.properties");

系統(tǒng)會去當前類路徑下找到log4j.properties這個文件進行加載

對于maven工程resource目錄就是當前類路徑下的

加載完畢后,配置文件是如何讀取呢?

OptionConverter.selectAndConfigure(url, configuratorClassName,LogManager.getLoggerRepository());

進去方法:

作為屬性文件進行加載: configurator = new PropertyConfigurator();

進入到這個PropertyConfigurator這個屬性類,看到很多常量,這些常量就是我們在屬性配置文件中的配置項

如下兩項是我們必須配置的

static final String ROOT_LOGGER_PREFIX = "log4j.rootLogger";

static final String APPENDER_PREFIX = "log4j.appender.";

通過這行代碼:

String prefix = APPENDER_PREFIX + appenderName;

我們需要自定義一個appendername 假設蛇我們?nèi)サ拿质莄onsole 就是控制臺輸出

(起名字需要見名之意,console那么我們在配置應該配置控制臺輸出)

log4j.appender.console

取值就是log4j中為我們提供的appender類

例如

log4j.appender.console = org.apache.log4j.ConsoleAppender

還可以指定輸出格式

通過代碼:

String layoutPrefix = prefix + ".layout";

配置:

log4j.appender.console.layout = org.apache.log4j.SimpleLayout

通過log4j.properties繼續(xù)在類中搜索

找到方法void configureRootCategory

在這個方法中找到執(zhí)行了parseCategory 方法

觀察這個方法:

執(zhí)行了代碼:StringTokenizer st = new StringTokenizer(value, ",");

表示要以逗號的方式分割字符串,證明了log4j.rootLogger的取值,其中可以有多個值,但是要以逗號進行分割

通過代碼:

String levelStr = st.nextToken();

表示切割后的第一個值是日志的級別

通過代碼:

while(st.hasMoreTokens())

表示接下2~n個都是可以通過循環(huán)來取得的,具體的內(nèi)容是:appenderName(日志輸出到哪里)

證明我們配置方式是:

log4j.rootLogger = 日志級別,appenderName1,appenderName2,...,appenderName n

表示我們可以同時在根節(jié)點上配置多個日志輸出的途徑

通過我們自己的配置文件就可以加載和這個代碼了

*/

// BasicConfigurator.configure();

Logger logger = Logger.getLogger(Log4jTest.class);

logger.fatal("fatal信息");

logger.error("error信息");

logger.warn("warn信息");

logger.info("info信息");

logger.debug("debug信息");

logger.trace("trace信息");

}

打開日志輸出的詳細信息

@Test

public void test03(){

/*

通過Logger中的開關

打開日志輸出的詳細信息

查看LogManager類中的方法:

getLoggerRepository()

找到代碼LogLog.debug(msg, ex);

Loglog會使用debug級別的輸出為我們展現(xiàn)日志輸出的詳細信息

Logger是記錄系統(tǒng)的日志,那么Loglog的使用來記錄Logger的日志

進入到Loglog.debug(msg, ex)方法中

通過代碼:if(debugEnabled && !quietMode) {

觀察到if判斷中的這兩個開關都是必須開啟才行

!quietMode 是已經(jīng)啟動的狀態(tài),不需要我們?nèi)ス?/p>

debugEnabled默認是關閉的

所以我們只需要設置debugEnabled為true就可以了

*/

LogLog.setInternalDebugging(true);

Logger logger = Logger.getLogger(Log4jTest.class);

logger.fatal("fatal信息");

logger.error("error信息");

logger.warn("warn信息");

logger.info("info信息");

logger.debug("debug信息");

logger.trace("trace信息");

}

關于log4j.properties 的 layout 的說明

log4j.appender.console.layout.conversionPattern = %r [%t] %p %c %x - %m%n

-X號: X信息輸出時左對齊; %p: 輸出日志信息優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL, %d: 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921 %r: 輸出自應用啟動到輸出該log信息耗費的毫秒數(shù) %c: 輸出日志信息所屬的類目,通常就是所在類的全名 %t: 輸出產(chǎn)生該日志事件的線程名 %l: 輸出日志事件的發(fā)生位置,相當于%C.%M(%F:%L)的組合,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main (TestLog4.Java:10) %x: 輸出和當前線程相關聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像Java servlets這樣的多客戶多線程的應用中。 %%: 輸出一個"%“字符 %F: 輸出日志消息產(chǎn)生時所在的文件名稱 %L: 輸出代碼中的行號 %m: 輸出代碼中指定的消息,產(chǎn)生的日志具體信息 %n: 輸出一個回車換行符,Windows平臺為”/r/n",Unix平臺為"/n"輸出日志信息換行 **可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。**如: 1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認的情況下右對齊。 2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,"-"號指定左對齊。 3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會將左邊多出的字符截掉,但小于30的話也不會有空格。 4)%20.30c:如果category的名稱小于20就補空格,并且右對齊,如果其名稱長于30字符,就從左邊較遠輸出的字符截掉。

@Test

public void test04() {

/*

關于log4j.properties 的 layout 的說明

其中PatternLayout 是日常使用最多的方式

查看源碼

setConversionPattern這個方式就是PatterLayout的核心方法

conversionPattern

在log4j.properties 這個文件中將layout設置為PatterLayout

主要配置的屬性是conversionPatter

[%p]%r %c %t %d{yyyy:MM:dd HH:mm:ss} %m %n

可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式

[%p]%r %c %t %d{yyyy:MM:dd HH:mm:ss} %m %n

[%-5p] 左對齊5個字符,不足5個空格補齊

[%5p] 右對齊5個字符,不足5個空格補齊

*/

Logger logger = Logger.getLogger(Log4jTest.class);

logger.fatal("fatal信息");

logger.error("error信息");

logger.warn("warn信息");

logger.info("info信息");

logger.debug("debug信息");

logger.trace("trace信息");

}

將日志輸出到文件中

# 第一個是日志輸出級別 2-n是appenderName(就是日志在哪里展示)

log4j.rootLogger = trace,file

# 配置appender 輸出方式 日志輸出到哪里,輸出到文件

log4j.appender.file = org.apache.log4j.FileAppender

# 表示輸出的格式

log4j.appender.file.layout = org.apache.log4j.PatternLayout

# 自定義layout輸出的內(nèi)容

log4j.appender.file.layout.conversionPattern = [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n

# 文件存儲的位置 第一個file是我們自己命名的appenderName 第二個file是我們用來指定文件位置的屬性

log4j.appender.file.file = E://test//log4j.log

# 配置輸出的字符編碼

log4j.appender.file.encoding = utf-8

@Test

public void test05() {

/*

將日志輸出到文件中

console是輸出控制臺的,將日志輸出到文件中,也可以做多方向的輸出

查看FileAppender的源碼

查看屬性信息

protected boolean fileAppend = true; 表示是否追加日志信息,true表示追加

protected int bufferSize = 8*1024; 緩沖區(qū)的大小 kb

繼續(xù)觀察找到 setFile 方法 設置文件的位置

通過ognl可以推斷出setFile這個方法操作的就是File

如果有輸出中文的需求怎么辦

觀察FileAppender的父類 WriterAppender

protected String encoding; 有一個這個屬性,就是來設置日志輸出的字符編碼

*/

Logger logger = Logger.getLogger(Log4jTest.class);

logger.fatal("fatal信息");

logger.error("error信息");

logger.warn("warn信息");

logger.info("info信息");

logger.debug("debug信息");

logger.trace("trace信息");

}

日志太大對其進行分割----按照文件大小

# 第一個是日志輸出級別 2-n是appenderName(就是日志在哪里展示)

log4j.rootLogger = trace,rollingFile

# 配置RollingFileAppender 輸出方式 日志輸出到哪里,輸出到文件

log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender

# 表示輸出的格式

log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout

# 自定義layout輸出的內(nèi)容

log4j.appender.rollingFile.layout.conversionPattern = [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n

# 文件存儲的位置 第一個file是我們自己命名的appenderName 第二個file是我們用來指定文件位置的屬性

log4j.appender.rollingFile.file = E://test//log4j.log

# 配置輸出的字符編碼

log4j.appender.rollingFile.encoding = utf-8

# 指定日志文件內(nèi)容大小 1兆b 超過就進行拆分

log4j.appender.rollingFile.maxFileSize = 1MB

# 指定日志拆分的數(shù)量

log4j.appender.rollingFile.maxBackupIndex = 5

@Test

public void test06() {

/*

將日志輸出到文件中

日志太多了,不方便管理怎么維護

FileAppender為我們提供了好用的子類來進一步對文件輸出進行處理

RollingFileAppender

DailyRollingFileAppender

1、RollingFileAppender

這個類表示按照文件的大小來進行拆分的方式進行操作

配置文件進行RollingFileAppender的相關配置

如何拆分,觀察RollingFileAppender的源碼

protected long maxFileSize = 10*1024*1024;表示拆分文件的大小,默認是10m

protected int maxBackupIndex = 1; 拆分文件的書名

# 指定日志文件內(nèi)容大小 1兆b 超過就進行拆分

log4j.appender.rollingFile.maxFileSize = 1MB

# 指定日志拆分的數(shù)量

log4j.appender.rollinFile.maxBackupIndex = 5

只要文件超過1MB,那么則會生成另外一個文件,文件的數(shù)量最多是5個

文件1 記錄日志 1MB

文件2 記錄日志 1MB

...

...

文件5 記錄日志 1MB

如果5個文件不夠怎么辦,作為日志管理來說,也不可能讓日志無休止的繼續(xù)增長下去

所以,覆蓋策略,按照時間來進行覆蓋,原則就是保留新的,覆蓋舊的

*/

Logger logger = Logger.getLogger(Log4jTest.class);

for (int i = 0; i < 10000; i++) {

logger.fatal(i + "fatal信息" );

logger.error(i + "error信息");

logger.warn(i + "warn信息");

logger.info(i + "info信息");

logger.debug(i + "debug信息");

logger.trace(i + "trace信息");

}

日志太大對其進行分割----按照時間大小

配置文件

# 第一個是日志輸出級別 2-n是appenderName(就是日志在哪里展示)

log4j.rootLogger = trace,dailyRollingFile

# 配置DailyRollingFileAppender 輸出方式 日志輸出到哪里,輸出到文件

log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender

# 表示輸出的格式

log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout

# 自定義layout輸出的內(nèi)容

log4j.appender.dailyRollingFile.layout.conversionPattern = [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n

# 文件存儲的位置 第一個file是我們自己命名的appenderName 第二個file是我們用來指定文件位置的屬性

log4j.appender.dailyRollingFile.file = E://test//log4j.log

# 配置輸出的字符編碼

log4j.appender.dailyRollingFile.encoding = utf-8

# 根據(jù)時間來進行拆分

# 設置DatePattern屬性為'.'yyyy-ww 這個是按照周來進行拆分日志

log4j.appender.dailyRollingFile.datePattern = '.'yyyy-MM-dd HH-mm-ss

柚子快報邀請碼778899分享:log4j學習

http://yzkb.51969.com/

相關文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19069373.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄