国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

log4j日志框架的使用

這篇具有很好參考價值的文章主要介紹了log4j日志框架的使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

依賴

 <dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
</dependency>

配置項樣列

log4j.rootLogger=DEBUG, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=./log4j/test.log
log4j.appender.logfile.MaxFileSize=512KB
log4j.appender.logfile.MaxBackupIndex=5
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

配置文件詳解

log4j的配置文件可以理解成有2部分 1根日志記錄器? 2 各appender(輸出源)配置

①配置根Logger,其語法為: 
log4j.rootLogger = [level],appenderName,appenderName2,... 
level是日志記錄的優(yōu)先級,分為OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL 
Log4j建議只使用四個級別,優(yōu)先級從低到高分別是DEBUG,INFO,WARN,ERROR 
通過在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開關 
比如在這里定義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來 
appenderName就是指定日志信息輸出到哪個地方??赏瑫r指定多個輸出目的 


②配置日志信息輸出目的地Appender,其語法為: 
 
log4j.appender.appenderName = fully.qualified.name.of.appender.class 
log4j.appender.appenderName.optionN = valueN 
 
Log4j提供的appender有以下幾種: 
1)org.apache.log4j.ConsoleAppender(輸出到控制臺) 
2)org.apache.log4j.FileAppender(輸出到文件) 
3)org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件) 
4)org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件) 
5)org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方) 
 
1)ConsoleAppender選項屬性 
 -Threshold = DEBUG:指定日志消息的輸出最低層次 
 -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 
 -Target = System.err:默認值System.out,輸出到控制臺(err為紅色,out為黑色) 
 
2)FileAppender選項屬性 
 -Threshold = INFO:指定日志消息的輸出最低層次 
 -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 
 -File = C:\log4j.log:指定消息輸出到C:\log4j.log文件 
 -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容 
 -Encoding = UTF-8:可以指定文件編碼格式 
 
3)DailyRollingFileAppender選項屬性 
 -Threshold = WARN:指定日志消息的輸出最低層次 
 -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 
 -File = C:\log4j.log:指定消息輸出到C:\log4j.log文件 
 -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容 
 -DatePattern='.'yyyy-ww:每周滾動一次文件,即每周產生一個新的文件。還可以按用以下參數: 
              '.'yyyy-MM:每月 
              '.'yyyy-ww:每周 
              '.'yyyy-MM-dd:每天 
              '.'yyyy-MM-dd-a:每天兩次 
              '.'yyyy-MM-dd-HH:每小時 
              '.'yyyy-MM-dd-HH-mm:每分鐘 
 -Encoding = UTF-8:可以指定文件編碼格式 
 
4)RollingFileAppender選項屬性 
 -Threshold = ERROR:指定日志消息的輸出最低層次 
 -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 
 -File = C:/log4j.log (指定消息輸出到C:/log4j.log文件,一般在實際項目中使用相對路徑較多./log4j/test.log) 
 -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容 
 -MaxFileSize = 100KB:后綴可以是KB,MB,GB.在日志文件到達該大小時,將會自動滾動.如:log4j.log.1 
 -MaxBackupIndex = 2:指定可以產生的滾動文件的最大數 
 -Encoding = UTF-8:可以指定文件編碼格式 


③配置日志信息的格式(布局),其語法為: 
 
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class 
log4j.appender.appenderName.layout.optionN = valueN 
 
Log4j提供的layout有以下幾種: 
5)org.apache.log4j.HTMLLayout(以HTML表格形式布局) 
6)org.apache.log4j.PatternLayout(可以靈活地指定布局模式) 
7)org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串) 
8)org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息) 
9)org.apache.log4j.xml.XMLLayout(以XML形式布局) 
 
5)HTMLLayout選項屬性 
 -LocationInfo = TRUE:默認值false,輸出java文件名稱和行號 
 -Title=Struts Log Message:默認值 Log4J Log Messages 
 
6)PatternLayout選項屬性 
 -ConversionPattern = %m%n:格式化指定的消息(參數意思下面有) 
 
