जावा लॉग फ़िल्टर का उपयोग करके HTTP अनुरोधों का पार्सिंग करना
javax.servlet.Filterयह एक सुविधाजनक टूल को लागू करता है जो HTTP अनुरोधों की सामग्री को पार्स करता है और लॉग आउटपुट करता है।फ़िल्टरआइए मैं आपको इस कक्षा के बारे में बता दूं।
यह लॉग फ़िल्टर लॉग आउटपुट के लिए "java.util.logging.Logger" का उपयोग करता है, और आप लॉग स्तर को बदलकर आउटपुट जानकारी को बदल सकते हैं।
javax.servlet.Filter क्या है?
वेब एप्लिकेशन बनाते समय, मुख्य व्यावसायिक प्रक्रियाओं के अलावा, उन प्रक्रियाओं से पहले और बाद में होने वाली सामान्य द्वितीयक प्रक्रियाओं को भी करना आवश्यक होता है।
उदाहरण के लिए, क्लाइंट प्रमाणीकरण, अनुमति जांच, लॉगिंग आदि।
प्रत्येक संसाधन में इस तरह की द्वितीयक प्रक्रियाओं को कोड करना सॉफ्टवेयर के रखरखाव में एक बड़ी बाधा है और इसके परिणामस्वरूप एक ऐसा एप्लिकेशन बनता है जिसका रखरखाव करना मुश्किल होता है।
javax.servlet.Filter को लागू करके, आप अनुरोध को सर्वलेट क्लास में भेजने से पहले ही इस द्वितीयक प्रसंस्करण को सामान्य रूप से निष्पादित कर सकते हैं।
इसके अलावा, चूंकि फ़िल्टर सेटिंग्स को web.xml में कॉन्फ़िगर किया जा सकता है, इसलिए आप सोर्स कोड को बदले बिना लचीले ढंग से फ़िल्टर जोड़ या हटा सकते हैं।
चलिए लॉग फ़िल्टर का उपयोग करके देखते हैं।
आइए लॉग फ़िल्टर का उपयोग करके HTTP अनुरोधों का विश्लेषण करें।
इस बारबिल्लाहम डिफ़ॉल्ट रूप से शामिल उदाहरण एप्लिकेशन का उपयोग करेंगे।
निम्नलिखित सेटिंग्स करने के तुरंत बाद इस फ़िल्टर को चलाया जा सकता है।
2. संकलित क्लास फ़ाइलों को "/examples/WEB-INF/classes" के अंतर्गत रखें।
3. web.xml में निम्नलिखित परिभाषा सेट करें।
लॉगफ़िल्टर लॉगफ़िल्टर लॉगिंग. स्तर अच्छा लॉगफ़िल्टर /*
स्ट्रट्स फ्रेमवर्क का उपयोग करते समय यूआरएल पैटर्न इस प्रकार है:
*।करना
सेशंस एग्जांपल स्क्रीन चलाते समय कृपया लॉग आउटपुट परिणामों की जांच करें।

आउटपुट और लॉग स्तर के लिए लॉग जानकारी
●लॉग आउटपुट सामग्री
| लॉग जानकारी | लॉग स्तर |
|---|---|
| कुकी जानकारी | अच्छा |
| HTTP हेडर जानकारी | अच्छा |
| HTTP और अन्य जानकारी | अच्छा |
| HTTP अनुरोध पैरामीटर | कॉन्फ़िग |
| अनुरोध-क्षेत्रीय वस्तु | कॉन्फ़िग |
| सत्र-आधारित वस्तुएँ | कॉन्फ़िग |
| अनुरोध से पहले और बाद में मेमोरी का उपयोग | कॉन्फ़िग |
| स्क्रीन संक्रमण जानकारी | जानकारी |
इन दोनों में अंतर करने के लिए आपको निम्नलिखित लॉग स्तरों का उपयोग करना चाहिए।
- ठीक है... यह सबसे विस्तृत लॉग आउटपुट करता है। HTTP अनुरोधों का विस्तार से विश्लेषण करने के लिए इसे सेट करें।
- CONFIG... कमांड थोड़े अधिक विस्तृत लॉग आउटपुट करता है। विकास के दौरान इसे इसी स्तर पर रखना उचित रहेगा।
- जानकारी... केवल स्क्रीन ट्रांज़िशन की जानकारी प्रदर्शित करता है।
● लॉग लेवल कैसे बदलें
आप आरंभिक पैरामीटर logging.Level को सेट करके लॉग आउटपुट स्तर को बदल सकते हैं।
उदाहरण:
लॉगिंग. स्तर जानकारी
सोर्स कोड
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* HTTP अनुरोध की सामग्री को पार्स करने और लॉग आउटपुट करने के लिए javax.servlet.Filter को लागू करें।
* फ़िल्टर क्लास।
*/
पब्लिक क्लास लॉगफ़िल्टर इम्प्लीमेंट्स फ़िल्टर {
निजी स्थिर लॉगर लॉगर =
लॉगर.गेटलॉगर(लॉगफ़िल्टर.क्लास.गेटनेम());
निजी स्थैतिक अंतिम स्ट्रिंग LINE_SEPA =
सिस्टम.गेटप्रॉपर्टी(“लाइन.सेपरेटर”);
निजी स्थैतिक अंतिम स्ट्रिंग NEXT_PAGE = “लॉगफ़िल्टर.NEXT_PAGE”;
/**
* इस लॉग फ़िल्टर को प्रारंभ करें।
* @param मैपिंग
*/
पब्लिक वॉइड इनिट(फ़िल्टरकॉन्फ़िग मैपिंग) {
स्ट्रिंग str = मैपिंग.getInitParameter(“logging.Level”);
System.out.println("लॉग स्तर को "+str+" पर सेट किया जा रहा है।");
लेवल = null;
कोशिश {
स्तर = स्तर.पार्स(स्ट्रिंग);
} कैच (अपवाद ई) {
e.printStackTrace();
स्तर = स्तर.जानकारी;
}
लॉग मैनेजर.गेटलॉग मैनेजर().रीसेट();
Handler handler = new CustomConsoleHandler();
हैंडलर.सेटफॉर्मेटर(नया कस्टमफॉर्मेटर());
हैंडलर.सेटलेवल(स्तर);
लॉगर.सेटलेवल(लेवल);
logger.getParent().addHandler(हैंडलर);
}
/**
* यह एक फ़िल्टर है जो लॉग आउटपुट करता है।
* @param अनुरोध संसाधित किया जा रहा HTTP अनुरोध
* @param response उत्पन्न की जा रही HTTP प्रतिक्रिया
* @param चेन
*/
पब्लिक वॉइड डूफ़िल्टर (सर्वलेटरिक्वेस्ट _रिक्वेस्ट, सर्वलेटरिस्पॉन्स _रिस्पॉन्स,
FilterChain chain) throws IOException, ServletException {
// —————————————————————『प्रीप्रोसेसिंग』
HttpServletRequest अनुरोध = (HttpServletRequest) _अनुरोध;
HttpServletResponse प्रतिक्रिया = (HttpServletResponse) _प्रतिक्रिया;
यदि (लॉगर.isLoggable(Level.CONFIG)) {
लॉगर.कॉन्फ़िग(
“============ अनुरोध शुरू!!”
+"थ्रेड आईडी:"”
+ थ्रेड.करंटथ्रेड().हैशकोड()
+ ” =========================================================” कॉपीराइट;
}
// स्मृति प्रयोग
स्ट्रिंग एक्शनमेमोरी = शून्य;
यदि (लॉगर.isLoggable(Level.CONFIG)) {
actionMemory = getMemoryInfo(” ”
+ नया समय(सिस्टम.करंटटाइममिलिस()) + "अनुरोध [पिछला]");
}
यदि (लॉगर.isLoggable(Level.FINE)) {
logger.fine("कुकी जानकारी" + getCookieInfo(request));
}
यदि (लॉगर.isLoggable(Level.FINE)) {
logger.fine("HTTP हेडर सूचना" + getHeadersInfo(request));
}
यदि (लॉगर.isLoggable(Level.FINE)) {
लॉगर
.fine("HTTP अन्य जानकारी" + getRequestOtherInfo(request));
}
यदि (लॉगर.isLoggable(Level.CONFIG)) {
स्ट्रिंग reqlog = getRequestParametersInfo(अनुरोध);
logger.config("HTTP अनुरोध पैरामीटर" + reqlog);
}
यदि (लॉगर.isLoggable(Level.CONFIG)) {
logger.config("अनुरोध-स्कोप ऑब्जेक्ट")“
+ getRequestAttributeInfo(request));
}
यदि (लॉगर.isLoggable(Level.CONFIG)) {
स्ट्रिंग सेशनलॉग = गेटसेशनइन्फो(अनुरोध, सत्य);
logger.config("सत्र-आधारित ऑब्जेक्ट (अनुरोध प्रसंस्करण से पहले)")“
+ सेशनलॉग);
}
// निम्नलिखित फ़िल्टर को कॉल करें
चेन.डूफ़िल्टर(अनुरोध, प्रतिक्रिया);
// --------------------"प्रोसेसिंग के बाद"
यदि (लॉगर.isLoggable(Level.CONFIG)) {
स्ट्रिंग सेशनलॉग = गेटसेशनइन्फो(अनुरोध, गलत);
logger.config("सत्र-आधारित ऑब्जेक्ट (अनुरोध प्रसंस्करण के बाद)")“
+ सेशनलॉग);
}
// स्मृति प्रयोग
यदि (लॉगर.isLoggable(Level.CONFIG)) {
actionMemory = "अनुरोध से पहले और बाद में मेमोरी का उपयोग" + LINE_SEPA
+ एक्शनमेमोरी + LINE_SEPA
+ getMemoryInfo(” ” + नया समय(सिस्टम.करंटटाइममिलिस())
+ "अनुरोध [बाद में]");
लॉगर.कॉन्फ़िग (एक्शन मेमोरी + LINE_SEPA);
}
// स्क्रीन ट्रांज़िशन जानकारी
यदि (लॉगर.isLoggable(Level.INFO)) {
स्ट्रिंग नेक्स्टपेज = (स्ट्रिंग) अनुरोध.गेटएट्रीब्यूट(अगला_पृष्ठ);
if (nextPage == null || nextPage.length() == 0) {
अगला पृष्ठ = अनुरोध.getRequestURI();
}
लॉगर.इन्फो(“अगला पृष्ठ=[” + अगला पृष्ठ + “], ”)”
+ “आईपी_पता=[” + अनुरोध.getRemoteAddr() + “], ”
+ “सेशन_आईडी=[” + अनुरोध.getSession().getId() + “] , ”
+ “यूजर-एजेंट=[” + request.getHeader(“यूजर-एजेंट”) + “]”);
}
यदि (लॉगर.isLoggable(Level.CONFIG)) {
लॉगर.कॉन्फ़िग(
“============ अनुरोध समाप्त!!”
+”थ्रेड आईडी:”+ थ्रेड.करंटथ्रेड().हैशकोड()
+ ” =========================================================”
+लाइन_एसईपीए+लाइन_एसईपीए);
}
}
/**
*
*/
सार्वजनिक शून्य नष्ट करें() {
}
//------- नीचे निजी विधियाँ दी गई हैं -------
निजी स्थैतिक स्ट्रिंग गेटमेमोरीइन्फो(स्ट्रिंग संदेश) {
DecimalFormat dFromat = new DecimalFormat(“#,###KB”);
लॉन्ग फ्री = रनटाइम.गेटरनटाइम().फ्रीमेमोरी() / 1024;
लंबा कुल = Runtime.getRuntime().totalMemory() / 1024;
long max = Runtime.getRuntime().maxMemory() / 1024;
लंबे समय से उपयोग किया गया = कुल – निःशुल्क;
String msg = message + ": " + "Total=" + dFromat.format(total) + ", "”
+ “उपयोग =" + dFromat.format(उपयोग किया गया) + ” (” + (उपयोग किया गया * 100 / कुल)
+ “%), अधिकतम उपलब्ध=” + dFromat.format(max);
संदेश लौटाएँ;
}
/**
* सभी अनुरोध हेडर को लॉग करें।
*/
निजी स्थैतिक स्ट्रिंग गेटहेडरइन्फो (एचटीटीपीसर्वलेटरिक्वेस्ट अनुरोध) {
StringBuffer buff = new StringBuffer(LINE_SEPA);
एन्यूमरेशन हेडरनेम्स = रिक्वेस्ट.गेटहेडरनेम्स();
while (headerNames.hasMoreElements()) {
स्ट्रिंग हेडरनेम = (स्ट्रिंग) हेडरनेम.नेक्स्टएलिमेंट();
बफ़.अपेंड("");
बफ़.अपेंड(हेडरनेम);
बफ़.अपेंड("=");
बफ़.अपेंड(अनुरोध.गेटहेडर(हेडरनेम));
बफ़.अपेंड(लाइन_एसईपीए);
}
return buff.toString();
}
निजी स्थैतिक स्ट्रिंग getCookieInfo(HttpServletRequest अनुरोध) {
StringBuffer buff = new StringBuffer();
कुकी[] कुकीज़ = अनुरोध.getCookies();
यदि (कुकीज़ == null) {
वापस करना "";
}
for (int i = 0; i < cookies.length; i++) {
buff.append(“\n — कुकी[” + i + “] —\n”);
बफ़.अपेंड("");
बफ़.अपेंड(कुकीज़[i].getName());
बफ़.अपेंड("=");
बफ़.अपेंड(कुकीज़[i].getValue());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड("");
बफ़.अपेंड(“getVersion()”);
बफ़.अपेंड("=");
बफ़.अपेंड(कुकीज़[i].गेटवर्जन());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड("");
बफ़.अपेंड(“getComment()”);
बफ़.अपेंड("=");
बफ़.अपेंड(कुकीज़[i].गेटकमेंट());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड("");
बफ़.अपेंड(“getDomain()”);
बफ़.अपेंड("=");
बफ़.अपेंड(कुकीज़[i].गेटडोमेन());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड("");
बफ़.अपेंड(“getMaxAge()”);
बफ़.अपेंड("=");
बफ़.अपेंड(कुकीज़[i].getMaxAge());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड("");
बफ़.अपेंड("गेटपाथ()");
बफ़.अपेंड("=");
बफ़.अपेंड(कुकीज़[i].गेटपाथ());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड("");
बफ़.अपेंड(“गेटसिक्योर()”);
बफ़.अपेंड("=");
बफ़.अपेंड(कुकीज़[i].गेटसिक्योर());
बफ़.अपेंड(लाइन_एसईपीए);
}
return buff.toString();
}
निजी स्थैतिक स्ट्रिंग getRequestParametersInfo(HttpServletRequest अनुरोध) {
StringBuffer buff = new StringBuffer(LINE_SEPA);
मैप मैप = कन्वर्टरिक्वेस्ट(रिक्वेस्ट);
TreeMap trr = new TreeMap(map);
इटरेटर itr = trr.keySet().इटरेटर();
जबकि (itr.hasNext()) {
स्ट्रिंग कुंजी = (स्ट्रिंग) itr.next();
बफ़.अपेंड("");
बफ़.अपेंड(की);
बफ़.अपेंड("=");
ऑब्जेक्ट वैल्यू = मैप.गेट(की);
स्ट्रिंग[] मान = (स्ट्रिंग[]) मान;
if (values.length == 1) {
बफ़.अपेंड(वैल्यूज़[0]);
अन्य {
// स्ट्रिंग ऐरे को परिवर्तित करें।
स्ट्रिंग strValue = stratum(values);
बफ़.अपेंड(स्ट्रवैल्यू);
}
बफ़.अपेंड(लाइन_एसईपीए);
}
return buff.toString();
}
निजी स्थैतिक स्ट्रिंग गेटरिक्वेस्टएट्रीब्यूटइन्फो(एचटीटीपीसर्वलेटरिक्वेस्ट अनुरोध) {
StringBuffer buff = new StringBuffer(LINE_SEPA);
गणना e = अनुरोध.getAttributeNames();
while (e.hasMoreElements()) {
स्ट्रिंग नाम = (स्ट्रिंग) ई.नेक्स्टएलिमेंट();
buff.append(” नाम=” + नाम + “, विशेषता वर्ग= ”
+ अनुरोध.getAttribute(नाम).getClass().getName()
+ “, toString() = ” + request.getAttribute(name)
+ LINE_SEPA);
}
return buff.toString();
}
निजी स्थैतिक स्ट्रिंग getRequestOtherInfo(HttpServletRequest अनुरोध) {
StringBuffer buff = new StringBuffer();
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getCharacterEncoding()=”);
बफ़.अपेंड(रिक्वेस्ट.गेटकैरेक्टरएनकोडिंग());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getContentLength()=”);
बफ़.अपेंड(अनुरोध.गेटकंटेंटलेंथ());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getContentType()=”);
बफ़.अपेंड(अनुरोध.गेटकंटेंटटाइप());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getLocale()=”);
बफ़.अपेंड(अनुरोध.गेटलोकेल());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getProtocol()=”);
बफ़.अपेंड(अनुरोध.गेटप्रोटोकॉल());
बफ़.अपेंड(लाइन_एसईपीए);
buff.append(”getRemoteAddr()=”);
बफ़.अपेंड(अनुरोध.गेटरिमोटएड्रेस());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getRemoteHost()=”);
बफ़.अपेंड(अनुरोध.गेटरिमोटहोस्ट());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getScheme()=");
बफ़.अपेंड(अनुरोध.गेटस्कीम());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getServerName()=”);
बफ़.अपेंड(अनुरोध.गेटसर्वरनेम());
बफ़.अपेंड(लाइन_एसईपीए);
buff.append('getServerPort()=');
बफ़.अपेंड(अनुरोध.गेटसर्वरपोर्ट());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”isSecure()=”);
बफ़.अपेंड(अनुरोध.isSecure());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getAuthType()=”);
बफ़.अपेंड(अनुरोध.गेटऑथटाइप());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getContextPath()=”);
बफ़.अपेंड(अनुरोध.गेटकॉन्टेक्स्टपाथ());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getMethod()=”);
बफ़.अपेंड(अनुरोध.गेटमेथड());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getPathInfo()=”);
बफ़.अपेंड(अनुरोध.गेटपाथइन्फो());
बफ़.अपेंड(लाइन_एसईपीए);
buff.append(”getPathTranslated()=”);
बफ़.अपेंड(अनुरोध.गेटपाथट्रांसलेटेड());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getQueryString()=");
बफ़.अपेंड(अनुरोध.गेटक्वेरीस्ट्रिंग());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getRemoteUser()=");
बफ़.अपेंड(अनुरोध.गेटरिमोटयूज़र());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getRequestedSessionId()=”);
बफ़.अपेंड(अनुरोध.गेटरिक्वेस्टेडसेशनआईडी());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getRequestURI()=”);
बफ़.अपेंड(अनुरोध.गेटरिक्वेस्टयूआरआई());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getServletPath()=”);
बफ़.अपेंड(अनुरोध.गेटसर्वलेटपाथ());
बफ़.अपेंड(लाइन_एसईपीए);
बफ़.अपेंड(”getUserPrincipal()=”);
बफ़.अपेंड(अनुरोध.गेटयूज़रप्रिंसिपल());
बफ़.अपेंड(लाइन_एसईपीए);
buff.append(”isRequestedSessionIdFromCookie()=”);
buff.append(request.isRequestedSessionIdFromCookie());
बफ़.अपेंड(लाइन_एसईपीए);
buff.append(”isRequestedSessionIdFromURL()=”);
buff.append(request.isRequestedSessionIdFromURL());
बफ़.अपेंड(लाइन_एसईपीए);
buff.append(”isRequestedSessionIdValid()=”);
buff.append(request.isRequestedSessionIdValid());
बफ़.अपेंड(लाइन_एसईपीए);
return buff.toString();
}
निजी स्थैतिक स्ट्रिंग getSessionInfo(HttpServletRequest अनुरोध, बूलियन before) {
HttpSession सत्र = अनुरोध.getSession();
StringBuffer buff = new StringBuffer();
बफ़.अपेंड(लाइन_एसईपीए);
यदि (पहले) {
buff.append(” session.isNew() = ” + session.isNew());
बफ़.अपेंड(लाइन_एसईपीए);
buff.append(” session.getId() = ” + session.getId());
बफ़.अपेंड(लाइन_एसईपीए);
}
गणना e = सत्र.getAttributeNames();
while (e.hasMoreElements()) {
स्ट्रिंग सेशननाम = (स्ट्रिंग) ई.नेक्स्टएलिमेंट();
स्ट्रिंग सेशनक्लासनेम = सेशन.गेटएट्रीब्यूट(सेशननेम)
.getClass().getName();
buff.append(” नाम =” + सत्र का नाम + “, मान =”
+ सत्र.getAttribute(सत्रनाम) + “, विशेषतावर्ग = ”
+ सत्रक्लासनाम+लाइन_एसईपीए);
}
return buff.toString();
}
निजी स्थैतिक हैशटेबल कन्वर्टरिक्वेस्ट(एचटीटीपीसर्वलेटरिक्वेस्ट रिक्वेस्ट) {
Hashtable tempHash = new Hashtable();
गणना e = अनुरोध.getParameterNames();
while (e.hasMoreElements()) {
स्ट्रिंग कुंजी = (स्ट्रिंग) ई.अगला तत्व();
String[] values = request.getParameterValues(key);
String[] parameterValues = new String[values.length];
for (int i = 0; i < values.length; i++) {
पैरामीटर मान[i] = convUnicode(मान[i]);
}
टेम्पहैश.पुट(कुंजी, पैरामीटर मान);
}
टेम्पहैश लौटाएँ;
}
निजी स्थैतिक स्ट्रिंग स्ट्रैटम (ऑब्जेक्ट मान) {
यदि (मान == null) {
"शून्य" लौटाएँ;
} else if (value instanceof String[]) {
convString((String[]) मान लौटाएँ;
अन्य {
return value.toString();
}
}
/**
* नीचे दिखाए गए अनुसार, स्ट्रिंग ऐरे [strArray] की सामग्री को एक स्ट्रिंग के रूप में लौटाता है।
* “[temp1,temp2,temp3]”
* @param strArray मूल्यांकन की जाने वाली स्ट्रिंग सरणी।
* @return परिवर्तित स्ट्रिंग
*/
निजी स्थैतिक स्ट्रिंग convString(स्ट्रिंग[] strArray) {
यदि (strArray == null)
शून्य लौटाएँ;
StringBuffer buff = new StringBuffer(“[“);
for (int i = 0; i < strArray.length; i++) {
बफ़.अपेंड(स्ट्रएरे[i] + “, “);
}
buff.delete(buff.length() – 2, buff.length());
बफ़.अपेंड("]");
return buff.toString();
}
/**
* [str] को यूनिकोड में परिवर्तित करता है।
* @param str
* @वापस करना
*/
निजी स्थैतिक स्ट्रिंग convUnicode(स्ट्रिंग str) {
यदि (str == null)
शून्य लौटाएँ;
कोशिश {
नई स्ट्रिंग लौटाएँ (str.getBytes(“8859_1”), “JISAutoDetect”);
} कैच (असमर्थितएन्कोडिंगएक्सेप्शन ई) {
थ्रो न्यू रनटाइमएक्सेप्शन(ई);
}
}
// ———————————————————————–
स्थैतिक वर्ग CustomFormatter, Formatter से विस्तारित है {
स्थैतिक अंतिम स्ट्रिंग पैटर्न = “yyyy/MM/dd HH:mm:ss”;
सार्वजनिक सिंक्रोनाइज़्ड स्ट्रिंग प्रारूप (लॉग रिकॉर्ड रिकॉर्ड) {
StringBuffer buf = new StringBuffer();
// दिनांक और समय सेट करें
Date date = new Date();
दिनांक.सेटटाइम(रिकॉर्ड.गेटमिलिस());
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
buf.append(formatter.format(date));
buf.append(":");
// स्तर निर्धारित करें
buf.append(“[” + record.getLevel().getName() + “]”);
buf.append(":");
buf.append(record.getMessage());
buf.append(LINE_SEPA);
return buf.toString();
}
}
स्थैतिक वर्ग CustomConsoleHandler, StreamHandler से विस्तारित है {
सार्वजनिक कस्टमकंसोलहैंडलर() {
बहुत अच्छा();
सेटआउटपुटस्ट्रीम(सिस्टम.आउट);
}
/**
* एक लॉग रिकॉर्ड जारी किया जाएगा।
* प्रारंभिक अवस्था में, लॉगिंग अनुरोध लॉगर ऑब्जेक्ट को निर्देशित किए जाते हैं।
* यह प्रतिक्रिया के रूप में किया जाता है, और यह ऑब्जेक्ट लॉग रिकॉर्ड को आरंभ करता है।
* इसे यहां अग्रेषित किया गया है।
*
* @param record लॉग इवेंट का विवरण। एक शून्य रिकॉर्ड को अनदेखा कर दिया जाता है।
* कोई सूचना नहीं भेजी जाएगी।
*/
पब्लिक वॉइड पब्लिश(लॉग रिकॉर्ड रिकॉर्ड) {
सुपर.पब्लिश(रिकॉर्ड);
फ्लश();
}
/**
* हालाँकि आप फ्लश करने के लिए StreamHandler.close को ओवरराइड करते हैं,
* आउटपुट स्ट्रीम बंद नहीं होगी। दूसरे शब्दों में, System.err बंद नहीं होगा।
*/
सार्वजनिक शून्य बंद करें() {
फ्लश();
}
}
}
