2016-02-25 21 views
11

में प्रवेश लॉग लॉग करने के लिए कस्टम लॉगर का उपयोग कैसे करें वर्तमान में वसंत बूट 1.3 में, हम केवल फाइल सिस्टम में फ़ाइल में लॉग लॉग लॉग कर सकते हैं। एक्सेस लॉग लॉग करने के लिए वास्तव में कस्टम लॉगर (जैसे log4j2) का उपयोग करने का कोई तरीका है?वसंत बूट

मैं वर्तमान में वसंत बूट के साथ उपक्रम का उपयोग कर रहा हूं, लेकिन वसंत बूट स्रोत कोड की जांच करने के बाद, उपरोक्त लॉगर को DefaultAccessLogReceiver के साथ प्रारंभ किया गया है जो फ़ाइल में लिख रहा है। यदि संभव हो तो मैं AccessLogHandler का उपयोग करना चाहता हूं, और एक वेब फ़िल्टर लिखने से बचें जो पहुंच को लॉग करता है।

क्या इसके आसपास कोई आसान तरीका है? (एक पुल अनुरोध लिखने के अलावा)

उत्तर

5

इस तरह की हार्ड-कोडेड-इस तरह के कस्टमाइज़ करने योग्य समस्या के लिए एक चाल एक ही पैकेज और नाम के साथ एक नए के साथ बाहर निकलने के लिए कक्षा को छिपाने के लिए है। आपको बस एक लॉग 4j आधारित DefaultAccessLogReceiver प्रदान करना है और यह सुनिश्चित करना है कि इसे लाइब्रेरी में से पहले क्लासलोडर द्वारा खोजा जा सके।

package io.undertow.server.handlers.accesslog; 

public class DefaultAccessLogReceiver implements AccessLogReceiver { 

    public void logMessage(final String message) { 
     // TODO: log with log4j 
    } 
} 
+0

यह दिलचस्प विचार है, इस विचार के बारे में कभी सोचा नहीं। – Rowanto

0

स्प्रिंग बूट में कॉमन्स-लॉगिंग एपीआई को छोड़कर कोई अनिवार्य लॉगिंग निर्भरता नहीं है, जिसमें से चुनने के लिए कई कार्यान्वयन हैं। लॉगबैक का उपयोग करने के लिए आपको इसे शामिल करने की आवश्यकता है, और क्लासपाथ पर कॉमन्स-लॉगिंग के लिए कुछ बाइंडिंग शामिल हैं। ऐसा करने का सबसे आसान तरीका स्टार्टर पोम्स के माध्यम से होता है जो सभी वसंत-बूट स्टार्टर-लॉगिंग पर निर्भर करते हैं। वेब एप्लिकेशन के लिए आपको केवल वसंत-बूट-स्टार्टर-वेब की आवश्यकता होती है क्योंकि यह लॉगिंग स्टार्टर पर पारगमन पर निर्भर करता है। उदाहरण के लिए, Maven का उपयोग कर:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 

स्प्रिंग बूट एक LoggingSystem अमूर्त कि classpath की सामग्री के आधार लॉगिंग कॉन्फ़िगर करने के लिए प्रयास करता है। अगर लॉगबैक उपलब्ध है तो यह पहली पसंद है।

स्प्रिंग बूट लॉगिंग कॉन्फ़िगरेशन के लिए लॉग 4j या Log4j 2 का भी समर्थन करता है, लेकिन केवल तभी जब उनमें से कोई क्लासपाथ पर है। यदि आप निर्भरताओं को इकट्ठा करने के लिए स्टार्टर पोम्स का उपयोग कर रहे हैं जिसका अर्थ है कि आपको लॉगबैक को बाहर करना होगा और उसके बाद Log4j के अपने चुने हुए संस्करण को शामिल करना होगा। यदि आप स्टार्टर पोम्स का उपयोग नहीं कर रहे हैं तो आपको Log4j के अपने चुने हुए संस्करण के अलावा कॉमन्स-लॉगिंग (कम से कम) प्रदान करने की आवश्यकता है।

सबसे सरल मार्ग शायद स्टार्टर पोम्स के माध्यम से है, भले ही इसे बाहर करने के साथ कुछ जॉगलिंग की आवश्यकता हो, .e.g। Maven में: log4j 2

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId> 
    <exclusions> 
     <exclusion> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-logging</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-log4j</artifactId> 
</dependency> 

का उपयोग करने के लिए बस वसंत-बूट स्टार्टर-log4j वसंत-बूट स्टार्टर-log4j2 बजाय पर निर्भर हैं।

+1

मुझे यह पता है। लेकिन यह आपको कंसोल पर एक्सेस लॉग लॉग करने की अनुमति नहीं देता है। और इसकी सेटिंग बदलो। एक्सेस लॉग उपरोक्त के मूल लॉगर का उपयोग कर रहा है। – Rowanto

+0

क्या आप अपने आवेदन से उदाहरण दे सकते हैं जो आप वास्तव में करना चाहते हैं। हमारे आवेदन में हम कंसोल पर लॉग देख सकते हैं। – AGdev