9)XMLLayout選項屬性 
 -LocationInfo = TRUE:默認值false,輸出java文件名稱和行號 
 
Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,打印參數如下: 
 %m 輸出代碼中指定的消息 
 %p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,FATAL 
 %r 輸出自應用啟動到輸出該log信息耗費的毫秒數 
 %c 輸出所屬的類目,通常就是所在類的全名 
 %t 輸出產生該日志事件的線程名 
 %n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n” 
 %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式 
    如:%d{yyyy年MM月dd日 HH:mm:ss,SSS},輸出類似:2012年01月05日 22:10:28,921 
 %l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數 
    如:Testlog.main(TestLog.java:10) 
 %F 輸出日志消息產生時所在的文件名稱 
 %L 輸出代碼中的行號 
 %x 輸出和當前線程相關聯的NDC(嵌套診斷環(huán)境),像java servlets多客戶多線程的應用中 
 %% 輸出一個"%"字符 
 
 可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如: 
  %5c: 輸出category名稱,最小寬度是5,category<5,默認的情況下右對齊 
  %-5c:輸出category名稱,最小寬度是5,category<5,"-"號指定左對齊,會有空格 
  %.5c:輸出category名稱,最大寬度是5,category>5,就會將左邊多出的字符截掉,<5不會有空格 
  %20.30c:category名稱<20補空格,并且右對齊,>30字符,就從左邊交遠銷出的字符截掉 


④指定特定包的輸出特定的級別 
log4j.logger.org.springframework=DEBUG 
 
 
OFF,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB,ALL 
log4j.rootLogger =ALL,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB 
 
輸出到控制臺 
log4j.appender.systemOut = org.apache.log4j.ConsoleAppender 
log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout 
log4j.appender.systemOut.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
log4j.appender.systemOut.Threshold = DEBUG 
log4j.appender.systemOut.ImmediateFlush = TRUE 
log4j.appender.systemOut.Target = System.out 
 
輸出到文件 
log4j.appender.logFile = org.apache.log4j.FileAppender 
log4j.appender.logFile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
log4j.appender.logFile.Threshold = DEBUG 
log4j.appender.logFile.ImmediateFlush = TRUE 
log4j.appender.logFile.Append = TRUE 
log4j.appender.logFile.File = ../Struts2/WebRoot/log/File/log4j_Struts.log 
log4j.appender.logFile.Encoding = UTF-8 
 
按DatePattern輸出到文件 
log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logDailyFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
log4j.appender.logDailyFile.Threshold = DEBUG 
log4j.appender.logDailyFile.ImmediateFlush = TRUE 
log4j.appender.logDailyFile.Append = TRUE 
log4j.appender.logDailyFile.File = ../Struts2/WebRoot/log/DailyFile/log4j_Struts 
log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm'.log' 
log4j.appender.logDailyFile.Encoding = UTF-8 
 
設定文件大小輸出到文件 
log4j.appender.logRollingFile = org.apache.log4j.RollingFileAppender 
log4j.appender.logRollingFile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logRollingFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
log4j.appender.logRollingFile.Threshold = DEBUG 
log4j.appender.logRollingFile.ImmediateFlush = TRUE 
log4j.appender.logRollingFile.Append = TRUE 
log4j.appender.logRollingFile.File = ../Struts2/WebRoot/log/RollingFile/log4j_Struts.log 
log4j.appender.logRollingFile.MaxFileSize = 1MB 
log4j.appender.logRollingFile.MaxBackupIndex = 10 
log4j.appender.logRollingFile.Encoding = UTF-8 
 
用Email發(fā)送日志 
log4j.appender.logMail = org.apache.log4j.net.SMTPAppender 
log4j.appender.logMail.layout = org.apache.log4j.HTMLLayout 
log4j.appender.logMail.layout.LocationInfo = TRUE 
log4j.appender.logMail.layout.Title = Struts2 Mail LogFile 
log4j.appender.logMail.Threshold = DEBUG 
log4j.appender.logMail.SMTPDebug = FALSE 
log4j.appender.logMail.SMTPHost = SMTP.163.com 
log4j.appender.logMail.From = xly3000@163.com 
log4j.appender.logMail.To = xly3000@gmail.com 
log4j.appender.logMail.Cc = xly3000@gmail.com 
log4j.appender.logMail.Bcc = xly3000@gmail.com 
log4j.appender.logMail.SMTPUsername = xly3000 
log4j.appender.logMail.SMTPPassword = 1234567 
log4j.appender.logMail.Subject = Log4j Log Messages 
log4j.appender.logMail.BufferSize = 1024 
log4j.appender.logMail.SMTPAuth = TRUE 
 
