{"id":910,"date":"2018-09-17T18:17:23","date_gmt":"2018-09-17T09:17:23","guid":{"rendered":"https:\/\/chat-messenger.com\/?p=910"},"modified":"2018-12-23T02:01:26","modified_gmt":"2018-12-22T17:01:26","slug":"http-log-filter","status":"publish","type":"post","link":"https:\/\/chat-messenger.com\/id\/blog\/java\/penyaring-log-http","title":{"rendered":"Parsing HTTP dengan Java Log Filter"},"content":{"rendered":"<h2 class=\"common_title\"><a name=\"0\">Parsing permintaan HTTP dengan filter log Java<\/a><\/h2>\n<p>\n<strong>javax.servlet.Filter<\/strong>Cara mudah untuk mengimplementasikan dan mengurai konten permintaan HTTP dan log keluaran.<strong>Saring<\/strong>Memperkenalkan kelas.<br \/>\n<br \/>\nFilter log ini menggunakan &quot;java.util.logging.Logger&quot; untuk keluaran log, dan Anda dapat mengubah keluaran informasi dengan mengubah tingkat log.\n<\/p>\n<h2 class=\"common_title\"><a name=\"1\">Apa itu javax.servlet.Filter?<\/a><\/h2>\n<p>\nSaat membangun aplikasi web, selain pemrosesan bisnis utama, perlu dilakukan pemrosesan sekunder umum sebelum dan sesudah pemrosesan bisnis utama.<br \/>\nMisalnya, otentikasi klien, pemeriksaan otoritas, pencatatan, dll.<br \/>\nPengkodean pemrosesan sampingan seperti itu di setiap sumber daya menjadi penyebab utama terhambatnya pemeliharaan perangkat lunak, sehingga mengakibatkan aplikasi sulit untuk dipelihara.<\/p>\n<p>Dengan mengimplementasikan javax.servlet.Filter, Anda biasanya dapat melakukan pemrosesan sampingan ini sebelum permintaan diteruskan ke kelas servlet.<br \/>\nSelain itu, karena pengaturan filter dapat dilakukan di web.xml, Anda dapat secara fleksibel menambah atau menghapus filter tanpa mengubah kode sumber.\n<\/p>\n<p><script type=\"text\/javascript\" src=\"https:\/\/chat-messenger.com\/js\/common.js?dd12sssas2223\" charset=\"UTF-8\"><\/script><br \/>\n<script type=\"text\/javascript\"> writePR(); <\/script><\/p>\n<h2 class=\"common_title\"><a name=\"2\">Coba gunakan filter log<\/a><\/h2>\n<p>Mari kita gunakan filter log untuk memfilter permintaan HTTP dan menganalisisnya.<br \/>\nKali ini<a href=\"http:\/\/tomcat.apache.org\/\" target=\"_blank\">Kucing jantan<\/a>Kami akan menggunakan contoh aplikasi yang tersedia dari awal.<br \/>\nAnda dapat langsung menjalankan filter ini dengan melakukan pengaturan berikut.<\/p>\n<div class=\"point\">\n1.<a href=\"#4\"><strong>Kode sumber<\/strong><\/a>Dapatkan dan kompilasi.<br \/>\n2. Tempatkan file kelas yang telah dikompilasi di bawah &quot;\/examples\/WEB-INF\/classes&quot;.<br \/>\n3.Tetapkan definisi berikut di web.xml.\n<\/div>\n<pre class=\"sample_src\">  Filter Log Filter Log logging.Level BAGUS Filter Log \/*\r\n<\/pre>\n<p>*Pola url saat menggunakan framework Struts adalah sebagai berikut.<\/p>\n<pre class=\"sample_src\">   *.Mengerjakan\r\n<\/pre>\n<p>\nSilakan periksa hasil keluaran log dari eksekusi layar Contoh Sesi.<br \/>\n<img src=\"https:\/\/chat-messenger.com\/images\/SessionsExample.jpg\" alt=\"Analisis aplikasi web dengan filter log javax.servlet.Filter\" border=\"0\"><br \/>\n<br clear=\"all\"><\/p>\n<h2 class=\"common_title\"><a name=\"3\">Informasi log keluaran dan level log<\/a><\/h2>\n<p><strong>\u25cfLog konten keluaran<\/strong><\/p>\n<table border=\"1\">\n<tbody>\n<tr bgcolor=\"#FFFF80\">\n<th>Mencatat informasi<\/th>\n<th>tingkat log<\/th>\n<\/tr>\n<tr>\n<td><strong>Informasi kue<\/strong><\/td>\n<td>BAGUS<\/td>\n<\/tr>\n<tr>\n<td><strong>Informasi tajuk HTTP<\/strong><\/td>\n<td>BAGUS<\/td>\n<\/tr>\n<tr>\n<td><strong>HTTPInformasi lainnya<\/strong><\/td>\n<td>BAGUS<\/td>\n<\/tr>\n<tr>\n<td><strong>Parameter permintaan HTTP<\/strong><\/td>\n<td>KONFIGURASI<\/td>\n<\/tr>\n<tr>\n<td><strong>objek cakupan permintaan<\/strong><\/td>\n<td>KONFIGURASI<\/td>\n<\/tr>\n<tr>\n<td><strong>objek cakupan sesi<\/strong><\/td>\n<td>KONFIGURASI<\/td>\n<\/tr>\n<tr>\n<td><strong>Penggunaan memori sebelum dan sesudah permintaan<\/strong><\/td>\n<td>KONFIGURASI<\/td>\n<\/tr>\n<tr>\n<td><strong>Informasi transisi layar<\/strong><\/td>\n<td>INFORMASI<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\n<p>Yang terbaik adalah menggunakan level log sebagai berikut.<\/p>\n<ul>\n<li>FINE: Menampilkan log paling detail. Atur ini jika Anda ingin menganalisis permintaan HTTP secara detail.<\/li>\n<li>CONFIG... Menghasilkan log yang agak detail. Merupakan ide bagus untuk mempertahankannya pada level ini selama periode pengembangan.<\/li>\n<li>INFO: Hanya mengeluarkan informasi transisi layar.<\/li>\n<\/ul>\n<p><strong>\u25cfCara mengubah level log<\/strong><br \/>\nAnda dapat mengubah tingkat keluaran log dengan mengatur parameter inisialisasi logging.Level.<br \/>\ncontoh:<\/p>\n<pre class=\"sample_src\">   logging.Level INFORMASI\r\n<\/pre>\n\n<h2 class=\"common_title\"><a name=\"4\">Kode sumber<\/a><\/h2>\n<p><textarea readonly=\"readonly\" style=\"font-size: 13px;height: 400px;\" class=\"src\" onclick=\"this.focus();this.select()\">import java.io.IOException;<br \/>\nimport java.io.UnsupportedEncodingException;<br \/>\nimport java.sql.Time;<br \/>\nimport java.text.DecimalFormat;<br \/>\nimport java.text.SimpleDateFormat;<br \/>\nimport java.util.Date;<br \/>\nimport java.util.Enumeration;<br \/>\nimport java.util.Hashtable;<br \/>\nimport java.util.Iterator;<br \/>\nimport java.util.Map;<br \/>\nimport java.util.TreeMap;<br \/>\nimport java.util.logging.Formatter;<br \/>\nimport java.util.logging.Handler;<br \/>\nimport java.util.logging.Level;<br \/>\nimport java.util.logging.LogManager;<br \/>\nimport java.util.logging.LogRecord;<br \/>\nimport java.util.logging.Logger;<br \/>\nimport java.util.logging.StreamHandler;<\/p>\n<p>impor javax.servlet.Filter;<br \/>\nimpor javax.servlet.FilterChain;<br \/>\nimpor javax.servlet.FilterConfig;<br \/>\nimpor javax.servlet.ServletException;<br \/>\nimpor javax.servlet.ServletRequest;<br \/>\nimpor javax.servlet.ServletResponse;<br \/>\nimpor javax.servlet.http.Cookie;<br \/>\nimpor javax.servlet.http.HttpServletRequest;<br \/>\nimpor javax.servlet.http.HttpServletResponse;<br \/>\nimpor javax.servlet.http.HttpSession;<\/p>\n<p>\/**<br \/>\n * Terapkan javax.servlet.Filter untuk menganalisis konten permintaan HTTP dan log keluaran<br \/>\n * Kelas penyaring.<br \/>\n *\/<br \/>\nLogFilter kelas publik mengimplementasikan Filter {<\/p>\n<p>    logger logger statis pribadi =<br \/>\n        Logger.getLogger(LogFilter.kelas.getName());<br \/>\n    String akhir statis pribadi LINE_SEPA =<br \/>\n        System.getProperty(\u201cline.separator\u201d);<br \/>\n    String akhir statis pribadi NEXT_PAGE = \u201cLogFilter.NEXT_PAGE\u201d;<\/p>\n<p>    \/**<br \/>\n     * Inisialisasi filter log ini.<br \/>\n     * @param pemetaan<br \/>\n     *\/<br \/>\n    public void init(Pemetaan FilterConfig) {<br \/>\n        String str = pemetaan.getInitParameter(\u201clogging.Level\u201d);<br \/>\n        System.out.println(\u201cSetel level log ke \u201c+str+\u201d.\u201d);<br \/>\n        Tingkat tingkat = nol;<br \/>\n        mencoba {<br \/>\n            level = Level.parse(str);<br \/>\n        } tangkapan (Pengecualian e) {<br \/>\n            e.printStackTrace();<br \/>\n            level = Level.INFO;<br \/>\n        }<br \/>\n        LogManager.getLogManager().reset();<br \/>\n        Pengendali penangan = CustomConsoleHandler();<br \/>\n        handler.setFormatter(CustomFormatter());<br \/>\n        handler.setLevel(tingkat);<br \/>\n        logger.setLevel(tingkat);<br \/>\n        logger.getParent().addHandler(penangan);<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Ini adalah filter yang mengeluarkan log.<br \/>\n     * @param meminta permintaan HTTP sedang diproses<br \/>\n     * Respon @param Respon HTTP sedang dihasilkan<br \/>\n     * @rantai param<br \/>\n     *\/<br \/>\n    public void doFilter(ServletRequest _request, ServletResponse _response,<br \/>\n            Rantai FilterChain) menampilkan IOException, ServletException {<\/p>\n<p>        \/\/ --------------------&quot; Pemrosesan awal &quot;<br \/>\n        Permintaan HttpServletRequest = (HttpServletRequest) _permintaan;<br \/>\n        Respon HttpServletResponse = (HttpServletResponse) _response;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(<br \/>\n                \u201c============ Permintaan Mulai!!\u201d<br \/>\n                +\u201dID Rangkaian:\u201d<br \/>\n                + Utas.Benang Saat Ini().Kode Hash()<br \/>\n                + &#8221; ========================================================&#8221;);<br \/>\n        }<br \/>\n        \/\/ penggunaan memori<br \/>\n        String actionMemory = null;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            tindakanMemori = getMemoryInfo(\u201d \u201d<br \/>\n                    + Waktu baru(System.currentTimeMillis()) + \u201dPermintaan[sebelumnya]\u201d);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(&quot;Informasi Cookie&quot; + getCookieInfo(permintaan));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(&quot;Informasi header HTTP&quot; + getHeadersInfo(permintaan));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            penebang<br \/>\n                    .fine(&quot;Informasi lain HTTP&quot; + getRequestOtherInfo(permintaan));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            String reqlog = getRequestParametersInfo(permintaan);<br \/>\n            logger.config(&quot;Parameter permintaan HTTP&quot; + reqlog);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(&quot;objek cakupan permintaan&quot;<br \/>\n                    + getRequestAttributeInfo(permintaan));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            String sessionlog = getSessionInfo(permintaan,benar);<br \/>\n            logger.config(&quot;objek cakupan sesi (sebelum pemrosesan permintaan)&quot;<br \/>\n                    + log sesi);<br \/>\n        }<\/p>\n<p>        \/\/ panggil filter berikutnya<br \/>\n        chain.doFilter(permintaan, tanggapan);<\/p>\n<p>        \/\/ -------------------- &quot;Pengolahan pasca&quot;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            String sessionlog = getSessionInfo(permintaan,salah);<br \/>\n            logger.config(&quot;objek cakupan sesi (setelah pemrosesan permintaan)&quot;<br \/>\n                    + log sesi);<br \/>\n        }<br \/>\n        \/\/ penggunaan memori<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            actionMemory = \u201dPenggunaan memori sebelum dan sesudah permintaan\u201d+LINE_SEPA<br \/>\n                    + AksiMemori + LINE_SEPA<br \/>\n                    + getMemoryInfo(\u201d \u201d + Waktu baru(Sistem.currentTimeMillis())<br \/>\n                            + \u201dpermintaan[setelah]\u201d);<br \/>\n            logger.config(actionMemory+LINE_SEPA);<\/p>\n<p>        }<br \/>\n        \/\/ Informasi transisi layar<br \/>\n        if (logger.isLoggable(Level.INFO)) {<br \/>\n            String nextPage = (String) permintaan.getAttribute(NEXT_PAGE);<br \/>\n            if (Halaman berikutnya == null || Halaman berikutnya.panjang() == 0) {<br \/>\n                halaman berikutnya = permintaan.getRequestURI();<br \/>\n            }<br \/>\n            logger.info(\u201cNEXT_PAGE=[\u201d + Halaman berikutnya + \u201c], \u201d<br \/>\n                    + \u201cIP_ADDRESS=[\u201d + permintaan.getRemoteAddr() + \u201c], \u201d<br \/>\n                    + \u201cSESSION_ID=[\u201d + permintaan.getSession().getId() + \u201c], \u201d<br \/>\n                    + \u201cUSER-AGENT=[\u201d + request.getHeader(\u201cagen-pengguna\u201d) + \u201c]\u201d);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(<br \/>\n                \u201c============ Permintaan Berakhir!!\u201d<br \/>\n                +\u201dID Thread:\u201d+ Thread.currentThread().hashCode()<br \/>\n                + &#8221; =========================================================&#8221;<br \/>\n                +LINE_SEPA+LINE_SEPA);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     *<br \/>\n     *\/<br \/>\n    kekosongan publik menghancurkan() {<br \/>\n    }<\/p>\n<p>    \/\/ \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d Cara pribadi di bawah \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d<br \/>\n    private static String getMemoryInfo(String pesan) {<br \/>\n        DecimalFormat dFromat = DecimalFormat baru(\u201c#,###KB\u201d);<br \/>\n        bebas panjang = Runtime.getRuntime().freeMemory() \/ 1024;<br \/>\n        total panjang = Runtime.getRuntime().totalMemory() \/ 1024;<br \/>\n        long max = Runtime.getRuntime().maxMemory() \/ 1024;<br \/>\n        sudah lama digunakan = total \u2013 gratis;<br \/>\n        Pesan string = pesan + \u201d : \u201d + \u201ctotal=\u201d + dFromat.format(total) + \u201c, \u201d<br \/>\n                + \u201cJumlah yang terpakai=\u201d + dFromat.format(bekas) + \u201d (\u201c\u201d + (bekas * 100 \/ total)<br \/>\n                + \u201c%), maksimum yang tersedia=\u201d + dFromat.format(maks);<br \/>\n        membalas pesan;<br \/>\n    }<br \/>\n    \/**<br \/>\n     * Keluarkan semua header permintaan ke log.<br \/>\n     *\/<br \/>\n    String statis pribadi getHeadersInfo(permintaan HttpServletRequest) {<br \/>\n        Penggemar StringBuffer = StringBuffer baru(LINE_SEPA);<br \/>\n        Pencacahan headerNames = request.getHeaderNames();<br \/>\n        while (headerNames.hasMoreElements()) {<br \/>\n            String headerName = (String) headerNames.nextElement();<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(namaheader);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(request.getHeader(headerName));<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        kembalikan buff.toString();<br \/>\n    }<br \/>\n    String statis pribadi getCookieInfo(permintaan HttpServletRequest) {<br \/>\n        StringBuffer buff = StringBuffer baru();<br \/>\n        Kue[] kue = permintaan.getCookies();<br \/>\n        if (cookie == null) {<br \/>\n            kembali &quot;&quot;;<br \/>\n        }<br \/>\n        for (int i = 0; i &lt; cookie.panjang; i++) {<br \/>\n            buff.append(\u201c\\n \u2014 Kue[\u201d + i + \u201c] \u2014\\n\u201d);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(cookie[i].getName());<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getValue());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetVersion()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getVersion());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetComment()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getComment());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetDomain()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getDomain());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetMaxAge()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getMaxAge());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetPath()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getPath());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetSecure()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getSecure());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        kembalikan buff.toString();<br \/>\n    }<br \/>\n    String statis pribadi getRequestParametersInfo(permintaan HttpServletRequest) {<br \/>\n        Penggemar StringBuffer = StringBuffer baru(LINE_SEPA);<br \/>\n        Peta peta = convertRequest(permintaan);<br \/>\n        TreeMap trr = Peta Pohon baru(peta);<br \/>\n        Iterator itr = trr.keySet().iterator();<br \/>\n        while (itr.hasNext()) {<br \/>\n            Kunci string = (String) itr.next();<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(kunci);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            Nilai objek = map.get(key);<br \/>\n            Nilai string[] = nilai (String[]);<br \/>\n            if (nilai.panjang == 1) {<br \/>\n                buff.append(nilai[0]);<br \/>\n            } kalau tidak {<br \/>\n                \/\/ Array string dikonversi<br \/>\n                String strValue = lapisan(nilai);<br \/>\n                buff.append(strValue);<br \/>\n            }<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        kembalikan buff.toString();<br \/>\n    }<br \/>\n    String statis pribadi getRequestAttributeInfo(permintaan HttpServletRequest) {<br \/>\n        Penggemar StringBuffer = StringBuffer baru(LINE_SEPA);<br \/>\n        Pencacahan e = request.getAttributeNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            Nama string = (String) e.nextElement();<br \/>\n            buff.append(\u201d nama=\u201d + nama + \u201c, kelas atribut= \u201d<br \/>\n                    + permintaan.getAttribute(nama).getClass().getName()<br \/>\n                    + \u201c, toString() = \u201d + permintaan.getAttribute(nama)<br \/>\n                    + LINE_SEPA);<br \/>\n        }<br \/>\n        kembalikan buff.toString();<br \/>\n    }<br \/>\n    String statis pribadi getRequestOtherInfo(permintaan HttpServletRequest) {<br \/>\n        StringBuffer buff = StringBuffer baru();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetCharacterEncoding()=\u201d);<br \/>\n        buff.append(request.getCharacterEncoding());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetContentLength()=\u201d);<br \/>\n        buff.append(request.getContentLength());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetContentType()=\u201d);<br \/>\n        buff.append(request.getContentType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetLocale()=\u201d);<br \/>\n        buff.append(request.getLocale());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetProtocol()=\u201d);<br \/>\n        buff.append(request.getProtocol());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRemoteAddr()=\u201d);<br \/>\n        buff.append(request.getRemoteAddr());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRemoteHost()=\u201d);<br \/>\n        buff.append(request.getRemoteHost());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetScheme()=\u201d);<br \/>\n        buff.append(request.getScheme());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetServerName()=\u201d);<br \/>\n        buff.append(permintaan.getServerName());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetServerPort()=\u201d);<br \/>\n        buff.append(request.getServerPort());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disSecure()=\u201d);<br \/>\n        buff.append(permintaan.isSecure());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetAuthType()=\u201d);<br \/>\n        buff.append(request.getAuthType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetContextPath()=\u201d);<br \/>\n        buff.append(request.getContextPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetMethod()=\u201d);<br \/>\n        buff.append(request.getMethod());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetPathInfo()=\u201d);<br \/>\n        buff.append(request.getPathInfo());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetPathTranslated()=\u201d);<br \/>\n        buff.append(request.getPathTranslated());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetQueryString()=\u201d);<br \/>\n        buff.append(request.getQueryString());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRemoteUser()=\u201d);<br \/>\n        buff.append(request.getRemoteUser());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRequestedSessionId()=\u201d);<br \/>\n        buff.append(request.getRequestedSessionId());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRequestURI()=\u201d);<br \/>\n        buff.append(request.getRequestURI());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetServletPath()=\u201d);<br \/>\n        buff.append(request.getServletPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetUserPrincipal()=\u201d);<br \/>\n        buff.append(request.getUserPrincipal());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disRequestedSessionIdFromCookie()=\u201d);<br \/>\n        buff.append(request.isRequestedSessionIdFromCookie());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disRequestedSessionIdFromURL()=\u201d);<br \/>\n        buff.append(request.isRequestedSessionIdFromURL());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disRequestedSessionIdValid()=\u201d);<br \/>\n        buff.append(request.isRequestedSessionIdValid());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        kembalikan buff.toString();<br \/>\n    }<\/p>\n<p>    private static String getSessionInfo(permintaan HttpServletRequest,boolean sebelumnya) {<br \/>\n        Sesi HttpSession = request.getSession();<br \/>\n        StringBuffer buff = StringBuffer baru();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        jika (sebelum) {<br \/>\n            buff.append(\u201d session.isNew() = \u201d + session.isNew());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d session.getId() = \u201d + session.getId());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        Pencacahan e = session.getAttributeNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            String sessionName = (String) e.nextElement();<br \/>\n            String sessionClassName = sesi.getAttribute(sessionName)<br \/>\n                    .getClass().getName();<br \/>\n            buff.append(\u201d nama =\u201d + nama sesi + \u201c, nilai =\u201d<br \/>\n                    + session.getAttribute(sessionName) + \u201c, atributKelas = \u201d<br \/>\n                    + sessionClassName+LINE_SEPA);<br \/>\n        }<br \/>\n        kembalikan buff.toString();<br \/>\n    }<\/p>\n<p>    private static Hashtable convertRequest(permintaan HttpServletRequest) {<br \/>\n        tempHash tabel hash = Hashtable baru();<br \/>\n        Pencacahan e = request.getParameterNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            Kunci string = (String) e.nextElement();<br \/>\n            String[] nilai = permintaan.getParameterValues(kunci);<br \/>\n            String[] parameterValues = String[nilai.panjang] baru;<br \/>\n            for (int i = 0; i &lt; nilai.panjang; i++) {<br \/>\n                parameterValues[i] = convUnicode(nilai[i]);<br \/>\n            }<br \/>\n            tempHash.put(kunci, parameterValues);<br \/>\n        }<br \/>\n        kembalikan tempHash;<\/p>\n<p>    }<br \/>\n    lapisan String statis pribadi (Nilai objek) {<br \/>\n        jika (nilai == nol) {<br \/>\n            kembalikan \u201cnol\u201d;<br \/>\n        } else if (nilai instance dari String[]) {<br \/>\n            mengembalikan nilai convString((String[]));<br \/>\n        } kalau tidak {<br \/>\n            mengembalikan nilai.toString();<br \/>\n        }<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Mengembalikan isi array string [strArray] sebagai String seperti di bawah ini.<br \/>\n     * \u201c[temp1,temp2,temp3]\u201d<br \/>\n     * @param strArray Array string yang akan dievaluasi<br \/>\n     * @return String setelah konversi<br \/>\n     *\/<br \/>\n    pribadi statis String convString(String[] strArray) {<br \/>\n        jika (strArray == nol)<br \/>\n            kembalikan nol;<br \/>\n        Penggemar StringBuffer = StringBuffer baru(\u201c[\u201c);<br \/>\n        for (int i = 0; i &lt; strArray.panjang; i++) {<br \/>\n            buff.append(strArray[i] + \u201c, \u201c);<br \/>\n        }<br \/>\n        buff.delete(buff.panjang() \u2013 2, buff.panjang());<br \/>\n        buff.append(\u201c]\u201d);<br \/>\n        kembalikan buff.toString();<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Konversikan [str] ke Unicode.<br \/>\n     * @param str<br \/>\n     * @kembali<br \/>\n     *\/<br \/>\n    konvUnicode String statis pribadi(String str) {<br \/>\n        jika (str == nol)<br \/>\n            kembalikan nol;<br \/>\n        mencoba {<br \/>\n            kembalikan String baru(str.getBytes(\u201c8859_1\u201d), \u201cJISAutoDetect\u201d);<br \/>\n        } tangkapan (Tidak DidukungEncodingException e) {<br \/>\n            melempar RuntimeException(e);<br \/>\n        }<br \/>\n    }<br \/>\n    \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n    kelas statis CustomFormatter memperluas Formatter {<br \/>\n        pola String akhir statis = \u201cyyyy\/MM\/dd HH:mm:ss\u201d;<br \/>\n        format String tersinkronisasi publik (catatan LogRecord) {<br \/>\n            StringBuffer buf = StringBuffer baru();<br \/>\n            \/\/ atur tanggal dan waktu<br \/>\n            Tanggal tanggal = Tanggal baru();<br \/>\n            tanggal.setTime(record.getMillis());<br \/>\n            Pemformat SimpleDateFormat = SimpleDateFormat baru(pola);<br \/>\n            buf.append(formatter.format(tanggal));<br \/>\n            buf.tambahkan(\u201c:\u201d);<br \/>\n            \/\/ atur tingkat<br \/>\n            buf.append(\u201c[\u201d + catatan.getLevel().getName() + \u201c]\u201d);<br \/>\n            buf.tambahkan(\u201c:\u201d);<br \/>\n            buf.append(record.getMessage());<br \/>\n            buf.append(LINE_SEPA);<br \/>\n            kembalikan buf.toString();<br \/>\n        }<br \/>\n    }<br \/>\n    kelas statis CustomConsoleHandler memperluas StreamHandler {<br \/>\n        publik CustomConsoleHandler() {<br \/>\n            super();<br \/>\n            setOutputStream(Sistem.keluar);<br \/>\n        }<br \/>\n        \/**<br \/>\n         * Mengeluarkan Catatan Log.<br \/>\n         * Awalnya, permintaan logging dikirim ke objek Logger.<br \/>\n         * dan objek ini menginisialisasi LogRecord dan<br \/>\n         *Dialihkan ke sini.<br \/>\n         *<br \/>\n         * @param record Deskripsi peristiwa log. catatan null diabaikan begitu saja<br \/>\n         * dan tidak ada pemberitahuan yang akan dikirim.<br \/>\n         *\/<br \/>\n        publikasi kekosongan publik (catatan LogRecord) {<br \/>\n            super.publish(catatan);<br \/>\n            menyiram();<br \/>\n        }<br \/>\n        \/**<br \/>\n         * Ganti StreamHandler.close untuk menyiram, tapi<br \/>\n         * Aliran keluaran tidak ditutup. Dengan kata lain, System.err tidak ditutup.<br \/>\n         *\/<br \/>\n        kekosongan publik tutup() {<br \/>\n            menyiram();<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n<\/textarea><\/p>","protected":false},"excerpt":{"rendered":"<p>Analisis permintaan HTTP dengan filter log Java Implementasikan javax.servlet.Filter untuk menganalisis permintaan HTTP [\u2026]<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":""},"categories":[19],"tags":[],"_links":{"self":[{"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/posts\/910"}],"collection":[{"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/comments?post=910"}],"version-history":[{"count":5,"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/posts\/910\/revisions"}],"predecessor-version":[{"id":1894,"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/posts\/910\/revisions\/1894"}],"wp:attachment":[{"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/media?parent=910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/categories?post=910"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chat-messenger.com\/id\/wp-json\/wp\/v2\/tags?post=910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}