作者:馬如林
來源 : 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.PatternLayoutlog4j.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.loglog4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-4r[%t] %5p %c %x -%m - %X{userName}%nlog4j.rootLogger=debug, stdout,R
log4j.rootLogger=[Level], Appender1, Appender2log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1=org.apache.log4j.ConsoleAppenderlog4j.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