將日志登錄到MySQL數據庫 
log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.logDB.layout = org.apache.log4j.PatternLayout 
log4j.appender.logDB.Driver = com.mysql.jdbc.Driver 
log4j.appender.logDB.URL = jdbc:mysql://yourdbIp:3306/yourdataBaseName 
log4j.appender.logDB.User = xxxxx 
log4j.appender.logDB.Password = xxxx 
log4j.appender.logDB.Sql = INSERT INTOT_log4j(project_name,create_date,level,category,file_name,thread_name,line,all_category,message)values('Struts2','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')

源碼淺析

入口

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

loggerManager的靜態(tài)代碼塊

static {
    // By default we use a DefaultRepositorySelector which always returns 'h'.
    Hierarchy h = new Hierarchy(new RootLogger((Level) Level.DEBUG));
    repositorySelector = new DefaultRepositorySelector(h);

    /** Search for the properties file log4j.properties in the CLASSPATH.  */
    String override =OptionConverter.getSystemProperty(DEFAULT_INIT_OVERRIDE_KEY,
						       null);

    // if there is no default init override, then get the resource
    // specified by the user or the default config file.
    if(override == null || "false".equalsIgnoreCase(override)) {

      String configurationOptionStr = OptionConverter.getSystemProperty(
							  DEFAULT_CONFIGURATION_KEY, 
							  null);

      String configuratorClassName = OptionConverter.getSystemProperty(
                                                   CONFIGURATOR_CLASS_KEY, 
						   null);

      URL url = null;

      // if the user has not specified the log4j.configuration
      // property, we search first for the file "log4j.xml" and then
      // "log4j.properties"
      if(configurationOptionStr == null) {	
	url = Loader.getResource(DEFAULT_XML_CONFIGURATION_FILE);
	if(url == null) {
	  url = Loader.getResource(DEFAULT_CONFIGURATION_FILE);
	}
      } else {
	try {
	  url = new URL(configurationOptionStr);
	} catch (MalformedURLException ex) {
	  // so, resource is not a URL:
	  // attempt to get the resource from the class path
	  url = Loader.getResource(configurationOptionStr); 
	}	
      }
      
      // If we have a non-null url, then delegate the rest of the
      // configuration to the OptionConverter.selectAndConfigure
      // method.
      if(url != null) {
	    LogLog.debug("Using URL ["+url+"] for automatic log4j configuration.");
        try {
            OptionConverter.selectAndConfigure(url, configuratorClassName,
					   LogManager.getLoggerRepository());
        } catch (NoClassDefFoundError e) {
            LogLog.warn("Error during default initialization", e);
        }
      } else {
	    LogLog.debug("Could not find resource: ["+configurationOptionStr+"].");
      }
    } else {
        LogLog.debug("Default initialization of overridden by " + 
            DEFAULT_INIT_OVERRIDE_KEY + "property."); 
    }  
  } 

在loggerManager的靜態(tài)代碼塊中,完成對配置文件的讀取和解析

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

然后組裝成框架的Logger對象、appender對象完成初始化操作

當調用logger.info打印日志時,和logback的流程基本一樣,也是先組裝成一個LoggingEvent對象,然后一次遍歷logger對象的Appender列表(無appender列表的繼承子父對象)完成日志輸出文章來源地址http://www.zghlxwxcb.cn/news/detail-759553.html

