2011-01-14 39 views
6

Tôi hiện đang sử dụng các lớp DailyRollingFileAppender trong log4j để làm file log hàng ngày phụ thêm nhưng tôi muốn có các file bản ghi tách ra theo định dạng sau:Làm thế nào để bạn tạo các tệp nhật ký trong log4j mỗi khi thực hiện chương trình?

DATA.log.<date>_<time>_<random_#> 

này nên được thực hiện một lần mỗi thực hiện chương trình vì vậy tôi kết thúc với một cái gì đó như ...

DATA.log.2011-01-13_12-46-38_<26> 
DATA.log.2011-01-13_12-46-38_<79> 
DATA.log.2011-01-13_12-46-38_<590> 

Nơi các tệp nhật ký khác nhau từ các môi trường khác nhau có thể được gộp chung với nhau.

Có cách nào để thực hiện việc này mà không mở rộng Lớp FileAppender không? Ít nhất, là có một cách để làm:

DATA.log.<date>_<time>_<sequential_#>.log 

Cảm ơn

Edit: Tôi đã sử dụng DailyRollingFileAppender để có được một cái gì đó giống như DATA.log.2011-01-13. Những gì tôi muốn biết làm thế nào để làm là nhận được tập tin đăng nhập để rollover sau mỗi lần thực hiện chương trình (hoặc trước khi thực hiện mỗi chương trình) và thêm một chuỗi số ngẫu nhiên ở cuối.

+0

Có liên quan: http://en.wikipedia.org/wiki/Aspect-oriented_programming –

+0

Cảm ơn Dave. Một câu hỏi khác, tôi đang cố thêm thuộc tính vào lớp của tôi, tức là log4j.appender.DATA.CustomProperty = value. Làm thế nào để tôi làm điều này? – Kevin

+0

Nevermind ... thật dễ dàng, tôi không tận dụng nó:/ – Kevin

Trả lời

3

có một cái nhìn tại địa chỉ: Setting a log file name to include current date in Log4j

EDIT: Thêm lớp này để dự án của bạn, và sử dụng nó như appender:

import java.util.Random; 

import org.apache.log4j.DailyRollingFileAppender; 

public class MyAppender extends DailyRollingFileAppender {  
    @Override 
    public void setFile(String fileName) { 
     if (fileName.indexOf("%rnd") >= 0) { 
      Random r = new Random(); 
      fileName = fileName.replaceAll("%rnd", Integer.toString(r.nextInt())); 
     } 
     super.setFile(fileName); 
    } 
} 

Sau đó, chỉ cần đặt tên tập tin của appender của bạn để một cái gì đó như:. Filename% rnd.log

log4j.appender.R=MyAppender.MyAppender 
log4j.appender.R.File=.\\test.%rnd.log 
+0

Tôi đã làm những gì URL mà bạn đăng nói để làm. Những gì tôi muốn làm là thêm một chuỗi ngẫu nhiên bổ sung vào cuối sau mỗi lần thực hiện chương trình để tôi có thể theo dõi nhiều nhật ký. Tôi sẽ chỉnh sửa câu hỏi của tôi cho việc này. – Kevin

+0

Ok, làm việc trên đó;). Tôi có nó ở đâu đó – Twister

+0

Và bạn có thể thêm một số mẫu mới khác cũng dễ dàng. Và chúng tôi qua một số dự án – Twister

1

Trong mã của bạn thiết lập một tài sản môi trường mới:

randomString = Long.toString(Math.abs((new Random()).nextLong()), Character.MAX_RADIX); 
System.setProperty("randomString", randomString); 

Sau đó, trong tệp log4j của bạn, hãy sử dụng biến số đó bằng cách sử dụng ${randomString}.

Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan