java打印日志的幾種方式總結(jié)
一、簡(jiǎn)單介紹五種
- 最簡(jiǎn)單的方式,就是system.println.out(error) ,這樣直接在控制臺(tái)打印消息了;
- Java.util.logging ; 在JDK 1.4 版本之后,提供了日志的API ,可以往文件中寫日志了;
- log4j , 最強(qiáng)大的記錄日志的方式。 可以通過(guò)配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等;
- commons-logging, 最綜合和常見(jiàn)的日志記錄方式, 經(jīng)常是和log4j 結(jié)合起來(lái)使用;
- logback是java的日志開源組件,是log4j創(chuàng)始人寫的,性能比log4j要好;
二、java.util.logging
1、簡(jiǎn)介
Java 中的 Logging API 讓 Java 應(yīng)用可以記錄不同級(jí)別的信息,Java 為此定時(shí)了8個(gè)級(jí)別,它們是分別SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST 以及 ALL.
它們按照優(yōu)先級(jí)降序排列,在應(yīng)用運(yùn)行的任何時(shí)間點(diǎn),日志級(jí)別可以被更改。
2、重要類說(shuō)明
- Logger 對(duì)外發(fā)布的日志記錄器,應(yīng)用系統(tǒng)可以通過(guò)該對(duì)象完成日志記錄的功能
- Level 日志的記錄級(jí)別
- LoggingMXBean 接口對(duì)象,對(duì)外發(fā)布的日志管理器
- LogRecord 日志信息描述對(duì)象
- LoggerManager 日志管理器
- Filter 日志過(guò)濾器,接口對(duì)象,在日志被 Handler 處理之前,起過(guò)濾作用
- Handler 日志處理器,接口對(duì)象,決定日志的輸出方式
- Formatter 日志格式化轉(zhuǎn)換器,接口對(duì)象,決定日志的輸出格式
3、Filter
- 作為一個(gè)接口, Filter:為所記錄的日志提供日志級(jí)別控制以外的細(xì)粒度控制。
4、Handler
- Handler負(fù)責(zé)從Logger中取出日志消息并將消息發(fā)送出去,比如發(fā)送到控制臺(tái)、文件、網(wǎng)絡(luò)上的其他日志服務(wù)或操作系統(tǒng)日志等。
- Handler也具有級(jí)別概念,用于判斷當(dāng)前Logger中的消息是否應(yīng)該被發(fā)送出去,可以使用定義好的各種日志級(jí)別(如Level.OFF表示關(guān)閉等)。
- 除了級(jí)別概念,一個(gè)Handler還可以具有自己的過(guò)濾器(Filter)、格式化器(Formatter)、錯(cuò)誤管理器(ErrorManager)以及編碼字符集等,這些屬性借助LogManager中的配置信息進(jìn)行設(shè)置。
- Handler是一個(gè)抽象類,需要根據(jù)實(shí)際情況創(chuàng)建真正使用的具體Handler(如ConsoleHandler、FileHandler等),實(shí)現(xiàn)各自的publish、flush以及close等方法。
Handler 實(shí)現(xiàn)類說(shuō)明
- MemoryHandler,將當(dāng)前日志信息寫入內(nèi)存緩沖區(qū)中同時(shí)丟棄緩存中以前的內(nèi)容。將內(nèi)存緩沖區(qū)中的信息轉(zhuǎn)發(fā)至另一個(gè)Handler
- StreamHandler所有基于I/O流的Handler的基類,將日志信息發(fā)送至給定的java.io.OutputStream中
- ConsoleHandler,將消息發(fā)送至System.err(而非System.out),默認(rèn)配置與其父類StreamHandler相同。
- FileHandler,將消息發(fā)送至單個(gè)一般文件或一個(gè)可回滾的文件集合??苫貪L文件集中的文件依據(jù)文件大小進(jìn)行回滾,久文件名稱通過(guò)當(dāng)前文件名附加編號(hào)0、1、2等方式依次進(jìn)行標(biāo)示。默認(rèn)情況下日志信息都存放在
- I/O緩沖中,但如果一條完整的日志信息會(huì)觸發(fā)清空緩沖的動(dòng)作。與其父類StramHandler不同的是,F(xiàn)ileHandler的默認(rèn)格式器是java.util.logging.XMLFormatter:
- SocketHandler,負(fù)責(zé)將日志信息發(fā)送至網(wǎng)絡(luò),默認(rèn)情況下也采用java.util.logging.XMLFormatter格式。
二、log4j
Log4j是Apache的一個(gè)開放源代碼項(xiàng)目,通過(guò)使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件、甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等;
我們也可以控制每一條日志的輸出格式;
通過(guò)定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過(guò)程。
最令人感興趣的就是,這些可以通過(guò)一個(gè)配置文件來(lái)靈活地進(jìn)行配置,而不需要修改應(yīng)用的代碼.
1、引入log4j
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
2、配置log4j.properties或者log4j.xml
log4j.rootLogger=debug,Console,File log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.Console.Threshold = DEBUG log4j.appender.File=org.apache.log4j.RollingFileAppender log4j.appender.File.File=logfile.log log4j.appender.File.MaxFileSize=512KB log4j.appender.File.MaxBackupIndex=3 log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.File.Threshold = DEBUG
這里指定了日志輸出的級(jí)別 debug.
Console, File指定日志輸出的目的地。 這兩個(gè)名字可以隨便取,比如 A或B都可以。 實(shí)際的配置是 org.apache.log4j.ConsoleAppender 和RollingFileAppender 用于指定是控制臺(tái)還是文件。 另外還指定了輸出的格式, 已經(jīng)產(chǎn)生的file 的規(guī)則。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration> <!-- 將日志信息輸出到控制臺(tái) --> <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"> <!-- 設(shè)置日志輸出的樣式 --> <layout class="org.apache.log4j.PatternLayout"> <!-- 設(shè)置日志輸出的格式 --> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> </layout> <!--過(guò)濾器設(shè)置輸出的級(jí)別--> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!-- 設(shè)置日志輸出的最小級(jí)別 --> <param name="levelMin" value="WARN" /> <!-- 設(shè)置日志輸出的最大級(jí)別 --> <param name="levelMax" value="ERROR" /> <!-- 設(shè)置日志輸出的xxx,默認(rèn)是false --> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <!-- 將日志信息輸出到文件,但是當(dāng)文件的大小達(dá)到某個(gè)閾值的時(shí)候,日志文件會(huì)自動(dòng)回滾 --> <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender"> <!-- 設(shè)置日志信息輸出文件全路徑名 --> <param name="File" value="D:/log4j/RollingFileAppender.log" /> <!-- 設(shè)置是否在重新啟動(dòng)服務(wù)時(shí),在原有日志的基礎(chǔ)添加新日志 --> <param name="Append" value="true" /> <!-- 設(shè)置保存?zhèn)浞莼貪L日志的最大個(gè)數(shù) --> <param name="MaxBackupIndex" value="10" /> <!-- 設(shè)置當(dāng)日志文件達(dá)到此閾值的時(shí)候自動(dòng)回滾,單位可以是KB,MB,GB,默認(rèn)單位是KB --> <param name="MaxFileSize" value="10KB" /> <!-- 設(shè)置日志輸出的樣式 --> <layout class="org.apache.log4j.PatternLayout"> <!-- 設(shè)置日志輸出的格式 --> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> </layout> </appender> <!-- 將日志信息輸出到文件,可以配置多久產(chǎn)生一個(gè)新的日志信息文件 --> <appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender"> <!-- 設(shè)置日志信息輸出文件全路徑名 --> <param name="File" value="D:/log4j/DailyRollingFileAppender.log" /> <!-- 設(shè)置日志每分鐘回滾一次,即產(chǎn)生一個(gè)新的日志文件 --> <param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" /> <!-- 設(shè)置日志輸出的樣式 --> <layout class="org.apache.log4j.PatternLayout"> <!-- 設(shè)置日志輸出的格式 --> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> </layout> </appender>
輸出方式appender一般有5種:
- org.apache.log4j.RollingFileAppender(滾動(dòng)文件,自動(dòng)記錄最新日志)
- org.apache.log4j.ConsoleAppender (控制臺(tái))
- org.apache.log4j.FileAppender (文件)
- org.apache.log4j.DailyRollingFileAppender (每天產(chǎn)生一個(gè)日志文件)
- org.apache.log4j.WriterAppender (將日志信息以流格式發(fā)送到任意指定的地方)
日記記錄的優(yōu)先級(jí)priority,優(yōu)先級(jí)由高到低分為 OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
Log4j建議只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG這五個(gè)級(jí)別。
log4j layout日志信息格式
- org.apache.log4j.HTMLLayout(以HTML表格形式布局),
- org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
- org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串),
- org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)
PatternLayout是我們以后推薦使用的,很靈活; 有個(gè)ConversionPattern屬性,靈活配置輸出屬性:
- %c 輸出所屬類的全名,可在修改為 %d{Num},Num類名輸出的維(如:“org.apache.elathen.ClassName”,%C{2}將輸出elathen.ClassName)
- %d輸出日志時(shí)間其格式為 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
- %l 輸出日志事件發(fā)生位置,包括類目名、發(fā)生線程,在代碼中的行數(shù)
- %n 換行符
- %m輸出代碼指定信息,如info(“message”),輸出message
- %p輸出優(yōu)先級(jí),即 FATAL ,ERROR 等
- %r 輸出從啟動(dòng)到顯示該log信息所耗費(fèi)的毫秒數(shù)
- %t 輸出產(chǎn)生該日志事件的線程名
//使用方式 package com; import org.apache.log4j.Logger; public class Test { private static Logger logger = Logger.getLogger(Test.class); /** * @param args */ public static void main(String[] args) { // System.out.println("This is println message."); // 記錄debug級(jí)別的信息 logger.debug("This is debug message."); // 記錄info級(jí)別的信息 logger.info("This is info message."); // 記錄error級(jí)別的信息 logger.error("This is error message."); } }
三、 commons-logging
1、簡(jiǎn)介
Commons-logging 也是Apache 提供的日志jar檔。
Apache Commons Logging(JCL) 提供了一個(gè)簡(jiǎn)單的日志抽象,允許開發(fā)人員使用特定的日志實(shí)現(xiàn)。
JCL可以使用其他的日志實(shí)現(xiàn),包括Log4J、Avalon LogKit(Avalon的日志框架)、JDK logging(JUL)。
2、配置
① 在classpath下尋找配置文件commons-logging.properties,并使用文件中org.apache.commons.logging.Log屬性定義的Log實(shí)現(xiàn)類;
② 如果找不到commons-logging.properties文件,查找系統(tǒng)環(huán)境變量org.apache.commons.logging.Log對(duì)應(yīng)的Log實(shí)現(xiàn)類;
③ 否則,查看classpath中是否有Log4j的包,如果發(fā)現(xiàn),則自動(dòng)使用Log4j作為日志實(shí)現(xiàn)類;
④ 否則,使用JDK自身的日志實(shí)現(xiàn)類(JDK1.4以后才有日志實(shí)現(xiàn)類);
⑤ 否則,使用commons-logging自己提供的一個(gè)簡(jiǎn)單的日志實(shí)現(xiàn)類SimpleLog;
3、依賴
<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
4、簡(jiǎn)單實(shí)現(xiàn)
新建commons-logging.properties文件,放置在classpath根路徑下
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
代碼中使用
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class CommonsTest { private final static Log logger = LogFactory.getLog(CommonsTest.class); public static void main(String[] args) { logger.debug("DEBUG ..."); logger.info("INFO ..."); logger.error("ERROR ..."); } }
5、Commons-logging的解耦功能
commons-logging最核心有用的功能是解耦,它的SimpleLog實(shí)現(xiàn)性能比不上其他實(shí)現(xiàn),如log4j等。
①添加依賴
<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
②修改配置文件:修改commons-logging.properties文件:顯示地指定log4j
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
并添加log4j.properties的配置文件:
log4j.rootLogger=DEBUG,console # 輸出到控制臺(tái) log4j.appender.console=org.apache.log4j.ConsoleAppender # 設(shè)置輸出樣式 log4j.appender.console.layout=org.apache.log4j.PatternLayout # 日志輸出信息格式為 log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n
③代碼中使用
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class CommonsTest { private final static Log logger = LogFactory.getLog(CommonsTest.class); public static void main(String[] args) { logger.debug("DEBUG ..."); logger.info("INFO ..."); logger.error("ERROR ..."); } }
四、logback
1、介紹
Logback是由log4j創(chuàng)始人設(shè)計(jì)的另一個(gè)開源日志組件,官方網(wǎng)站:http://logback.qos.ch。它當(dāng)前分為下面下個(gè)模塊:
- logback-core:其它兩個(gè)模塊的基礎(chǔ)模塊
- logback-classic:它是log4j的一個(gè)改良版本,同時(shí)它完整實(shí)現(xiàn)了slf4j API使你可以很方便地更換成其它日志系統(tǒng)如log4j或JDK14 Logging
- logback-access:訪問(wèn)模塊與Servlet容器集成提供通過(guò)Http來(lái)訪問(wèn)日志的功能
2、logback取代log4j的理由
更快的實(shí)現(xiàn):Logback的內(nèi)核重寫了,在一些關(guān)鍵執(zhí)行路徑上性能提升10倍以上。而且logback不僅性能提升了,初始化內(nèi)存加載也更小了。
Logback-classic非常自然實(shí)現(xiàn)了SLF4j:Logback-classic實(shí)現(xiàn)了SLF4j。在使用SLF4j中,你都感覺(jué)不到logback-classic。而且因?yàn)閘ogback-classic非常自然地實(shí)現(xiàn)了slf4j, 所 以切換到log4j或者其他,非常容易,只需要提供成另一個(gè)jar包就OK,根本不需要去動(dòng)那些通過(guò)SLF4JAPI實(shí)現(xiàn)的代碼。
自動(dòng)重新加載配置文件,當(dāng)配置文件修改了,Logback-classic能自動(dòng)重新加載配置文件。掃描過(guò)程快且安全,它并不需要另外創(chuàng)建一個(gè)掃描線程。這個(gè)技術(shù)充分保證了應(yīng)用程序能跑得很歡在JEE環(huán)境里面。
3、配置
Logger、appender及l(fā)ayout
Logger作為日志的記錄器,把它關(guān)聯(lián)到應(yīng)用的對(duì)應(yīng)的context上后,主要用于存放日志對(duì)象,也可以定義日志類型、級(jí)別。
Appender主要用于指定日志輸出的目的地,目的地可以是控制臺(tái)、文件、遠(yuǎn)程套接字服務(wù)器、 MySQL、PostreSQL、
Oracle和其他數(shù)據(jù)庫(kù)、 JMS和遠(yuǎn)程UNIX Syslog守護(hù)進(jìn)程等。
Layout 負(fù)責(zé)把事件轉(zhuǎn)換成字符串,格式化的日志信息的輸出。
logger context
各個(gè)logger 都被關(guān)聯(lián)到一個(gè) LoggerContext,LoggerContext負(fù)責(zé)制造logger,也負(fù)責(zé)以樹結(jié)構(gòu)排列各logger。
其他所有l(wèi)ogger也通過(guò)org.slf4j.LoggerFactory 類的靜態(tài)方法getLogger取得。
getLogger方法以 logger名稱為參數(shù)。用同一名字調(diào)用LoggerFactory.getLogger 方法所得到的永遠(yuǎn)都是同一個(gè)logger對(duì)象的引用。
有效級(jí)別及級(jí)別的繼承
Logger 可以被分配級(jí)別。級(jí)別包括:TRACE、DEBUG、INFO、WARN 和ERROR,定義于ch.qos.logback.classic.Level類。
如果 logger沒(méi)有被分配級(jí)別,那么它將從有被分配級(jí)別的最近的祖先那里繼承級(jí)別。root logger 默認(rèn)級(jí)別是 DEBUG。
打印方法與基本的選擇規(guī)則
打印方法決定記錄請(qǐng)求的級(jí)別。例如,如果 L 是一個(gè) logger 實(shí)例,那么,語(yǔ)句 L.info("…")是一條級(jí)別為 INFO的記錄語(yǔ)句。記錄請(qǐng)求的級(jí)別在高于或等于其 logger 的有效級(jí)別時(shí)被稱為被啟用,否則,稱為被禁用。
記錄請(qǐng)求級(jí)別為 p,其 logger的有效級(jí)別為 q,只有則當(dāng) p>=q時(shí),該請(qǐng)求才會(huì)被執(zhí)行。
該規(guī)則是 logback 的核心。級(jí)別排序?yàn)椋?TRACE < DEBUG < INFO < WARN < ERROR
4、配置詳解
(1)根節(jié)點(diǎn)configuration包含下面三個(gè)屬性:
- scan: 當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為true。
- scanPeriod: 設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,如果沒(méi)有給出時(shí)間單位,默認(rèn)單位是毫秒。當(dāng)scan為true時(shí),此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘。
- debug: 當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為false。
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--其他配置省略--> </configuration>
(2)子節(jié)點(diǎn)contextName:用來(lái)設(shè)計(jì)上下文名稱,每個(gè)logger都關(guān)聯(lián)到logger上下文,默認(rèn)上下文名稱為default。但可以使用設(shè)置成其他名字,用于區(qū)分不同應(yīng)用程序的記錄。一旦設(shè)置,不能修改。
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>myAppName</contextName> <!--其他配置省略--> </configuration>
(3)子節(jié)點(diǎn)property :用來(lái)定義變量值,它有兩個(gè)屬性name和value,通過(guò)定義的值會(huì)被插入到logger上下文中,可以使“${}”來(lái)使用變量。
- name: 變量的名稱
- value: 變量的值
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <property name="APP_Name" value="myAppName" /> <contextName>${APP_Name}</contextName> <!--其他配置省略--> </configuration>
(4)子節(jié)點(diǎn)timestamp:獲取時(shí)間戳字符串,他有兩個(gè)屬性key和datePattern
- key: 標(biāo)識(shí)此timestamp 的名字;
- datePattern: 設(shè)置將當(dāng)前時(shí)間(解析配置文件的時(shí)間)轉(zhuǎn)換為字符串的模式,遵循java.txt.SimpleDateFormat的格式。
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> <contextName>${bySecond}</contextName> <!-- 其他配置省略--> </configuration>
(5)子節(jié)點(diǎn)appender:負(fù)責(zé)寫日志的組件,它有兩個(gè)必要屬性name和class。name指定appender名稱,class指定appender的全限定名
ConsoleAppender 把日志輸出到控制臺(tái),有以下子節(jié)點(diǎn):
- encoder:對(duì)日志進(jìn)行格式化。(具體參數(shù)稍后講解 )
- target:字符串System.out(默認(rèn))或者System.err(區(qū)別不多說(shuō)了)
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> </encoder> </appender> <!-- 表示把 >= DEBUG級(jí)別的日志都輸出到控制臺(tái) --> <root level="DEBUG"> <appender-ref ref="STDOUT" /> </root> </configuration>
(5.1)RollingFileAppender:滾動(dòng)記錄文件,先將日志記錄到指定文件,當(dāng)符合某個(gè)條件時(shí),將日志記錄到其他文件。有以下子節(jié)點(diǎn):
- file:被寫入的文件名,可以是相對(duì)目錄,也可以是絕對(duì)目錄,如果上級(jí)目錄不存在會(huì)自動(dòng)創(chuàng)建,沒(méi)有默認(rèn)值;
- append:如果是 true,日志被追加到文件結(jié)尾,如果是 false,清空現(xiàn)存文件,默認(rèn)是true;
- rollingPolicy:當(dāng)發(fā)生滾動(dòng)時(shí),決定RollingFileAppender的行為,涉及文件移動(dòng)和重命名;
- -fileNamePattern:必要節(jié)點(diǎn),包含文件名及“%d”轉(zhuǎn)換符,“%d”可以包含一個(gè)java.text.SimpleDateFormat指定的時(shí)間格式,如:%d{yyyy-MM};
- maxHistory:可選節(jié)點(diǎn),控制保留的歸檔文件的最大數(shù)量,超出數(shù)量就刪除舊文件。假設(shè)設(shè)置每個(gè)月滾動(dòng),且maxHistory是6,則只保存最近6個(gè)月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些為了歸檔而創(chuàng)建的目錄也會(huì)被刪除;
- maxFileSize:這是活動(dòng)文件的大小,默認(rèn)值是10MB;
- prudent:當(dāng)為true時(shí),不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有兩個(gè)限制,1不支持也不允許文件壓縮,2不能設(shè)置file屬性,必須留空;
- triggeringPolicy: 告知 RollingFileAppender 合適激活滾動(dòng);
<!--表示每天生成一個(gè)日志文件,保存30天的日志文件--> <configuration> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="FILE" /> </root> </configuration>
(6)子節(jié)點(diǎn)loger:用來(lái)設(shè)置某一個(gè)包或具體的某一個(gè)類的日志打印級(jí)別、以及指定appender。loger僅有一個(gè)name屬性,一個(gè)可選的level和一個(gè)可選的addtivity屬性。可以包含零個(gè)或多個(gè)appender-ref元素,標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)loger;
- name: 用來(lái)指定受此loger約束的某一個(gè)包或者具體的某一個(gè)類。
- level: 用來(lái)設(shè)置打印級(jí)別,大小寫無(wú)關(guān):TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,還有一個(gè)特俗值INHERITED或者同義詞NULL,代表強(qiáng)制執(zhí)行上級(jí)的級(jí)別。 如果未設(shè)置此屬性,那么當(dāng)前l(fā)oger將會(huì)繼承上級(jí)的級(jí)別。
- addtivity: 是否向上級(jí)loger傳遞打印信息。默認(rèn)是true。同loger一樣,可以包含零個(gè)或多個(gè)appender-ref元素,標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)loger。
(7)常用logger配置
<!-- show parameters for hibernate sql 專為 Hibernate 定制 --> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> <!--myibatis log configure--> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java.net.ConnectException: Connection refused問(wèn)題解決辦法
這篇文章主要介紹了java.net.ConnectException: Connection refused問(wèn)題解決辦法的相關(guān)資料,需要的朋友可以參考下2016-12-12JVM自定義類加載器在代碼擴(kuò)展性實(shí)踐分享
這篇文章主要介紹了JVM自定義類加載器在代碼擴(kuò)展性實(shí)踐分享,一個(gè)類型從被加載到虛擬機(jī)內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個(gè)生命周期將會(huì)經(jīng)歷加載、驗(yàn)證、準(zhǔn)備、解析、初始化 、使用和卸載七個(gè)階段,其中驗(yàn)證、準(zhǔn)備、解析三個(gè)部分統(tǒng)稱為連接2022-06-06jpa異常No entity found for query問(wèn)題解決
這篇文章主要為大家介紹了jpa異常之No entity found for query的異常問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03關(guān)于Intellij IDEA中的Version Control問(wèn)題
這篇文章主要介紹了Intellij IDEA中的Version Control問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11SpringCloud-Alibaba-Sentinel服務(wù)降級(jí),熱點(diǎn)限流,服務(wù)熔斷
這篇文章主要介紹了SpringCloud-Alibaba-Sentinel服務(wù)降級(jí),熱點(diǎn)限流,服務(wù)熔斷,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Java 使用maven實(shí)現(xiàn)Jsoup簡(jiǎn)單爬蟲案例詳解
這篇文章主要介紹了Java 使用maven實(shí)現(xiàn)Jsoup簡(jiǎn)單爬蟲案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09解決SpringCloud Config結(jié)合github無(wú)法讀取配置的問(wèn)題
這篇文章主要介紹了解決SpringCloud Config結(jié)合github無(wú)法讀取配置的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02