到了這里,關于log4j日志框架的使用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Java 項目日志實例基礎:Log4j

    Java 項目日志實例基礎:Log4j

    點擊下方關注我,然后右上角點擊...“設為星標”,就能第一時間收到更新推送啦~~~ 介紹幾個日志使用方面的基礎知識。 1 Log4j 1、Log4j 介紹 Log4j(log for java)是 Apache 的一個開源項目,通過使用 Log4j,我們可以控制日志信息輸出到日志文件、也可以控制每一條日志的輸出格式

    2024年02月12日
    瀏覽(24)
  • flink operator 1.7 更換日志框架log4j 到logback

    更換日志框架 flink 1.18 1 消除基礎flink框架log4j 添加logback jar 2 在鏡像制作的時候消除: 3-2 制作flink yaml的時候添加參數

    2024年02月21日
    瀏覽(28)
  • 如何在 Spring Boot 中集成日志框架 SLF4J、Log4j

    如何在 Spring Boot 中集成日志框架 SLF4J、Log4j

    筆者的操作環(huán)境: Spring Cloud Alibaba:2022.0.0.0-RC2 Spring Cloud:2022.0.0 Spring Boot:3.0.2 Nacos 2.2.3 Maven 3.8.3 JDK 17.0.7 IntelliJ IDEA 2022.3.1 (Ultimate Edition) 因為 Spring Boot 已經內置了 Logback,所以需要先將 Logback 移除。移除的方法是在 Spring Boot 依賴包中移除 Logback。 比如就像這樣: 【踩坑提

    2024年02月13日
    瀏覽(24)
  • 日志框架梳理(Log4j,Reload4j,JUL,JCL,SLF4J,Logback,Log4j2)

    文中代碼示例獲?。宏P注【 Qin的學習營地 】,回復【 日志框架梳理 】 在了解日志框架時總會列出一系列框架:Log4j,Reload4j,JUL,JCL,SLF4J,Logback,Log4j2,這么多框架讓人感到混亂,該怎么選取、該怎么用。接下來,讓我們逐步理清這些框架及之間的關系。 首先來了解日志

    2024年02月05日
    瀏覽(61)
  • 使用Log4j與log4j2配置mybatisplus打印sql日志

    使用Log4j與log4j2配置mybatisplus打印sql日志

    環(huán)境:項目非完全spring項目,沒有spring的配置文件。執(zhí)行sql時老是不打印sql語句。因此進行修改,過程比較坎坷,記錄一下。 我嘗試使用log4j和log4j2進行配置 最終把這兩種全部配置記錄上 Log4j配置 如果項目用的是log4j需要進行配置打印sql的步驟 首先引入log4j的包 配置一下l

    2024年02月04日
    瀏覽(32)
  • logging.level的含義及設置 【java 日志 (logback、log4j)】

    日志級別 tracedebuginfowarnerrorfatal 常用的有:debug,info,warn,error 通常我們想設置日志級別,會用到?logging.level.root=info logging.level設置日志級別,后面跟生效的區(qū)域。root表示整個項目。 也可以寫某個包,或者某個類。 例如:logging.level.com.ali.service=error。在com.ali.service包下所有

    2024年02月10日
    瀏覽(27)
  • Flink使用log4j.properties不打印日志問題

    日志配置文件選擇使用log4j.properties flink程序不打印日志。 問題原因 ????????日志依賴包沖突 解決辦法 ????????將lib目錄下的log4j2依賴移除,如下: ????????log4j-1.2-api-2.12.1.jar ????????log4j-api-2.12.1.jar ????????log4j-core-2.12.1.jar ????????log4j-slf4j-impl-2.12.

    2024年02月09日
    瀏覽(20)
  • 【日志加載 log4j】

    【日志加載 log4j】

    2.編寫配置 3.獲取日志對象 4.1 Loggers 記錄器 4.2 Appenders 輸出源 4.3 Layouts 布局 5. 配置文件 log4j.properties

    2024年02月11日
    瀏覽(23)
  • 用Log4j 2記錄日志

    用Log4j 2記錄日志

    下面代碼示例的maven工程中的pom.xml文件中需要增加對Log4j 2的依賴: 配置說明參考文檔 https://logging.apache.org/log4j/2.x/manual/configuration.html 配置文件中pattern的詳細說明 例如,下面配置文件片段中用到了pattern: pattern的詳細說明請參考: https://logging.apache.org/log4j/2.x/manual/layouts.ht

    2024年02月14日
    瀏覽(23)
  • Log4j瘋狂寫日志問題排查

    最近有個 Java 系統(tǒng)上線后不久就收到了磁盤使用率告警,磁盤使用率已經超過了 90% 以上,并且磁盤使用率還在不停增長。 由于服務器磁盤被打滿,導致了系統(tǒng)正常的業(yè)務日志無法繼續(xù)打印,嚴重影響了系統(tǒng)的可靠性。 剛開始收到磁盤告警的時候,懷疑是日志級別問題,業(yè)務

    2024年02月13日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包