{"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-%e6%97%a5%e5%bf%97%e8%bf%87%e6%bb%a4%e5%99%a8","status":"publish","type":"post","link":"https:\/\/chat-messenger.com\/zh\/blog\/java\/http-log-filter","title":{"rendered":"\u4f7f\u7528 Java \u65e5\u5fd7\u8fc7\u6ee4\u5668\u89e3\u6790 HTTP"},"content":{"rendered":"<h2 class=\"common_title\"><a name=\"0\">Java \u30ed\u30b0\u30d5\u30a3\u30eb\u30bf\u3067HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u89e3\u6790<\/a><\/h2>\n<p>\n<strong>javax.servlet.Filter<\/strong>\u3092\u5b9f\u88c5\u3057\u3066HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5185\u5bb9\u3092\u89e3\u6790\u3057\u3066\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u4fbf\u5229\u306a<strong>Filter<\/strong>\u30af\u30e9\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<br \/>\n<br \/>\n\u3053\u306e\u30ed\u30b0\u30d5\u30a3\u30eb\u30bf\u306f\u3001\u30ed\u30b0\u51fa\u529b\u306b\u300cjava.util.logging.Logger\u300d\u3092\u4f7f\u7528\u3057\u3066\u304a\u308a\u3001\u30ed\u30b0\u30ec\u30d9\u30eb\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3067\u51fa\u529b\u3059\u308b\u60c5\u5831\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u3002\n<\/p>\n<h2 class=\"common_title\"><a name=\"1\">javax.servlet.Filter\u3068\u306f<\/a><\/h2>\n<p>\nWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u69cb\u7bc9\u3059\u308b\u4e0a\u3067\u3001\u30e1\u30a4\u30f3\u3068\u306a\u308b\u696d\u52d9\u51e6\u7406\u306e\u307b\u304b\u306b\u3001\u305d\u306e\u524d\u5f8c\u3067\u5171\u901a\u3057\u305f\u526f\u6b21\u7684\u306a\u51e6\u7406\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\n\u4f8b\u3048\u3070\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8a8d\u8a3c\u3084\u3001\u6a29\u9650\u30c1\u30a7\u30c3\u30af\u3001\u30ed\u30ae\u30f3\u30b0\u7b49\u3067\u3059\u3002<br \/>\n\u3053\u306e\u3088\u3046\u306a\u526f\u6b21\u7684\u306a\u51e6\u7406\u3092\u305d\u308c\u305e\u308c\u306e\u30ea\u30bd\u30fc\u30b9\u3067\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3059\u308b\u3068\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u4fdd\u5b88\u6027\u3092\u59a8\u3052\u308b\u5927\u304d\u306a\u539f\u56e0\u3068\u306a\u308a\u3001\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306e\u3057\u306b\u304f\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3059\u3002<\/p>\n<p>javax.servlet.Filter\u3092\u5b9f\u88c5\u3059\u308c\u3070\u3001\u30ea\u30af\u30a8\u30b9\u304c\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u30af\u30e9\u30b9\u306b\u6e21\u3055\u308c\u308b\u524d\u306b\u3001\u3053\u306e\u526f\u6b21\u7684\u306a\u51e6\u7406\u3092\u3001\u5171\u901a\u3057\u3066\u5b9f\u884c\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br \/>\n\u307e\u305f\u30d5\u30a3\u30eb\u30bf\u306e\u8a2d\u5b9a\u306fweb.xml\u3067\u51fa\u6765\u308b\u306e\u3067\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u30d5\u30a3\u30eb\u30bf\u3092\u8ffd\u52a0\u3057\u305f\u308a\u524a\u9664\u3059\u308b\u3053\u3068\u304c\u67d4\u8edf\u306b\u51fa\u6765\u307e\u3059\u3002\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\">\u30ed\u30b0\u30d5\u30a3\u30eb\u30bf\u3092\u4f7f\u3063\u3066\u307f\u308b<\/a><\/h2>\n<p>HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u30d5\u30a3\u30eb\u30bf\u3092\u901a\u3057\u3066\u3001HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u89e3\u6790\u3059\u308b\u30ed\u30b0\u30d5\u30a3\u30eb\u30bf\u3092\u5b9f\u969b\u306b\u4f7f\u3063\u3066\u307f\u307e\u3057\u3087\u3046\u3002<br \/>\n\u4eca\u56de\u306f<a href=\"http:\/\/tomcat.apache.org\/\" target=\"_blank\">Tomcat<\/a>\u306b\u6700\u521d\u304b\u3089\u3042\u308bexamples\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<br \/>\n\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u884c\u3046\u3068\u3053\u306e\u30d5\u30a3\u30eb\u30bf\u306f\u3059\u3050\u306b\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"point\">\n1.<a href=\"#4\"><strong>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/strong><\/a>\u3092\u53d6\u5f97\u3057\u3066\u30b3\u30f3\u30d1\u30a4\u30eb\u3059\u308b\u3002<br \/>\n2.\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u305f\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u3001\u300c\/examples\/WEB-INF\/classes\u300d\u914d\u4e0b\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002<br \/>\n3.web.xml\u306b\u4ee5\u4e0b\u306e\u5b9a\u7fa9\u3092\u8a2d\u5b9a\u3059\u308b\u3002\n<\/div>\n<pre class=\"sample_src\">  &lt;filter&gt;\r\n   &lt;filter-name&gt;LogFilter&lt;\/filter-name&gt;\r\n   &lt;filter-class&gt;LogFilter&lt;\/filter-class&gt;\r\n   &lt;init-param&gt;\r\n    &lt;param-name&gt;logging.Level&lt;\/param-name&gt;\r\n    &lt;param-value&gt;FINE&lt;\/param-value&gt;\r\n   &lt;\/init-param&gt;\r\n  &lt;\/filter&gt;\r\n  &lt;filter-mapping&gt; \r\n   &lt;filter-name&gt;LogFilter&lt;\/filter-name&gt;\r\n   &lt;url-pattern&gt;\/*&lt;\/url-pattern&gt;\r\n  &lt;\/filter-mapping&gt;\r\n<\/pre>\n<p>\u203bStruts\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\u306eurl-pattern\u306f\u4ee5\u4e0b\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"sample_src\">   &lt;url-pattern&gt;*.do&lt;\/url-pattern&gt;\r\n<\/pre>\n<p>\nSessions Example\u306e\u753b\u9762\u3092\u5b9f\u884c\u3057\u305f\u30ed\u30b0\u51fa\u529b\u7d50\u679c\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\n<img decoding=\"async\" src=\"https:\/\/chat-messenger.com\/images\/SessionsExample.jpg\" alt=\"javax.servlet.Filter\u30ed\u30b0\u30d5\u30a3\u30eb\u30bf\u3067Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u89e3\u6790\" border=\"0\"><br \/>\n<br clear=\"all\"><\/p>\n<h2 class=\"common_title\"><a name=\"3\">\u51fa\u529b\u3059\u308b\u30ed\u30b0\u60c5\u5831\u3068\u30ed\u30b0\u30ec\u30d9\u30eb<\/a><\/h2>\n<p><strong>\u25cf\u30ed\u30b0\u51fa\u529b\u5185\u5bb9<\/strong><\/p>\n<table border=\"1\">\n<tbody>\n<tr bgcolor=\"#FFFF80\">\n<th>\u30ed\u30b0\u60c5\u5831<\/th>\n<th>\u30ed\u30b0\u30ec\u30d9\u30eb<\/th>\n<\/tr>\n<tr>\n<td><strong>Cookie\u60c5\u5831<\/strong><\/td>\n<td>FINE<\/td>\n<\/tr>\n<tr>\n<td><strong>HTTP\u30d8\u30c3\u30c0\u60c5\u5831<\/strong><\/td>\n<td>FINE<\/td>\n<\/tr>\n<tr>\n<td><strong>HTTP\u305d\u306e\u4ed6\u306e\u60c5\u5831<\/strong><\/td>\n<td>FINE<\/td>\n<\/tr>\n<tr>\n<td><strong>HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf<\/strong><\/td>\n<td>CONFIG<\/td>\n<\/tr>\n<tr>\n<td><strong>request\u30b9\u30b3\u30fc\u30d7\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/strong><\/td>\n<td>CONFIG<\/td>\n<\/tr>\n<tr>\n<td><strong>session\u30b9\u30b3\u30fc\u30d7\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/strong><\/td>\n<td>CONFIG<\/td>\n<\/tr>\n<tr>\n<td><strong>\u30ea\u30af\u30a8\u30b9\u30c8\u524d\u5f8c\u306e\u30e1\u30e2\u30ea\u30fc\u4f7f\u7528\u91cf<\/strong><\/td>\n<td>CONFIG<\/td>\n<\/tr>\n<tr>\n<td><strong>\u753b\u9762\u9077\u79fb\u60c5\u5831<\/strong><\/td>\n<td>INFO<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\n<p>\u30ed\u30b0\u30ec\u30d9\u30eb\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f7f\u3044\u5206\u3051\u308b\u3068\u826f\u3044\u3067\u3057\u3087\u3046\u3002<\/p>\n<ul>\n<li>FINE\u30fb\u30fb\u30fb\u3082\u3063\u3068\u3082\u8a73\u7d30\u306a\u30ed\u30b0\u3092\u51fa\u529b\u3057\u307e\u3059\u3002HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u8a73\u3057\u304f\u89e3\u6790\u3057\u305f\u3044\u5834\u5408\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/li>\n<li>CONFIG\u30fb\u30fb\u30fb\u3084\u3084\u8a73\u7d30\u306a\u30ed\u30b0\u3092\u51fa\u529b\u3057\u307e\u3059\u3002\u958b\u767a\u671f\u9593\u4e2d\u306f\u3053\u306e\u30ec\u30d9\u30eb\u306b\u3057\u3066\u3044\u308b\u3068\u3088\u3044\u3067\u3057\u3087\u3046\u3002<\/li>\n<li>INFO\u30fb\u30fb\u30fb\u30fb\u753b\u9762\u9077\u79fb\u60c5\u5831\u306e\u307f\u3092\u51fa\u529b\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<p><strong>\u25cf\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u5909\u66f4\u65b9\u6cd5<\/strong><br \/>\n\u521d\u671f\u5316\u30d1\u30e9\u30e1\u30fc\u30bflogging.Level\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u30ed\u30b0\u306e\u51fa\u529b\u30ec\u30d9\u30eb\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u3002<br \/>\n\u4f8b\uff1a<\/p>\n<pre class=\"sample_src\">   &lt;init-param&gt;\r\n    &lt;param-name&gt;logging.Level&lt;\/param-name&gt;\r\n    &lt;param-value&gt;INFO&lt;\/param-value&gt;\r\n   &lt;\/init-param&gt;\r\n<\/pre>\n\n<h2 class=\"common_title\"><a name=\"4\">\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/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>import javax.servlet.Filter;<br \/>\nimport javax.servlet.FilterChain;<br \/>\nimport javax.servlet.FilterConfig;<br \/>\nimport javax.servlet.ServletException;<br \/>\nimport javax.servlet.ServletRequest;<br \/>\nimport javax.servlet.ServletResponse;<br \/>\nimport javax.servlet.http.Cookie;<br \/>\nimport javax.servlet.http.HttpServletRequest;<br \/>\nimport javax.servlet.http.HttpServletResponse;<br \/>\nimport javax.servlet.http.HttpSession;<\/p>\n<p>\/**<br \/>\n * javax.servlet.Filter\u3092\u5b9f\u88c5\u3057\u3066HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5185\u5bb9\u3092\u89e3\u6790\u3057\u3066\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b<br \/>\n * Filter\u30af\u30e9\u30b9\u3002<br \/>\n *\/<br \/>\npublic class LogFilter implements Filter {<\/p>\n<p>    private static Logger logger =<br \/>\n        Logger.getLogger(LogFilter.class.getName());<br \/>\n    private static final String LINE_SEPA =<br \/>\n        System.getProperty(&#8220;line.separator&#8221;);<br \/>\n    private static final String NEXT_PAGE = &#8220;LogFilter.NEXT_PAGE&#8221;;<\/p>\n<p>    \/**<br \/>\n     * \u3053\u306e\u30ed\u30b0\u30d5\u30a3\u30eb\u30bf\u3092\u521d\u671f\u5316\u3057\u307e\u3059\u3002<br \/>\n     * @param mapping<br \/>\n     *\/<br \/>\n    public void init(FilterConfig mapping) {<br \/>\n        String str = mapping.getInitParameter(&#8220;logging.Level&#8221;);<br \/>\n        System.out.println(&#8220;\u30ed\u30b0\u30ec\u30d9\u30eb\u3092&#8221;+str+&#8221;\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002&#8221;);<br \/>\n        Level level = null;<br \/>\n        try {<br \/>\n            level = Level.parse(str);<br \/>\n        } catch (Exception e) {<br \/>\n            e.printStackTrace();<br \/>\n            level = Level.INFO;<br \/>\n        }<br \/>\n        LogManager.getLogManager().reset();<br \/>\n        Handler handler = new CustomConsoleHandler();<br \/>\n        handler.setFormatter(new CustomFormatter());<br \/>\n        handler.setLevel(level);<br \/>\n        logger.setLevel(level);<br \/>\n        logger.getParent().addHandler(handler);<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * \u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u30d5\u30a3\u30eb\u30bf\u3067\u3059\u3002<br \/>\n     * @param request \u51e6\u7406\u3057\u3066\u3044\u308bHTTP\u30ea\u30af\u30a8\u30b9\u30c8<br \/>\n     * @param response \u751f\u6210\u4e2d\u306eHTTP\u30ec\u30b9\u30dd\u30f3\u30b9<br \/>\n     * @param chain<br \/>\n     *\/<br \/>\n    public void doFilter(ServletRequest _request, ServletResponse _response,<br \/>\n            FilterChain chain) throws IOException, ServletException {<\/p>\n<p>        \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\u300e \u524d\u51e6\u7406 \u300f<br \/>\n        HttpServletRequest request = (HttpServletRequest) _request;<br \/>\n        HttpServletResponse response = (HttpServletResponse) _response;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(<br \/>\n                &#8220;============ Request Start !! &#8221;<br \/>\n                +&#8221;Thread ID:&#8221;<br \/>\n                + Thread.currentThread().hashCode()<br \/>\n                + &#8221; ========================================================&#8221;);<br \/>\n        }<br \/>\n        \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf<br \/>\n        String actionMemory = null;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            actionMemory = getMemoryInfo(&#8221; &#8221;<br \/>\n                    + new Time(System.currentTimeMillis()) + &#8221; \u30ea\u30af\u30a8\u30b9\u30c8[\u524d]&#8221;);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(&#8220;Cookie\u60c5\u5831&#8221; + getCookieInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(&#8220;HTTP\u30d8\u30c3\u30c0\u60c5\u5831&#8221; + getHeadersInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger<br \/>\n                    .fine(&#8220;HTTP\u305d\u306e\u4ed6\u306e\u60c5\u5831&#8221; + getRequestOtherInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            String reqlog = getRequestParametersInfo(request);<br \/>\n            logger.config(&#8220;HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf&#8221; + reqlog);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(&#8220;request\u30b9\u30b3\u30fc\u30d7\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8&#8221;<br \/>\n                    + getRequestAttributeInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            String sessionlog = getSessionInfo(request,true);<br \/>\n            logger.config(&#8220;session\u30b9\u30b3\u30fc\u30d7\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8(\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u524d)&#8221;<br \/>\n                    + sessionlog);<br \/>\n        }<\/p>\n<p>        \/\/ \u6b21\u306e\u30d5\u30a3\u30eb\u30bf\u3092\u547c\u3073\u51fa\u3057<br \/>\n        chain.doFilter(request, response);<\/p>\n<p>        \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\u300e \u5f8c\u51e6\u7406 \u300f<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            String sessionlog = getSessionInfo(request,false);<br \/>\n            logger.config(&#8220;session\u30b9\u30b3\u30fc\u30d7\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8(\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u5f8c)&#8221;<br \/>\n                    + sessionlog);<br \/>\n        }<br \/>\n        \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            actionMemory = &#8221; \u30ea\u30af\u30a8\u30b9\u30c8\u524d\u5f8c\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf&#8221;+LINE_SEPA<br \/>\n                    + actionMemory + LINE_SEPA<br \/>\n                    + getMemoryInfo(&#8221; &#8221; + new Time(System.currentTimeMillis())<br \/>\n                            + &#8221; \u30ea\u30af\u30a8\u30b9\u30c8[\u5f8c]&#8221;);<br \/>\n            logger.config(actionMemory+LINE_SEPA);<\/p>\n<p>        }<br \/>\n        \/\/ \u753b\u9762\u9077\u79fb\u60c5\u5831<br \/>\n        if (logger.isLoggable(Level.INFO)) {<br \/>\n            String nextPage = (String) request.getAttribute(NEXT_PAGE);<br \/>\n            if (nextPage == null || nextPage.length() == 0) {<br \/>\n                nextPage = request.getRequestURI();<br \/>\n            }<br \/>\n            logger.info(&#8220;NEXT_PAGE=[&#8221; + nextPage + &#8220;], &#8221;<br \/>\n                    + &#8220;IP_ADDRESS=[&#8221; + request.getRemoteAddr() + &#8220;], &#8221;<br \/>\n                    + &#8220;SESSION_ID=[&#8221; + request.getSession().getId() + &#8220;], &#8221;<br \/>\n                    + &#8220;USER-AGENT=[&#8221; + request.getHeader(&#8220;user-agent&#8221;) + &#8220;]&#8221;);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(<br \/>\n                &#8220;============ Request End  !! &#8221;<br \/>\n                +&#8221;Thread ID:&#8221;+ 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    public void destroy() {<br \/>\n    }<\/p>\n<p>    \/\/ \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\u3000\u4ee5\u4e0b\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30e1\u30bd\u30c3\u30c9\u3000\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d<br \/>\n    private static String getMemoryInfo(String message) {<br \/>\n        DecimalFormat dFromat = new DecimalFormat(&#8220;#,###KB&#8221;);<br \/>\n        long free = Runtime.getRuntime().freeMemory() \/ 1024;<br \/>\n        long total = Runtime.getRuntime().totalMemory() \/ 1024;<br \/>\n        long max = Runtime.getRuntime().maxMemory() \/ 1024;<br \/>\n        long used = total &#8211; free;<br \/>\n        String msg = message + &#8221;  : &#8221; + &#8220;\u5408\u8a08=&#8221; + dFromat.format(total) + &#8220;, &#8221;<br \/>\n                + &#8220;\u4f7f\u7528\u91cf=&#8221; + dFromat.format(used) + &#8221; (&#8221; + (used * 100 \/ total)<br \/>\n                + &#8220;%), \u4f7f\u7528\u53ef\u80fd\u6700\u5927=&#8221; + dFromat.format(max);<br \/>\n        return msg;<br \/>\n    }<br \/>\n    \/**<br \/>\n     * \u30ea\u30af\u30a8\u30b9\u30c8\u30d8\u30c3\u30c0\u3092\u3059\u3079\u3066\u30ed\u30b0\u306b\u51fa\u529b\u3059\u308b\u3002<br \/>\n     *\/<br \/>\n    private static String getHeadersInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer(LINE_SEPA);<br \/>\n        Enumeration headerNames = request.getHeaderNames();<br \/>\n        while (headerNames.hasMoreElements()) {<br \/>\n            String headerName = (String) headerNames.nextElement();<br \/>\n            buff.append(&#8221;    &#8220;);<br \/>\n            buff.append(headerName);<br \/>\n            buff.append(&#8220;=&#8221;);<br \/>\n            buff.append(request.getHeader(headerName));<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    private static String getCookieInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer();<br \/>\n        Cookie[] cookies = request.getCookies();<br \/>\n        if (cookies == null) {<br \/>\n            return &#8220;&#8221;;<br \/>\n        }<br \/>\n        for (int i = 0; i &lt; cookies.length; i++) {<br \/>\n            buff.append(&#8220;\\n  &#8212; Cookie[&#8221; + i + &#8220;] &#8212;\\n&#8221;);<br \/>\n            buff.append(&#8221;    &#8220;);<br \/>\n            buff.append(cookies[i].getName());<br \/>\n            buff.append(&#8220;=&#8221;);<br \/>\n            buff.append(cookies[i].getValue());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&#8221;    &#8220;);<br \/>\n            buff.append(&#8220;getVersion()&#8221;);<br \/>\n            buff.append(&#8220;=&#8221;);<br \/>\n            buff.append(cookies[i].getVersion());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&#8221;    &#8220;);<br \/>\n            buff.append(&#8220;getComment()&#8221;);<br \/>\n            buff.append(&#8220;=&#8221;);<br \/>\n            buff.append(cookies[i].getComment());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&#8221;    &#8220;);<br \/>\n            buff.append(&#8220;getDomain()&#8221;);<br \/>\n            buff.append(&#8220;=&#8221;);<br \/>\n            buff.append(cookies[i].getDomain());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&#8221;    &#8220;);<br \/>\n            buff.append(&#8220;getMaxAge()&#8221;);<br \/>\n            buff.append(&#8220;=&#8221;);<br \/>\n            buff.append(cookies[i].getMaxAge());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&#8221;    &#8220;);<br \/>\n            buff.append(&#8220;getPath()&#8221;);<br \/>\n            buff.append(&#8220;=&#8221;);<br \/>\n            buff.append(cookies[i].getPath());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&#8221;    &#8220;);<br \/>\n            buff.append(&#8220;getSecure()&#8221;);<br \/>\n            buff.append(&#8220;=&#8221;);<br \/>\n            buff.append(cookies[i].getSecure());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    private static String getRequestParametersInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer(LINE_SEPA);<br \/>\n        Map map = convertRequest(request);<br \/>\n        TreeMap trr = new TreeMap(map);<br \/>\n        Iterator itr = trr.keySet().iterator();<br \/>\n        while (itr.hasNext()) {<br \/>\n            String key = (String) itr.next();<br \/>\n            buff.append(&#8221;    &#8220;);<br \/>\n            buff.append(key);<br \/>\n            buff.append(&#8220;=&#8221;);<br \/>\n            Object value = map.get(key);<br \/>\n            String[] values = (String[]) value;<br \/>\n            if (values.length == 1) {<br \/>\n                buff.append(values[0]);<br \/>\n            } else {<br \/>\n                \/\/ String \u914d\u5217\u306f\u5909\u63db\u3059\u308b<br \/>\n                String strValue = stratum(values);<br \/>\n                buff.append(strValue);<br \/>\n            }<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    private static String getRequestAttributeInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer(LINE_SEPA);<br \/>\n        Enumeration e = request.getAttributeNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            String name = (String) e.nextElement();<br \/>\n            buff.append(&#8221;    name=&#8221; + name + &#8220;, attributeClass= &#8221;<br \/>\n                    + request.getAttribute(name).getClass().getName()<br \/>\n                    + &#8220;, toString() = &#8221; + request.getAttribute(name)<br \/>\n                    + LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    private static String getRequestOtherInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getCharacterEncoding()=&#8221;);<br \/>\n        buff.append(request.getCharacterEncoding());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getContentLength()=&#8221;);<br \/>\n        buff.append(request.getContentLength());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getContentType()=&#8221;);<br \/>\n        buff.append(request.getContentType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getLocale()=&#8221;);<br \/>\n        buff.append(request.getLocale());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getProtocol()=&#8221;);<br \/>\n        buff.append(request.getProtocol());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getRemoteAddr()=&#8221;);<br \/>\n        buff.append(request.getRemoteAddr());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getRemoteHost()=&#8221;);<br \/>\n        buff.append(request.getRemoteHost());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getScheme()=&#8221;);<br \/>\n        buff.append(request.getScheme());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getServerName()=&#8221;);<br \/>\n        buff.append(request.getServerName());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getServerPort()=&#8221;);<br \/>\n        buff.append(request.getServerPort());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    isSecure()=&#8221;);<br \/>\n        buff.append(request.isSecure());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getAuthType()=&#8221;);<br \/>\n        buff.append(request.getAuthType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getContextPath()=&#8221;);<br \/>\n        buff.append(request.getContextPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getMethod()=&#8221;);<br \/>\n        buff.append(request.getMethod());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getPathInfo()=&#8221;);<br \/>\n        buff.append(request.getPathInfo());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getPathTranslated()=&#8221;);<br \/>\n        buff.append(request.getPathTranslated());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getQueryString()=&#8221;);<br \/>\n        buff.append(request.getQueryString());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getRemoteUser()=&#8221;);<br \/>\n        buff.append(request.getRemoteUser());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getRequestedSessionId()=&#8221;);<br \/>\n        buff.append(request.getRequestedSessionId());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getRequestURI()=&#8221;);<br \/>\n        buff.append(request.getRequestURI());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getServletPath()=&#8221;);<br \/>\n        buff.append(request.getServletPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    getUserPrincipal()=&#8221;);<br \/>\n        buff.append(request.getUserPrincipal());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    isRequestedSessionIdFromCookie()=&#8221;);<br \/>\n        buff.append(request.isRequestedSessionIdFromCookie());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    isRequestedSessionIdFromURL()=&#8221;);<br \/>\n        buff.append(request.isRequestedSessionIdFromURL());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(&#8221;    isRequestedSessionIdValid()=&#8221;);<br \/>\n        buff.append(request.isRequestedSessionIdValid());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        return buff.toString();<br \/>\n    }<\/p>\n<p>    private static String getSessionInfo(HttpServletRequest request,boolean before) {<br \/>\n        HttpSession session = request.getSession();<br \/>\n        StringBuffer buff = new StringBuffer();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        if (before) {<br \/>\n            buff.append(&#8221;    session.isNew() = &#8221; + session.isNew());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&#8221;    session.getId() = &#8221; + session.getId());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        Enumeration e = session.getAttributeNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            String sessionName = (String) e.nextElement();<br \/>\n            String sessionClassName = session.getAttribute(sessionName)<br \/>\n                    .getClass().getName();<br \/>\n            buff.append(&#8221;    name =&#8221; + sessionName + &#8220;, value =&#8221;<br \/>\n                    + session.getAttribute(sessionName) + &#8220;, attributeClass = &#8221;<br \/>\n                    + sessionClassName+LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<\/p>\n<p>    private static Hashtable convertRequest(HttpServletRequest request) {<br \/>\n        Hashtable tempHash = new Hashtable();<br \/>\n        Enumeration e = request.getParameterNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            String key = (String) e.nextElement();<br \/>\n            String[] values = request.getParameterValues(key);<br \/>\n            String[] parameterValues = new String[values.length];<br \/>\n            for (int i = 0; i &lt; values.length; i++) {<br \/>\n                parameterValues[i] = convUnicode(values[i]);<br \/>\n            }<br \/>\n            tempHash.put(key, parameterValues);<br \/>\n        }<br \/>\n        return tempHash;<\/p>\n<p>    }<br \/>\n    private static String stratum(Object value) {<br \/>\n        if (value == null) {<br \/>\n            return &#8220;null&#8221;;<br \/>\n        } else if (value instanceof String[]) {<br \/>\n            return convString((String[]) value);<br \/>\n        } else {<br \/>\n            return value.toString();<br \/>\n        }<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * \u6587\u5b57\u5217\u914d\u5217[strArray]\u306e\u5185\u5bb9\u3092\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306aString\u3067\u8fd4\u3057\u307e\u3059\u3002<br \/>\n     *  &#8220;[temp1,temp2,temp3]&#8221;<br \/>\n     * @param strArray \u8a55\u4fa1\u5bfe\u8c61\u306eString\u914d\u5217<br \/>\n     * @return \u5909\u63db\u5f8c\u306e\u6587\u5b57\u5217<br \/>\n     *\/<br \/>\n    private static String convString(String[] strArray) {<br \/>\n        if (strArray == null)<br \/>\n            return null;<br \/>\n        StringBuffer buff = new StringBuffer(&#8220;[&#8220;);<br \/>\n        for (int i = 0; i &lt; strArray.length; i++) {<br \/>\n            buff.append(strArray[i] + &#8220;, &#8220;);<br \/>\n        }<br \/>\n        buff.delete(buff.length() &#8211; 2, buff.length());<br \/>\n        buff.append(&#8220;]&#8221;);<br \/>\n        return buff.toString();<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * [str]\u3092\u30e6\u30cb\u30b3\u30fc\u30c9\u3078\u5909\u63db\u3057\u307e\u3059\u3002<br \/>\n     * @param str<br \/>\n     * @return<br \/>\n     *\/<br \/>\n    private static String convUnicode(String str) {<br \/>\n        if (str == null)<br \/>\n            return null;<br \/>\n        try {<br \/>\n            return new String(str.getBytes(&#8220;8859_1&#8221;), &#8220;JISAutoDetect&#8221;);<br \/>\n        } catch (UnsupportedEncodingException e) {<br \/>\n            throw new 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    static class CustomFormatter extends Formatter {<br \/>\n        static final String pattern = &#8220;yyyy\/MM\/dd HH:mm:ss&#8221;;<br \/>\n        public synchronized String format(LogRecord record) {<br \/>\n            StringBuffer buf = new StringBuffer();<br \/>\n            \/\/ \u65e5\u6642\u3092\u8a2d\u5b9a<br \/>\n            Date date = new Date();<br \/>\n            date.setTime(record.getMillis());<br \/>\n            SimpleDateFormat formatter = new SimpleDateFormat(pattern);<br \/>\n            buf.append(formatter.format(date));<br \/>\n            buf.append(&#8220;:&#8221;);<br \/>\n            \/\/ \u30ec\u30d9\u30eb\u3092\u8a2d\u5b9a<br \/>\n            buf.append(&#8220;[&#8221; + record.getLevel().getName() + &#8220;]&#8221;);<br \/>\n            buf.append(&#8220;:&#8221;);<br \/>\n            buf.append(record.getMessage());<br \/>\n            buf.append(LINE_SEPA);<br \/>\n            return buf.toString();<br \/>\n        }<br \/>\n    }<br \/>\n    static class CustomConsoleHandler extends StreamHandler {<br \/>\n        public CustomConsoleHandler() {<br \/>\n            super();<br \/>\n            setOutputStream(System.out);<br \/>\n        }<br \/>\n        \/**<br \/>\n         * LogRecord \u3092\u767a\u884c\u3057\u307e\u3059\u3002<br \/>\n         * \u521d\u671f\u72b6\u614b\u3067\u306f\u3001\u30ed\u30ae\u30f3\u30b0\u306e\u8981\u6c42\u306f Logger \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b<br \/>\n         * \u5bfe\u3057\u3066\u884c\u308f\u308c\u3001\u3053\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f LogRecord \u3092\u521d\u671f\u5316\u3057\u3066<br \/>\n         * \u3053\u3053\u306b\u8ee2\u9001\u3057\u307e\u3057\u305f\u3002<br \/>\n         *<br \/>\n         * @param   record \u30ed\u30b0\u30a4\u30d9\u30f3\u30c8\u306e\u8aac\u660e\u3002null \u30ec\u30b3\u30fc\u30c9\u306f\u5358\u306b\u7121\u8996\u3055\u308c\u308b<br \/>\n         *                 \u3060\u3051\u3067\u3001\u901a\u77e5\u306f\u884c\u308f\u308c\u306a\u3044<br \/>\n         *\/<br \/>\n        public void publish(LogRecord record) {<br \/>\n            super.publish(record);<br \/>\n            flush();<br \/>\n        }<br \/>\n        \/**<br \/>\n         * StreamHandler.close \u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u30d5\u30e9\u30c3\u30b7\u30e5\u3057\u307e\u3059\u304c\u3001<br \/>\n         * \u51fa\u529b\u30b9\u30c8\u30ea\u30fc\u30e0\u306f\u9589\u3058\u307e\u305b\u3093\u3002\u3064\u307e\u308a\u3001System.err \u306f\u9589\u3058\u307e\u305b\u3093\u3002<br \/>\n         *\/<br \/>\n        public void close() {<br \/>\n            flush();<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n<\/textarea><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java \u30ed\u30b0\u30d5\u30a3\u30eb\u30bf\u3067HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u89e3\u6790 javax.servlet.Filter\u3092\u5b9f\u88c5\u3057\u3066HTTP\u30ea [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":"","footnotes":""},"categories":[19],"tags":[],"class_list":["post-910","post","type-post","status-publish","format-standard","hentry","category-java"],"_links":{"self":[{"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/posts\/910","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/comments?post=910"}],"version-history":[{"count":5,"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/posts\/910\/revisions"}],"predecessor-version":[{"id":1894,"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/posts\/910\/revisions\/1894"}],"wp:attachment":[{"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/media?parent=910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/categories?post=910"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chat-messenger.com\/zh\/wp-json\/wp\/v2\/tags?post=910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}