Log4j日誌記錄(Java)

作者:馬如林
來源 : http://blog.csdn.net/longronglin/article/details/52350593

日誌是程序員必須掌握的基礎技能之一,如果您寫的軟件沒有日誌,可以說你沒有成爲一個真正意義上的程序員。

爲什麼要記日誌?

  • 監控代碼
  • 變量變化情況,系統運行過程。
  • 產線環境,不太好調試。
  • 分佈式環境下,調試更困難,日誌就是非常好的幫手。
  • 統計分析
  • 日後審計
  • 實際中有4%的代碼是日誌!

Java日誌框架主要有log4j,logback,及其他不常用的官方日誌及apachelogging等。

Log4j和LogBack的原作者爲同一作者CekiGülcü。主流使用的一般是log4j的居多點,所以本文主要也講解log4j爲主。

配置文件log4j.properites文件,一般放倒classpath目錄下即可,無需自啓。

log4j.rootLogger=debug, stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%-4r[%t] %5p %c %x -%m - %X{userName}%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-4r[%t] %5p %c %x -%m - %X{userName}%n

log4j.rootLogger=debug, stdout,R
log4j.rootLogger=[Level], Appender1, Appender2

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout

其他類似,基本是三大主件的配置:
Logger
日誌類型和日誌級別(TRACE < DEBUG < INFO < WARN < ERROR < FATAL)

Appenders
輸出到哪裏,可以有多個目的地( Console,File,GUI 組件,remote socket servers,JMS,NT Event Loggers,remote Unix Syslog daemons。也可以異步)

Appenders的一般Console(ConsoleAppender)用來調試,File有每天更新(DailyRollingFileAppender)和最大多大文件(RollingFileAppender)滾動的設置,也有郵件的告警設置。基本理解上面的即可。

Layouts
%r [%t] %-5p %c - %m%n
176 [main] INFO org.foo.Bar - Located nearest gasstation.

Maven引用

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

個人認爲必須瞭解和掌握的日誌特性:

1. 列表內容
2. 日誌級別
3. 繼承
4. JMX管理
5. Appenders的Additivity

其他的需要了解

  • Filter
  • NDC
  • MDC

日誌調優

示例:
logger.debug(“Entry number: ” + i + “ is ” + String.valueOf(entry[i]));
if(logger.isDebugEnabled() {
logger.debug(“Entry number: ” + i + “ is ” + String.valueOf(entry[i]));
}
判斷只是記錄日誌的1%時間,所以一般情況下是值得的。
但是一般使用SLF4J就自動集成該功能。

在瞭解Log4j之後,也必須瞭解一下SLF4j,大家一般是使用這個進行整合內部不同日誌的具體實現的。
Maven使用

 <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
 </dependency>
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");

常用記錄日誌的地方:
• 方法入口
• 方法出口
• 異常
• 自己需要跟蹤的信息
• 距離日誌最近的地方記錄日誌
• 先記錄日誌,後拋異常,可以把異常往上拋
• 去除冗餘日誌

日誌庫的使用情況:

日誌一般會使用即可。掌握本課程基本夠用,剩下來就看你自己了。

著名的solr使用日誌的情況

一般大企業,會收集日誌,使用ELK等技術查看日誌,或sink到Hadoop進行數據分析和挖掘,甚至使用storm進行實時統計。

更多內容可以參考視頻:

CSDN學 院: http://edu.csdn.net/course/detail/2890
網易雲課堂: http://study.163.com/course/introduction/1003149011.htm

發佈了59 篇原創文章 · 獲贊 20 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章