2010-10-06 34 views
5

Tôi có một ứng dụng web và tôi muốn sử dụng nhật ký khác cho mọi người dùng, vì vậy tôi có thể có một "lịch sử" về những gì người dùng đã thực hiện trên hệ thống.Một nhật ký khác nhau cho mỗi người dùng sử dụng Log4j

Đây là những gì tôi có cho đến nay:

import java.io.File; 
import java.io.IOException; 

import org.apache.log4j.DailyRollingFileAppender; 
import org.apache.log4j.FileAppender; 
import org.apache.log4j.SimpleLayout; 
import org.apache.log4j.Logger; 

public class LogManager { 

    public Logger getLog(String username) throws IOException{ 
     SimpleLayout layout = new SimpleLayout(); 
     FileAppender appender = new DailyRollingFileAppender(layout, "users"+File.pathSeparator+username+File.pathSeparator+username, "'.'yyyy-MM"); 

     // configure the appender here, with file location, etc 
     appender.activateOptions(); 
     Logger logger = Logger.getRootLogger(); 
     logger.addAppender(appender); 
     return logger; 
    } 

} 

Vấn đề là, như một webapplication, là đa luồng, vì vậy AFAIK tôi không thể sử dụng RootLogger tất cả các thời gian và thay đổi appenders tùy thuộc vào người sử dụng tôi đang đăng nhập. Tôi nghĩ rằng tôi nên tạo khác nhau Logger cho mỗi người dùng, nhưng điều đó có đúng không?

+0

bạn có bao nhiêu người dùng? – dogbane

+0

giữa 1.000 và 10.000 – pakore

+0

Bạn nhận thức được rằng nhiều khả năng bạn sẽ không được phép mở 10.000 tệp cùng một lúc trong mô-đun nhật ký máy chủ web của mình? –

Trả lời

4

Hãy thử chuyển sang logback (kế log4j của). Nó đi kèm với một SiftingAppender có thể được sử dụng để tách (hoặc sàng lọc) đăng nhập theo một thuộc tính thời gian chạy nhất định, mà sẽ là "userid" trong trường hợp của bạn. documentation chứa ví dụ về cách tách nhật ký dựa trên userid.

+0

Đây chính xác là tôi đang tìm kiếm. Cảm ơn! – pakore

2

Tôi khuyên bạn nên sử dụng thông tin ngữ cảnh nhật ký để ghi lại người dùng cho bất kỳ hành động cụ thể nào và bao gồm trong nhật ký nhật ký của bạn.

Sau đó, bất cứ khi nào bạn cần nhật ký cho một người dùng cụ thể, hãy rà soát thông qua tệp nhật ký duy nhất. Nếu bạn cần chia nhỏ tất cả các tệp, hãy thực hiện khi nhật ký quay. Việc xử lý sau này sẽ đơn giản hơn rất nhiều so với việc giữ một tệp mở cho mọi người dùng đồng thời.

+0

Đây cũng là một cách tiếp cận tốt và tôi thích ý tưởng xử lý hậu kỳ. 1 cho nó. Nếu tôi có thể chấp nhận câu trả lời của bạn cũng như tôi sẽ làm điều đó! – pakore

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