log4j記錄日誌到指定文件

  1. 新建類文件:

 

 1 import org.apache.log4j.Logger;
 2 import org.apache.log4j.PropertyConfigurator;
 3 
 4 /**
 5  * 記錄日誌到指定文件
 6  *
 7  * @author He
 8  * @date 2018/5/16
 9  */
10 public class Log4jDemo {
11 
12     static Logger logger = Logger.getLogger(Log4jDemo.class);
13 
14     public static void main(String[] args) {
15         PropertyConfigurator.configure("config/log4j.properties");
16         logger.info("我記錄在Log4jDemo 文件中....");
17         logger.error("在Log4jDemo 文件中出現異常....");
18     }
19 }

 

 

  2. 在項目根目錄下(即與src平級)建立config文件夾,新建log4j.properties 文件java

配置以下:apache

# 聲明日誌類型
log4j.rootLogger = INFO,log4jDemo,test

# 配置1 - 即日誌Id名爲 com.exampl.log.Log4jDemo 的日誌配置(通俗來說就是日誌的標識,只不過該標識可在多個類中調用)
log4j.logger.log4jDemo=com.exampl.log.Log4jDemo
log4j.additivity.log4jDemo = false
log4j.appender.log4jDemo=org.apache.log4j.RollingFileAppender
# 輸出級別(若是定義的ERROR級別,那麼打印的INFO級別的日誌就不會記錄在文件中,由於INFO的級別比ERROR要)
log4j.appender.log4jDemo.Threshold=ERROR
# 輸出的日誌文件位置及文件名稱
log4j.appender.log4jDemo.File=logs/Log4jDemo.log
# 佈局類型
log4j.appender.log4jDemo.layout=org.apache.log4j.PatternLayout
# 佈局模板
log4j.appender.log4jDemo.layout.ConversionPattern=%d %-5p [%l] - %m%n
# 輸出的日誌文件的最大文件大小,單位b(字節)
log4j.appender.log4jDemo.MaxFileSize=5242880
# 日誌的循環週期
log4j.appender.log4jDemo.MaxBackupIndex=3

 

運行main方法 日誌輸出以下:服務器

 

   3.關於log4j.properties 一些配置:app

  • 日誌輸出級別,共有5級: 
FATAL      0  
ERROR      3  
WARN       4  
INFO       6  
DEBUG      7 

 

  • Appender 爲日誌輸出目的地,Log4j提供的appender有如下幾種:
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

 

  • Layout:日誌輸出格式,Log4j提供的layout有如下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

 

  • 打印參數: Log4J採用相似C語言中的printf函數的打印格式格式化日誌信息,以下:
  %m   輸出代碼中指定的消息
  %p   輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL 
  %r   輸出自應用啓動到輸出該log信息耗費的毫秒數 
  %c   輸出所屬的類目,一般就是所在類的全名 
  %t   輸出產生該日誌事件的線程名 
  %n   輸出一個回車換行符,Windows平臺爲「\r\n」,Unix平臺爲「\n」 
  %d   輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyy MMM dd HH:mm:ss , SSS},輸出相似:2002年10月18日  22 : 10 : 28 , 921  
  %l   輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10 ) 

 

  • 在代碼中初始化Logger: 

1)在程序中調用BasicConfigurator.configure()方法:給根記錄器增長一個ConsoleAppender,輸出格式經過PatternLayout設爲"%-4r [%t] %-5p %c %x - %m%n",還有根記錄器的默認級別是Level.DEBUG. 
2)配置放在文件裏,經過命令行參數傳遞文件名字,經過PropertyConfigurator.configure(args[x])解析並配置;
3)配置放在文件裏,經過環境變量傳遞文件名等信息,利用log4j默認的初始化過程解析並配置;
4)配置放在文件裏,經過應用服務器配置傳遞文件名等信息,利用一個特殊的servlet來完成配置。函數

 

  •  日誌文件生成周期的定義:
rollover次數 輸出的目標 壓縮的日誌文件 描述
1 foo.log foo-1.log 在第一次rollover時,foo.log會被重命名爲foo-1.log。同時會建立一個新的foo.log並開始寫入。
2 foo.log foo-1.log, foo-2.log 在第二次發生rollover時,foo-1.log會重命名爲foo-2.log而且foo.log會重命名爲foo-1.log。同時會建立一個新的foo.log並開始寫入。
3 foo.log foo-1.log, foo-2.log, foo-3.log 在第三次發生rollover時,foo-2.log會重命名爲foo-3.log。foo-1.log重命名爲foo-2.log,foo.log會重命名爲foo-1.log。同時會建立一個新的foo.log並開始寫入。
4 foo.log foo-1.log, foo-2.log, foo-3.log 在第四次和隨後的rollover時,foo-3.log會被刪除,foo-2.log重命名爲foo-3.log。foo-1.log重命名爲foo-2.log。foo.log重命名爲foo-1.log。後面同理

    每次當文件達到指定文件大小(MaxFileSize)時,日誌文件就會按上述規則來生成。佈局

相關文章
相關標籤/搜索