Bobbins का उपयोग करके स्प्रिंग बूट में HTTP अनुरोध लॉग करना

नमस्कार, प्यारे दोस्तों!


आज मैं एक शानदार उदाहरण प्रदर्शित करना चाहता हूं कि कैसे बॉबीना एक बहुत ही सामान्य स्थिति में मदद कर सकती है - स्प्रिंग बूट में HTTP अनुरोधों और प्रतिक्रियाओं को लॉग इन करना।


और भी! हम केवल अलग-अलग फ़ाइलों में HTTP संदेश लॉग करेंगे।


तो चलिए!


स्प्रिंग बूट में HTTP लॉगिंग को सक्रिय करने के लिए, बस application.properties एक पंक्ति जोड़ें:


 logging.level.org.springframework.web=TRACE 

ऐसा कॉन्फ़िगरेशन अभी भी HTTP अनुरोध के मुख्य भाग को लॉग करने की अनुमति नहीं देगा।


HTTP अनुरोध के मुख्य भाग को सक्रिय करने के लिए, एक विन्यास वर्ग बनाएँ:


 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.CommonsRequestLoggingFilter; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Bean public CommonsRequestLoggingFilter logFilter() { CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); filter.setIncludeQueryString(true); filter.setIncludePayload(true); filter.setMaxPayloadLength(100000); filter.setIncludeHeaders(false); filter.setAfterMessagePrefix("REQUEST DATA : "); return filter; } } 

अब, बॉबिन को स्थापित करते हैं।


build.gradle लिए निर्भरता जोड़ें:


 compile "io.infinite:bobbin:2.0.4" 

या pom.xml :


 <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.5.6</version> <type>pom</type> </dependency> <dependency> <groupId>io.infinite</groupId> <artifactId>bobbin</artifactId> <version>2.0.4</version> </dependency> 

संसाधन निर्देशिका या अनुप्रयोग की कार्यशील निर्देशिका में Bobbin.json फ़ाइल बनाएँ:


 { "levels": "['debug', 'info', 'warn', 'error'].contains(level)", "destinations": [ { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/THREADS/${threadGroupName}/${threadName}/${level}/${threadName}_${level}_${date}.log\"" }, "classes": "className.contains('io.infinite.')" }, { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/ALL/WARNINGS_AND_ERRORS_${date}.log\"" }, "levels": "['warn', 'error'].contains(level)" }, { "name": "io.infinite.bobbin.destinations.ConsoleDestination", "levels": "['warn', 'error'].contains(level)" } ] } 

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


  • संदेश स्तर ( debug , warn , आदि)
  • स्ट्रीम नाम
  • कक्षा और पैकेज का नाम
  • आदि

तो क्यों हम अन्य लॉग युक्त फ़ाइलों में हमारे HTTP लॉग की तलाश में परेशान होना चाहिए?


हमारी सुविधा के लिए अलग-अलग फ़ाइलों के लिए स्प्रिंग बूट HTTP लॉग को निर्देशित करते हैं!


Bobbin.json एक नया destination जोड़ें:


  { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/SPRING_WEB/${threadGroupName}/${threadName}/${level}/${threadName}_${level}_${date}.log\"" }, "classes": "className.contains('org.springframework.web')" } 

जैसा कि आप देख सकते हैं, हम "SPRING_WEB" निर्देशिका में अपने पैकेज के नाम पर "SPRING_WEB" वाली कक्षाओं से लॉग लिखते हैं!


आसान है, है ना?


यह पूरी तरह से Bobbin.json विन्यास Bobbin.json दिखता है:


 { "levels": "['debug', 'info', 'warn', 'error'].contains(level)", "destinations": [ { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/THREADS/${threadGroupName}/${threadName}/${level}/${threadName}_${level}_${date}.log\"" }, "classes": "className.contains('io.infinite.')" }, { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/ALL/WARNINGS_AND_ERRORS_${date}.log\"" }, "levels": "['warn', 'error'].contains(level)" }, { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/SPRING_WEB/${threadGroupName}/${threadName}/${level}/${threadName}_${level}_${date}.log\"" }, "classes": "className.contains('org.springframework.web')" }, { "name": "io.infinite.bobbin.destinations.ConsoleDestination", "levels": "['warn', 'error'].contains(level)" } ] } 

और यहाँ लॉग फ़ाइल की सामग्री है .\LOGS\SPRING_WEB\main\http-nio-8089-exec-1\debug\http-nio-8089-exec-1_debug_2019-03-22.log : github.com, t से लिंक करें .K। फ़ाइल में लंबी लाइनें हैं


लॉगिंग इतना आसान कभी नहीं रहा!


आपका ध्यान के लिए धन्यवाद!

Source: https://habr.com/ru/post/hi449008/


All Articles