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 文件

配置如下:

# 聲明日志類型
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 一些配置:

  • 日志輸出級別,共有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)時,日志文件就會按上述規則來生成。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM