Log4j

2010-10-06 23 views
5

का उपयोग कर प्रत्येक उपयोगकर्ता के लिए एक अलग लॉग है मेरे पास एक वेबप्लिकेशंस है और मैं प्रत्येक उपयोगकर्ता के लिए एक अलग लॉग का उपयोग करना चाहता हूं, इसलिए मेरे पास सिस्टम पर उपयोगकर्ता ने क्या किया "इतिहास" हो सकता है।Log4j

यह वही है मैं अब तक है:

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; 
    } 

} 

समस्या यह है कि, एक WebApplication के रूप में, थ्रेड है, इसलिए AFAIK मैं RootLogger हर समय उपयोग नहीं कर सकते और उपयोगकर्ता के आधार पर appenders बदल रहा है मैं लॉगिंग कर रहा हूँ मुझे लगता है कि मुझे प्रत्येक उपयोगकर्ता के लिए अलग-अलग Logger बनाना चाहिए, लेकिन क्या यह सही है?

+0

आपके पास कितने उपयोगकर्ता हो सकते हैं? – dogbane

+0

1.000 और 10.000 – pakore

+0

के बीच आप जानते हैं कि आपको अपने वेब सर्वर लॉग मॉड्यूल में एक साथ 10.000 फ़ाइलों को खोलने की अनुमति नहीं दी जाएगी? –

उत्तर

4

logback (log4j के उत्तराधिकारी) स्विच करके देखें। यह SiftingAppender के साथ आता है जिसका उपयोग किसी दिए गए रनटाइम विशेषता के अनुसार लॉगिंग (या सिफ्ट) लॉगिंग करने के लिए किया जा सकता है, जो आपके मामले में "उपयोगकर्ता आईडी" होगा। documentation में उपयोगकर्ता आईडी के आधार पर लॉग को अलग करने के लिए एक उदाहरण है।

+0

यह वही था जिसे मैं ढूंढ रहा था। धन्यवाद! – pakore

2

मैं किसी विशेष कार्रवाई के लिए उपयोगकर्ता को रिकॉर्ड करने के लिए लॉग संदर्भ जानकारी का उपयोग करने का सुझाव दूंगा, और इसमें आपके लॉग रिकॉर्ड शामिल होंगे।

फिर जब भी आपको किसी विशेष उपयोगकर्ता के लिए लॉग की आवश्यकता होती है, तो एकल लॉग फ़ाइल के माध्यम से ट्रैवल करें। यदि आपको सभी फ़ाइलों को विभाजित करने की आवश्यकता है, तो लॉग घुमाए जाने पर इसे करें। यह पोस्ट-प्रोसेसिंग प्रत्येक उपयोगकर्ता के साथ एक साथ खुली फ़ाइल रखने से बहुत आसान होगी।

+0

यह एक अच्छा दृष्टिकोण भी है और मुझे पोस्ट-प्रोसेसिंग का विचार पसंद है। इसके लिए +1। अगर मैं आपका जवाब भी स्वीकार कर सकता हूं तो मैं भी करूँगा! – pakore

2

"नेस्टेड नैदानिक ​​संदर्भ" इस तरह के एक उपयोग के मामले के लिए है - आप कर सकते हैं टिकट पहचान करने के लिए एक आईडी उपयोगकर्ता के साथ प्रत्येक लॉग बयान (एक आईपी पता, उपयोगकर्ता नाम की तरह, आदि)

अधिक यहाँ: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/NDC.html

(संपादित करें: यहाँ एनडीसी पर एक और उपयोगी पोस्ट: When to use 'nested diagnostic context' (NDC)?)