柚子快報激活碼778899分享:Log4j
柚子快報激活碼778899分享:Log4j
介紹
Logj4 是 Apache 下的一款開源的日志框架,通過在項目中使用 Log4j ,我們可以控制日志信息輸出到控制臺、文件、甚至是數(shù)據(jù)庫。我們可以控制每一條日志的輸出格式,通過定義日志輸出級別、可以更令過的控制日志輸出過程。方便項目測試。
官網(wǎng)地址:Apache log4jhttp://logging.apache.org/log4j/1.2/
Hello Wrold
如果沒有慣用的 Hello wrold 實例,任何介紹都是不完整的。
首選創(chuàng)建 Maven 工程。 添加 Log4j 依賴。
添加配置文件 log4j.properties。 log4j.rootLogger = trace,console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.SimpleLayout 創(chuàng)建測試類進(jìn)行測試。 import org.apache.log4j.Logger;
public class AppTest {
public static void main(String[] args){
Logger logger = Logger.getLogger(AppTest.class);
logger.info("Hello World!");
}
} 控制臺輸出結(jié)果:
INFO - Hello World!
進(jìn)程已結(jié)束,退出代碼0
進(jìn)一步說明,舉很多栗子
在舉例子之前,先說一下日志級別,Log4j 有六個日志級別,它們從高到低為:
off:關(guān)閉所有日志。 fatal: 嚴(yán)重錯誤,一般會造成系統(tǒng)崩潰和終止運行。 error:錯誤信息,但不會影響系統(tǒng)運行。 warn:警告信息,可能會發(fā)生問題。 info:程序運行信息,數(shù)據(jù)庫的連接、網(wǎng)絡(luò)、IO操作等。 debug:調(diào)試信息,一般在開發(fā)階段使用,記錄程序的變量、參數(shù)等。 trace:追蹤信息,記錄程序的所有流程信息。 all:所有日志。
將日志內(nèi)容打印到控制臺
# 1. 創(chuàng)建日志記錄器 指定了輸出級別為 info,和 一個名為 `myConsole` 的輸出目標(biāo),這個名字可以是任意的;
log4j.rootLogger = info,myConsole
#2. 定義了一個名為 `myConsole` 的 輸出目標(biāo),值為`org.apache.log4j.ConsoleAppender` 表示輸出到控制臺;
log4j.appender.myConsole = org.apache.log4j.ConsoleAppender
#3. 定義了 一個名為 `myConsole` 的輸出目標(biāo)的輸出格式,值為 `org.apache.log4j.SimpleLayout` 表示 簡單的日志輸出格式;
log4j.appender.myConsole.layout = org.apache.log4j.SimpleLayout
輸出結(jié)果: ?
INFO - Hello World!
進(jìn)程已結(jié)束,退出代碼0
將日志內(nèi)容輸出到文件
?
# 1. 創(chuàng)建日志記錄器 指定了輸出級別為 info,和 一個名為 `myFile` 的輸出目標(biāo),這個名字可以是任意的;
log4j.rootLogger = info,myFile
#2. 定義了一個名為 `myFile` 的 輸出目標(biāo),值為`org.apache.log4j.FileAppender` 表示輸出到文件;
log4j.appender.myFile = org.apache.log4j.FileAppender
#2. 定義了一個名為 `myFile` 的 輸出目標(biāo),定義文件的輸出位置
log4j.appender.myFile.file = log/myLog.txt
#3. 定義了 一個名為 `myFile` 的輸出目標(biāo)的輸出格式,值為 `org.apache.log4j.SimpleLayout` 表示 簡單的日志輸出格式;
log4j.appender.myFile.layout = org.apache.log4j.SimpleLayout
輸出結(jié)果: ?
進(jìn)程已結(jié)束,退出代碼0
會在根路徑下的 log 文件夾生成一個名為 myLog.txt 的文件。
每次允許這個程序,都會將日志信息 追加 到文件中。
?
將日志內(nèi)容打印到控制臺并輸出到文件
# 1. 創(chuàng)建日志記錄器 指定了輸出級別為 info,和 一個名為 `myConsole` 和 `myFile` 的輸出目標(biāo)
log4j.rootLogger = info,myConsole,myFile
#2. 定義了一個名為 `myConsole` 的 輸出目標(biāo),值為`org.apache.log4j.ConsoleAppender` 表示輸出到控制臺;
log4j.appender.myConsole = org.apache.log4j.ConsoleAppender
#3. 定義了 一個名為 `myConsole` 的輸出目標(biāo)的輸出格式,值為 `org.apache.log4j.SimpleLayout` 表示 簡單的日志輸出格式;
log4j.appender.myConsole.layout = org.apache.log4j.SimpleLayout
#4. 定義了一個名為 `myFile` 的 輸出目標(biāo),值為`org.apache.log4j.FileAppender` 表示輸出到文件;
log4j.appender.myFile = org.apache.log4j.FileAppender
#5. 定義了一個名為 `myFile` 的 輸出目標(biāo),定義文件的輸出位置
log4j.appender.myFile.file = log/myLog.txt
#6. 定義了 一個名為 `myFile` 的輸出目標(biāo)的輸出格式,值為 `org.apache.log4j.SimpleLayout` 表示 簡單的日志輸出格式;
log4j.appender.myFile.layout = org.apache.log4j.SimpleLayout
格式化輸出信息
以輸出到控制臺為例,格式化輸出信息,其他輸出方式可舉一反三。
注意:將 SimpleLayout 修改為 PatternLayout。
SimpleLayout :簡單的日志輸出格式化; PatternLayout:最強大的格式化期,可以根據(jù)自定義格式輸出日志,如果沒有指定轉(zhuǎn)換格式, 就是用默認(rèn)的轉(zhuǎn)換格式;
# 1. 創(chuàng)建日志記錄器 指定了輸出級別為 info,和 一個名為 `myConsole` 的輸出目標(biāo),這個名字可以是任意的;
log4j.rootLogger = info,myConsole
#2. 定義了一個名為 `myConsole` 的 輸出目標(biāo),值為`org.apache.log4j.ConsoleAppender` 表示輸出到控制臺;
log4j.appender.myConsole = org.apache.log4j.ConsoleAppender
#3. 定義了 一個名為 `myConsole` 的輸出目標(biāo)的輸出格式,值為 `org.apache.log4j.SimpleLayout` 表示 簡單的日志輸出格式;
log4j.appender.myConsole.layout = org.apache.log4j.PatternLayout
#定義輸出格式
log4j.appender.myConsole.layout.ConversionPattern = 當(dāng)前時間:%-d{yyyy-MM-dd HH:mm:ss} 線程名:%t 日志級別:%p 日志信息:%m%n
輸出結(jié)果:
當(dāng)前時間:2024-05-21 09:06:39 線程名:main 日志級別:INFO 日志信息:Hello World!
進(jìn)程已結(jié)束,退出代碼0
當(dāng)然,該有更多格式化輸出所用到的占位符,如下:
占位符作用%m輸出代碼中指定的日志信息%p輸出優(yōu)先級,及 DEBUG、INFO 等%n換行符(Windows平臺的換行符為 "\n",Unix 平臺為 "\n")%r輸出自應(yīng)用啟動到輸出該 log 信息耗費的毫秒數(shù)%c輸出打印語句所屬的類的全名%t輸出產(chǎn)生該日志的線程全名%d輸出服務(wù)器當(dāng)前時間,默認(rèn)為 ISO8601,也可以指定格式,如:%d{yyyy年MM月dd日 HH:mm:ss}%l輸出日志時間發(fā)生的位置,包括類名、線程、及在代碼中的行數(shù)。如: Test.main(Test.java:10)%F輸出日志消息產(chǎn)生時所在的文件名稱%L輸出代碼中的行號%%輸出一個 "%" 字符%5c輸出category名稱,最小寬度是5,category<5,默認(rèn)的情況下右對齊%-5c輸出category名稱,最小寬度是5,category<5,"-"號指定左對齊,會有空格%.5c輸出category名稱,最大寬度是5,category>5,就會將左邊多出的字符截掉,<5不 會有空格%20.30.c%20.30c category名稱<20補空格,并且右對齊,>30字符,就從左邊交遠(yuǎn)銷出的字符截掉
指定輸出的編碼
#指定日志的文件編碼
log4j.appender.[日志記錄器名:如 myFile].encoding=UTF-8
?
每隔一天生成心的日志文件
# 1. 創(chuàng)建日志記錄器 指定了輸出級別為 info,和 一個名為 `myFile` 的輸出目標(biāo),這個名字可以是任意的;
log4j.rootLogger = info,myFile
#2. 定義了一個名為 `myFile` 的 輸出目標(biāo),值為`org.apache.log4j.FileAppender` 表示輸出到文件;
log4j.appender.myFile = org.apache.log4j.FileAppender
#2. 定義了一個名為 `myFile` 的 輸出目標(biāo),定義文件的輸出位置
log4j.appender.myFile.file = log/myLog.txt
#3. 定義了 一個名為 `myFile` 的輸出目標(biāo)的輸出格式,值為 `org.apache.log4j.DatePattern ` 表示 表示按時間劃分文件;
log4j.appender.myFile.layout = org.apache.log4j.DatePattern
#設(shè)置劃分的時間(按天,按分鐘,按月)
log4j.appender.myFile.DatePattern = '.'yyyy-MM-dd
log4j.appender.myFile.DatePattern還可以指定為:
每小時滾動:'.'yyyy-MM-dd-HH
每分鐘滾動:'.'yyyy-MM-dd-HH-mm
每個月滾動:'.'yyyy-MM
按文件大小生成新文件
# 1. 創(chuàng)建日志記錄器 指定了輸出級別為 info,和 一個名為 `myFile` 的輸出目標(biāo),這個名字可以是任意的;
log4j.rootLogger = info,myFile
#2. 定義了一個名為 `myFile` 的 輸出目標(biāo),值為`org.apache.log4j.FileAppender` 表示輸出到文件;
log4j.appender.myFile = org.apache.log4j.FileAppender
#2. 定義了一個名為 `myFile` 的 輸出目標(biāo),定義文件的輸出位置
log4j.appender.myFile.file = log/myLog.txt
#3. 定義了 一個名為 `myFile` 的輸出目標(biāo)的輸出格式,值為 `org.apache.log4j.RollingFileAppender ` 表示 表示按文件大小劃分文件;
log4j.appender.myFile.layout = org.apache.log4j.RollingFileAppender
# 設(shè)置文件最大容量
log4j.appender.myFile.MaxFileSize = 10MB
#設(shè)置最大保存的文件數(shù)量,當(dāng)大于5個文件時,最早的文件將被覆蓋掉
log4j.appender.myFile.MaxBackupIndex = 5
將日志文件保存到數(shù)據(jù)庫
既然用到了數(shù)據(jù)庫,肯定需要先引入 MySQL依賴;
同樣也要準(zhǔn)別一個相對應(yīng)的數(shù)據(jù)庫,數(shù)據(jù)庫的字段該怎么寫,它就是,你想要的日志輸出信息,比如你想要一個,當(dāng)前時間,你就可以創(chuàng)建一個當(dāng)前時間的字段,以此類推....
例子:
CREATE TABLE `log` (
`log_id` int(11) NOT NULL AUTO_INCREMENT,
`project_name` varchar(255) DEFAULT NULL COMMENT '目項名',
`create_date` varchar(255) DEFAULT NULL COMMENT '創(chuàng)建時間',
`level` varchar(255) DEFAULT NULL COMMENT '優(yōu)先級',
`category` varchar(255) DEFAULT NULL COMMENT '所在類的全名',
`file_name` varchar(255) DEFAULT NULL COMMENT '輸出日志消息產(chǎn)生時所在的文件名稱 ',
`thread_name` varchar(255) DEFAULT NULL COMMENT '日志事件的線程名',
`line` varchar(255) DEFAULT NULL COMMENT '號行',
`all_category` varchar(255) DEFAULT NULL COMMENT '日志事件的發(fā)生位置',
`message` varchar(4000) DEFAULT NULL COMMENT '輸出代碼中指定的消息',
PRIMARY KEY (`log_id`)
);
#2. 定義了一個名為 `logDB` 的 輸出目標(biāo),值為`org.apache.log4j.JDBCAppender` 表示輸出到數(shù)據(jù)庫;
log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
#數(shù)據(jù)庫驅(qū)動
log4j.appender.logDB.Driver=com.mysql.jdbc.Driver
#數(shù)據(jù)庫地址
log4j.appender.logDB.URL=jdbc:mysql://localhost:3306/test
#用戶名
log4j.appender.logDB.User=root
#密碼
log4j.appender.logDB.Password=root
#在這里輸出,就是 log4j.appender.logDB.Sql 指定了一條添加語句,里面的值通過格式化字符串的占位符給定值。我怎么感覺這個方式會被SQL注入呢???
log4j.appender.logDB.Sql=INSERT INTO
log(project_name,create_date,level,category,file_name,thread_name,line,all_categ
ory,message) values('itcast','%d{yyyy-MM-dd HH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')
?
柚子快報激活碼778899分享:Log4j
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。