2011-01-07 26 views
6

Tôi đang cố gắng thêm ngày hiện tại vào tệp nhật ký log4j. Vì vậy, nó sẽ là một cái gì đó như thế này:Tên tệp có ngày trong Log4j

MyApp-2011-01-07.log

Cái này là tôi không muốn sử dụng DailyRollingFileAppender. Lý do là sẽ có một kịch bản khác chạy hàng ngày để sao lưu mọi thứ trong thư mục nhật ký. Điều này đang chạy dưới Tomcat5.5.

Điều này có thể thực hiện được trong log4j không?

+0

Xin lỗi, vì vậy bạn không muốn nó chuyển sang ngày mới? Vậy điều gì xảy ra vào lúc nửa đêm? –

Trả lời

13

Tôi nghĩ rằng bạn chỉ có thể thiết lập một hệ thống tài sản trong mã để chứa ngày hiện tại:

static{ 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    System.setProperty("current.date", dateFormat.format(new Date())); 
} 

Sau đó, trong tập tin log4j.xml của bạn, bạn có thể sử dụng thuộc tính hệ thống khi chỉ định tên tập tin log trong appender :

<appender name="MYAPPENDER" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="${user.home}/myApp-${current.date}.log" /> 

ETA: Bây giờ tôi nghĩ về việc bạn có thể phải thiết lập thuộc tính hệ thống bằng trình khởi tạo tĩnh để đảm bảo thuộc tính được đặt trước khi log4j được định cấu hình.

+0

nó sẽ tạo một tệp mới cho ngày và ngày mới? hoặc nó sẽ tạo ra chỉ một lần? – Steve

+0

Đã một thời gian kể từ khi tôi nhìn vào log4j nhưng tôi nghĩ rằng ví dụ tôi đưa ra sẽ chỉ tạo một tệp nhật ký cho ngày bạn bắt đầu quá trình của mình. Sử dụng một "RollingFileAppender" trong log4j.xml của bạn nếu bạn muốn có một tệp nhật ký mới mỗi ngày. – BenjaminLinus

+0

Tôi sẽ thử nó, cảm ơn bạn đã trả lời .. – Steve

5

Cố gắng thiết lập này trong tập tin log4j.properties của bạn:

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

nhiều thông tin có thể được tìm thấy ở đây http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html

+0

Vì vậy, nếu tôi đặt nhật ký của mình để xoay vào lúc nửa đêm, điều gì sẽ xảy ra với các tệp nhật ký cũ hơn? Mỗi tập tin nhật ký có một con dấu ngày tập tin trên nó, vì vậy tôi lo lắng rằng tôi sẽ có các tập tin đăng nhập mà sẽ được tháng tuổi trong thư mục. – Sun

9

bạn có thể quản lý này một cách nhanh chóng và rất mantainable bởi chỉ tạo appender của riêng bạn.

Chỉ cần tạo một lớp như thế này:

import java.text.SimpleDateFormat; 
    import java.util.Date; 
    import org.apache.log4j.FileAppender; 

    public class CustomFileAppender extends FileAppender{ 

    @Override 
    public void setFile(String fileName) 
    { 
     if (fileName.indexOf("%timestamp") >= 0) { 
      Date d = new Date(); 
      SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSS"); 
      fileName = fileName.replaceAll("%timestamp", format.format(d)); 
     } 
     super.setFile(fileName); 
    } 
} 

và đặt này trong tài sản của bạn:

log4j.appender.file=com.portima.filenet.brio.ops.tools.CustomFileAppender 
    log4j.appender.file.File=${log}/general.%timestamp.log 

Bây giờ bạn có thể đưa ra bất cứ loại tên tập tin mà bạn muốn.

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