{"id":99864,"date":"2026-09-03T13:01:17","date_gmt":"2026-09-03T05:01:17","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/99864.html"},"modified":"2026-09-03T13:01:17","modified_gmt":"2026-09-03T05:01:17","slug":"java%e6%b7%b1%e5%85%a5%e8%a7%a3%e6%9e%90%e7%af%87%e5%8d%81%e4%b8%89%e4%b9%8bjava%e6%97%a5%e5%bf%97api%ef%bc%88jul%ef%bc%89%e8%af%a6%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/99864.html","title":{"rendered":"Java\u6df1\u5165\u89e3\u6790\u7bc7\u5341\u4e09\u4e4bJava\u65e5\u5fd7API\uff08JUL\uff09\u8be6\u89e3"},"content":{"rendered":"<h2>Java\u65e5\u5fd7API&#xff08;JUL&#xff09;\u8be6\u89e3<\/h2>\n<hr \/>\n<h3>\u76ee\u5f55<\/h3>\n<li>\u6982\u8ff0\u4e0e\u5386\u53f2<\/li>\n<li>\u6838\u5fc3\u67b6\u6784\u4e0e\u7ec4\u4ef6\u5173\u7cfb<\/li>\n<li>Logger\u8be6\u89e3<\/li>\n<li>Level\u65e5\u5fd7\u7ea7\u522b<\/li>\n<li>Handler\u8f93\u51fa\u5904\u7406\u5668<\/li>\n<li>Formatter\u683c\u5f0f\u5316\u5668<\/li>\n<li>Filter\u8fc7\u6ee4\u5668<\/li>\n<li>LogRecord\u4e0e\u65e5\u5fd7\u6d41\u8f6c<\/li>\n<li>LogManager\u4e0e\u914d\u7f6e\u6587\u4ef6<\/li>\n<li>\u81ea\u5b9a\u4e49Handler\u4e0eFormatter<\/li>\n<li>\u4e0eSLF4J\u6865\u63a5<\/li>\n<li>\u6700\u4f73\u5b9e\u8df5\u4e0e\u5e38\u89c1\u9677\u9631<\/li>\n<li>\u7248\u672c\u6f14\u8fdb<\/li>\n<hr \/>\n<h3>1. \u6982\u8ff0\u4e0e\u5386\u53f2<\/h3>\n<h4>1.1 \u4ec0\u4e48\u662fJUL<\/h4>\n<p>JUL&#xff08;Java Util Logging&#xff09;\u662f Java \u6807\u51c6\u5e93\u81ea\u5e26\u7684\u65e5\u5fd7\u6846\u67b6&#xff0c;\u5168\u90e8\u7c7b\u4f4d\u4e8e java.util.logging \u5305\u3002\u5b83\u662f JDK 1.4&#xff08;2002\u5e74&#xff0c;JSR 47&#xff09; \u5f15\u5165\u7684&#xff0c;\u76ee\u6807\u662f\u8ba9 Java \u5e73\u53f0\u62e5\u6709\u4e00\u4e2a\u6807\u51c6\u65e5\u5fd7\u8bbe\u65bd&#xff0c;\u907f\u514d Log4j 1.x \u65f6\u671f\u5404\u6846\u67b6\u5404\u81ea\u9020\u8f6e\u5b50\u7684\u5c40\u9762\u3002<\/p>\n<p><span class=\"token comment\">\/\/ \u6700\u5c0f\u53ef\u7528\u793a\u4f8b&#xff1a;JDK\u5185\u7f6e&#xff0c;\u65e0\u9700\u4efb\u4f55\u7b2c\u4e09\u65b9\u4f9d\u8d56<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Logger<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">JulHelloWorld<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u63a8\u8350&#xff1a;\u5b58\u4e3a\u5b57\u6bb5&#xff0c;\u907f\u514d\u88abGC&#xff08;\u89c1\u9677\u9631\u7ae0\u8282&#xff09;<\/span><br \/>\n    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">JulHelloWorld<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">class<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Hello, JUL!&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>  <span class=\"token comment\">\/\/ \u8f93\u51fa\u5230\u63a7\u5236\u53f0&#xff08;System.err&#xff09;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">warning<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8fd9\u662f\u4e00\u6761\u8b66\u544a&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">severe<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8fd9\u662f\u4e00\u6761\u4e25\u91cd\u9519\u8bef&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token comment\">\/*<br \/>\n\u8fd0\u884c\u8f93\u51fa&#xff08;\u9ed8\u8ba4SimpleFormatter&#xff09;&#xff1a;<br \/>\n\u4e94\u6708 20, 2024 10:30:15 \u4e0a\u5348 JulHelloWorld main<br \/>\n\u4fe1\u606f: Hello, JUL!<br \/>\n\u4e94\u6708 20, 2024 10:30:15 \u4e0a\u5348 JulHelloWorld main<br \/>\n\u8b66\u544a: \u8fd9\u662f\u4e00\u6761\u8b66\u544a<br \/>\n\u4e94\u6708 20, 2024 10:30:15 \u4e0a\u5348 JulHelloWorld main<br \/>\n\u4e25\u91cd: \u8fd9\u662f\u4e00\u6761\u4e25\u91cd\u9519\u8bef<br \/>\n*\/<\/span><\/p>\n<h4>1.2 \u8bbe\u8ba1\u80cc\u666f\u4e0e\u5b9a\u4f4d<\/h4>\n<table>\n<tr>\u65f6\u95f4\u4e8b\u4ef6<\/tr>\n<tbody>\n<tr>\n<td align=\"center\">1996<\/td>\n<td align=\"left\">Log4j 0.x \u51fa\u73b0&#xff0c;\u6210\u4e3a\u4e8b\u5b9e\u6807\u51c6<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">2002<\/td>\n<td align=\"left\">JDK 1.4 \u5f15\u5165 java.util.logging&#xff08;JSR 47&#xff09;<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">2004<\/td>\n<td align=\"left\">SLF4J \/ Logback \u51fa\u73b0&#xff0c;\u89e3\u51b3\u95e8\u9762\u4e0e\u5b9e\u73b0\u5206\u79bb\u95ee\u9898<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">2012<\/td>\n<td align=\"left\">Log4j2 \u53d1\u5e03&#xff0c;\u6027\u80fd\u5927\u5e45\u8d85\u8d8a<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4eca\u5929<\/td>\n<td align=\"left\">JUL \u4ecd\u662f JDK \u5185\u7f6e\u8bbe\u65bd&#xff0c;\u8f7b\u91cf\u573a\u666f\u4e0e\u5e93\u5f00\u53d1\u5e38\u7528<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>JUL \u7684\u4f18\u52bf&#xff1a;\u96f6\u4f9d\u8d56\u3001JDK \u5185\u7f6e\u3001\u65e0\u9700\u9009\u578b\u3002\u52a3\u52bf&#xff1a;\u914d\u7f6e\u80fd\u529b\u5f31\u3001\u65e0\u5360\u4f4d\u7b26 {}\u3001\u65e0 MDC\u3001\u65e0\u539f\u751f\u5f02\u6b65\u3001\u6027\u80fd\u4e0e\u6613\u7528\u6027\u900a\u4e8e Log4j2\/Logback\u3002<\/p>\n<hr \/>\n<h3>2. \u6838\u5fc3\u67b6\u6784\u4e0e\u7ec4\u4ef6\u5173\u7cfb<\/h3>\n<h4>2.1 \u4e94\u5927\u6838\u5fc3\u7ec4\u4ef6<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 \u5e94\u7528\u4ee3\u7801                                                       \u2502<br \/>\n\u2502   logger.info(&#034;\u7528\u6237&#034; &#043; id &#043; &#034;\u767b\u5f55&#034;)                            \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n             \u25bc<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 Logger&#xff08;\u8bb0\u5f55\u5668&#xff09;          \u2502  \u5224\u65ad\u7ea7\u522b \u2192 \u6784\u5efaLogRecord \u2192 \u5206\u53d1<br \/>\n\u2502   \u251c\u2500 Level&#xff08;\u7ea7\u522b\u9608\u503c&#xff09;    \u2502<br \/>\n\u2502   \u251c\u2500 Filter&#xff08;\u8fc7\u6ee4\u5668&#xff09;     \u2502<br \/>\n\u2502   \u2514\u2500 Handler[]&#xff08;\u5904\u7406\u5668&#xff09;  \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n             \u25bc&#xff08;\u53ef\u80fd\u5411\u7236Logger\u4f20\u64ad&#xff09;<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 Handler&#xff08;\u5904\u7406\u5668&#xff09;         \u2502  \u518d\u6b21\u5224\u65ad\u7ea7\u522b \u2192 \u8c03\u7528Formatter \u2192 \u8f93\u51fa<br \/>\n\u2502   \u251c\u2500 Level&#xff08;\u7ea7\u522b\u9608\u503c&#xff09;    \u2502<br \/>\n\u2502   \u251c\u2500 Filter&#xff08;\u8fc7\u6ee4\u5668&#xff09;     \u2502<br \/>\n\u2502   \u2514\u2500 Formatter&#xff08;\u683c\u5f0f\u5316\u5668&#xff09;\u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n             \u25bc<br \/>\n       \u63a7\u5236\u53f0 \/ \u6587\u4ef6 \/ \u7f51\u7edc \/ \u7f13\u51b2<\/p>\n<table>\n<tr>\u7ec4\u4ef6\u804c\u8d23\u7c7b\u6bd4<\/tr>\n<tbody>\n<tr>\n<td align=\"center\">Logger<\/td>\n<td align=\"left\">\u5e94\u7528\u83b7\u53d6\u7684\u65e5\u5fd7\u5165\u53e3&#xff0c;\u6309\u540d\u79f0\u5f62\u6210\u5c42\u7ea7\u6811<\/td>\n<td align=\"left\">\u6536\u4ef6\u4eba<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">Level<\/td>\n<td align=\"left\">\u63a7\u5236\u65e5\u5fd7\u4e25\u91cd\u7a0b\u5ea6\u7684\u95e8\u69db<\/td>\n<td align=\"left\">\u5b89\u68c0\u7b49\u7ea7<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">Filter<\/td>\n<td align=\"left\">\u7ec6\u7c92\u5ea6\u7684\u53d1\u5e03\u5224\u65ad<\/td>\n<td align=\"left\">\u5b89\u68c0\u5458<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">Handler<\/td>\n<td align=\"left\">\u51b3\u5b9a\u65e5\u5fd7\u5199\u5230\u54ea\u91cc&#xff08;\u63a7\u5236\u53f0\/\u6587\u4ef6\/\u7f51\u7edc&#xff09;<\/td>\n<td align=\"left\">\u6295\u9012\u6e20\u9053<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">Formatter<\/td>\n<td align=\"left\">\u51b3\u5b9a\u65e5\u5fd7\u7684\u8f93\u51fa\u683c\u5f0f<\/td>\n<td align=\"left\">\u5305\u88c5\u65b9\u5f0f<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">LogRecord<\/td>\n<td align=\"left\">\u5728\u7ec4\u4ef6\u4e4b\u95f4\u4f20\u9012\u7684\u65e5\u5fd7\u4e8b\u4ef6\u6570\u636e<\/td>\n<td align=\"left\">\u5305\u88f9<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">LogManager<\/td>\n<td align=\"left\">\u5168\u5c40\u7ba1\u7406\u5668&#xff1a;Logger\u6ce8\u518c\u8868 &#043; \u914d\u7f6e<\/td>\n<td align=\"left\">\u90ae\u5c40\u603b\u5c40<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>3. Logger\u8be6\u89e3<\/h3>\n<h4>3.1 \u83b7\u53d6Logger\u4e0e\u5c42\u7ea7\u6811<\/h4>\n<p>Logger \u901a\u8fc7 LogManager \u5168\u5c40\u6ce8\u518c\u8868\u6309\u540d\u79f0\u7f13\u5b58\u3002\u540d\u79f0\u91c7\u7528\u70b9\u5206\u5c42\u7ea7&#xff08;\u4e0e\u5305\u540d\u65e0\u5173&#xff0c;\u53ea\u662f\u5b57\u7b26\u4e32\u524d\u7f00\u7ea6\u5b9a&#xff09;&#xff0c;\u5b50 Logger \u9ed8\u8ba4\u7ee7\u627f\u7236 Logger \u7684\u6709\u6548\u7ea7\u522b\u548c Handler \u4f20\u64ad\u3002<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Logger<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">LoggerHierarchyDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u63a8\u8350\u547d\u540d&#xff1a;\u7528\u7c7b\u7684\u5168\u9650\u5b9a\u540d&#xff0c;\u5929\u7136\u5f62\u6210\u5c42\u7ea7<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> daoLogger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;com.example.dao&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> appLogger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;com.example&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u540c\u540dgetLogger\u8fd4\u56de\u540c\u4e00\u5b9e\u4f8b&#xff08;\u6ce8\u518c\u8868\u7f13\u5b58&#xff09;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;com.example.dao&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> daoLogger<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ true<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u5c42\u7ea7\u5173\u7cfb&#xff1a;com.example.dao \u7684\u7236\u662f com.example<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span>daoLogger<span class=\"token punctuation\">.<\/span><span class=\"token function\">getParent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ com.example<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u6839Logger\u540d\u4e3a &#034;&#034;&#xff0c;\u9ed8\u8ba4\u6302\u4e00\u4e2aINFO\u7ea7\u522b\u7684ConsoleHandler<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> root <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span>root<span class=\"token punctuation\">.<\/span><span class=\"token function\">getHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>length<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ 1<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ JDK7&#043; \u5168\u5c40Logger<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> global <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getGlobal<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        global<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5168\u5c40\u65e5\u5fd7&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u5173\u952e\u9677\u9631&#xff1a;LogManager \u5bf9 Logger \u53ea\u6301\u6709\u5f31\u5f15\u7528\u3002\u5982\u679c\u5728\u65b9\u6cd5\u91cc Logger.getLogger(&#8230;) \u7528\u5b8c\u5c31\u4e22&#xff0c;\u8be5 Logger \u53ef\u80fd\u88ab GC \u56de\u6536&#xff0c;\u5176\u4e0a\u914d\u7f6e&#xff08;Handler\u3001Level&#xff09;\u968f\u4e4b\u4e22\u5931\u3002\u5fc5\u987b\u628a Logger \u5b58\u4e3a\u5b57\u6bb5\u3002<\/p>\n<h4>3.2 \u8bb0\u5f55\u65e5\u5fd7\u7684\u5b8c\u6574API<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Level<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Logger<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">LoggerApiDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;com.example.order&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ 1) \u4e03\u4e2a\u4fbf\u6377\u65b9\u6cd5&#xff08;\u6309\u7ea7\u522b\u547d\u540d&#xff09;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">severe<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7cfb\u7edf\u5d29\u6e83&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>      <span class=\"token comment\">\/\/ SEVERE 1000<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">warning<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u78c1\u76d8\u7a7a\u95f4\u4e0d\u8db3&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>  <span class=\"token comment\">\/\/ WARNING 900<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8ba2\u5355\u521b\u5efa\u6210\u529f&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>     <span class=\"token comment\">\/\/ INFO 800<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7ebf\u7a0b\u6c60\u5927\u5c0f&#061;8&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>   <span class=\"token comment\">\/\/ CONFIG 700<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">fine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7f13\u5b58\u547d\u4e2d key&#061;1001&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ FINE 500<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">finer<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8fdb\u5165\u65b9\u6cd5 process&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ FINER 400<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">finest<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5faa\u73af\u7b2c3\u6b21\u8fed\u4ee3&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>   <span class=\"token comment\">\/\/ FINEST 300<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 2) \u901a\u7528log\u65b9\u6cd5 &#043; \u53c2\u6570\u5316\u6d88\u606f&#xff08;{0}{1}\u5360\u4f4d\u7b26&#xff0c;MessageFormat\u8bed\u6cd5&#xff09;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">INFO<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u7528\u6237{0}\u4e0b\u5355&#xff0c;\u91d1\u989d{1}\u5143&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Object<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">199.5<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 3) \u5e26\u5f02\u5e38\u5806\u6808<\/span><br \/>\n        <span class=\"token keyword\">try<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">int<\/span> r <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">10<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">catch<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">ArithmeticException<\/span> e<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">SEVERE<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u8ba1\u7b97\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">,<\/span> e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7b2c\u4e09\u4e2a\u53c2\u6570\u4e3aThrowable&#xff0c;\u4f1a\u6253\u5370\u5806\u6808<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 4) \u65b9\u6cd5\u8fdb\u5165\/\u9000\u51fa\u8ffd\u8e2a&#xff08;FINER\u7ea7\u522b&#xff0c;\u8c03\u8bd5\u8c03\u7528\u94fe\u5f88\u6709\u7528&#xff09;<\/span><br \/>\n        <span class=\"token function\">process<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u53c2\u6570A&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 5) \u5148\u5224\u65ad\u518d\u8bb0\u5f55&#xff08;\u907f\u514d\u6602\u8d35\u7684\u53c2\u6570\u8ba1\u7b97&#xff09;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">isLoggable<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">FINEST<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">finest<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5927\u5bf9\u8c61\u5feb\u7167: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">buildExpensiveSnapshot<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">process<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span> arg<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">entering<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;LoggerApiDemo&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;process&#034;<\/span><span class=\"token punctuation\">,<\/span> arg<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ FINER: ENTRY &#043; \u53c2\u6570<\/span><br \/>\n        <span class=\"token keyword\">try<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token comment\">\/\/ \u4e1a\u52a1\u903b\u8f91&#8230;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">finally<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">exiting<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;LoggerApiDemo&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;process&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>    <span class=\"token comment\">\/\/ FINER: RETURN<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">buildExpensiveSnapshot<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;\u8017\u65f6\u6784\u5efa\u7684\u5feb\u7167&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>3.3 \u7ea7\u522b\u7ee7\u627f\u4e0eHandler\u4f20\u64ad<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">ConsoleHandler<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Level<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Logger<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">InheritanceDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> parent <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;com.demo&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> child <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;com.demo.service&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ child\u672a\u8bbe\u7f6eLevel&#xff08;null&#xff09;\u2192 \u6709\u6548\u7ea7\u522b\u7ee7\u627f\u7236\u7ea7<\/span><br \/>\n        parent<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">FINE<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span>child<span class=\"token punctuation\">.<\/span><span class=\"token function\">isLoggable<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span>LogRecord<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">FINE<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;x&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ true<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u884c\u4e3a&#xff1a;\u65e5\u5fd7\u540c\u65f6\u4ea4\u7ed9\u81ea\u8eabHandler\u548c\u7236Handler&#xff08;\u5411\u4e0a\u4f20\u64ad&#xff09;<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u82e5child\u4e5faddHandler&#xff0c;\u53ef\u80fd\u51fa\u73b0\u91cd\u590d\u8f93\u51fa&#xff01;<\/span><br \/>\n        child<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ConsoleHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        child<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8fd9\u6761\u4f1a\u6253\u5370\u4e24\u6b21&#xff1a;child\u81ea\u5df1\u7684Handler &#043; \u6839Logger\u7684\u9ed8\u8ba4Handler&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u89e3\u51b3&#xff1a;\u5173\u95ed\u5411\u7236\u7ea7\u4f20\u64ad<\/span><br \/>\n        child<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        child<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u73b0\u5728\u53ea\u6253\u5370\u4e00\u6b21&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<hr \/>\n<h3>4. Level\u65e5\u5fd7\u7ea7\u522b<\/h3>\n<h4>4.1 \u6807\u51c6\u7ea7\u522b\u4e00\u89c8<\/h4>\n<p>JUL \u7684 Level \u662f\u6570\u503c&#xff0c;\u6570\u503c\u8d8a\u5927\u8d8a\u4e25\u91cd\u3002\u4ecb\u4e8e\u6807\u51c6\u7ea7\u522b\u4e4b\u95f4\u7684\u6570\u503c\u4e5f\u53ef\u81ea\u5b9a\u4e49\u3002<\/p>\n<table>\n<tr>Level\u6570\u503c\u8bed\u4e49\u2248SLF4J<\/tr>\n<tbody>\n<tr>\n<td align=\"center\">OFF<\/td>\n<td align=\"center\">Integer.MAX_VALUE<\/td>\n<td align=\"left\">\u5173\u95ed\u65e5\u5fd7<\/td>\n<td align=\"center\">\u2014<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">SEVERE<\/td>\n<td align=\"center\">1000<\/td>\n<td align=\"left\">\u81f4\u547d\u9519\u8bef<\/td>\n<td align=\"center\">ERROR<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">WARNING<\/td>\n<td align=\"center\">900<\/td>\n<td align=\"left\">\u8b66\u544a<\/td>\n<td align=\"center\">WARN<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">INFO<\/td>\n<td align=\"center\">800<\/td>\n<td align=\"left\">\u4e00\u822c\u4fe1\u606f<\/td>\n<td align=\"center\">INFO<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">CONFIG<\/td>\n<td align=\"center\">700<\/td>\n<td align=\"left\">\u914d\u7f6e\u4fe1\u606f<\/td>\n<td align=\"center\">\u2014&#xff08;\u8fd1\u4f3cINFO&#xff09;<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">FINE<\/td>\n<td align=\"center\">500<\/td>\n<td align=\"left\">\u8c03\u8bd5\u4fe1\u606f<\/td>\n<td align=\"center\">DEBUG<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">FINER<\/td>\n<td align=\"center\">400<\/td>\n<td align=\"left\">\u8f83\u7ec6\u8c03\u8bd5&#xff08;entering\/exiting\u7528&#xff09;<\/td>\n<td align=\"center\">TRACE<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">FINEST<\/td>\n<td align=\"center\">300<\/td>\n<td align=\"left\">\u6700\u7ec6\u7c92\u5ea6<\/td>\n<td align=\"center\">TRACE<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">ALL<\/td>\n<td align=\"center\">Integer.MIN_VALUE<\/td>\n<td align=\"left\">\u5168\u90e8\u6253\u5f00<\/td>\n<td align=\"center\">\u2014<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>4.2 \u53cc\u91cd\u7ea7\u522b\u95e8\u69db<\/h4>\n<p>\u4e00\u6761\u65e5\u5fd7\u8981\u6700\u7ec8\u8f93\u51fa&#xff0c;\u5fc5\u987b\u540c\u65f6\u901a\u8fc7 Logger \u7ea7\u522b\u548c Handler \u7ea7\u522b\u4e24\u9053\u95e8\u69db&#xff1a;<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">ConsoleHandler<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Level<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Logger<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">LevelGateDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;gate.demo&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u53bb\u6389\u9ed8\u8ba4Handler&#xff0c;\u907f\u514d\u5e72\u6270<\/span><\/p>\n<p>        <span class=\"token class-name\">ConsoleHandler<\/span> handler <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ConsoleHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>handler<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u573a\u666f1&#xff1a;Logger&#061;FINE&#xff0c;Handler&#061;INFO&#xff08;\u9ed8\u8ba4&#xff09; \u2192 FINE\u65e5\u5fd7\u4ecd\u7136\u770b\u4e0d\u5230&#xff01;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">FINE<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">fine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u770b\u4e0d\u5230\u6211&#xff1a;\u88abHandler\u7684INFO\u7ea7\u522b\u6321\u4f4f&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u573a\u666f2&#xff1a;Handler\u4e5f\u653e\u5f00<\/span><br \/>\n        handler<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">fine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u73b0\u5728\u80fd\u770b\u5230\u4e86&#xff1a;\u4e24\u9053\u95e8\u69db\u90fd\u901a\u8fc7&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>4.3 \u81ea\u5b9a\u4e49\u7ea7\u522b<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Level<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Logger<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u81ea\u5b9a\u4e49\u7ea7\u522b&#xff1a;\u7ee7\u627fLevel&#xff0c;\u63d0\u4f9b name &#043; value &#043; resourceKey<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">AuditLevel<\/span> <span class=\"token keyword\">extends<\/span> <span class=\"token class-name\">Level<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ AUDENT\u5ba1\u8ba1\u7ea7\u522b&#xff1a;\u4ecb\u4e8eINFO(800)\u548cWARNING(900)\u4e4b\u95f4<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\">AuditLevel<\/span> <span class=\"token constant\">AUDIT<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">AuditLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;AUDIT&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">850<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">protected<\/span> <span class=\"token class-name\">AuditLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span> name<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> value<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">super<\/span><span class=\"token punctuation\">(<\/span>name<span class=\"token punctuation\">,<\/span> value<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">CustomLevelDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;audit.demo&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span>ConsoleHandler<\/span> h <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span>ConsoleHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        h<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>h<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">AuditLevel<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">AUDIT<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u7ba1\u7406\u5458\u5220\u9664\u4e86\u7528\u62371001&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<hr \/>\n<h3>5. Handler\u8f93\u51fa\u5904\u7406\u5668<\/h3>\n<h4>5.1 Handler\u7ee7\u627f\u4f53\u7cfb<\/h4>\n<p>java.util.logging.Handler&#xff08;\u62bd\u8c61&#xff09;<br \/>\n\u251c\u2500\u2500 StreamHandler      \u2500\u2500 \u5199\u5165OutputStream&#xff08;UTF-8&#xff0c;\u4e0d\u81ea\u52a8flush&#xff09;<br \/>\n\u2502   \u251c\u2500\u2500 ConsoleHandler \u2500\u2500 \u5199\u5165System.err&#xff0c;\u81ea\u52a8flush<br \/>\n\u2502   \u251c\u2500\u2500 FileHandler    \u2500\u2500 \u5199\u5165\u6587\u4ef6&#xff0c;\u652f\u6301\u6eda\u52a8<br \/>\n\u2502   \u2514\u2500\u2500 SocketHandler  \u2500\u2500 \u5199\u5165TCP\u5957\u63a5\u5b57&#xff0c;\u81ea\u52a8flush<br \/>\n\u2514\u2500\u2500 MemoryHandler      \u2500\u2500 \u5185\u5b58\u7f13\u51b2\u540e\u8f6c\u53d1\u7ed9\u76ee\u6807Handler<\/p>\n<h4>5.2 ConsoleHandler \u4e0e StreamHandler<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>io<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">OutputStream<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token operator\">*<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ConsoleHandlerDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;console.demo&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ ConsoleHandler \u5199\u5165 System.err&#xff08;\u7ea2\u8272\u8f93\u51fa&#xff0c;\u4e0e\u6b63\u5e38\u8f93\u51fa\u533a\u5206&#xff09;<\/span><br \/>\n        <span class=\"token class-name\">ConsoleHandler<\/span> console <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ConsoleHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        console<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>console<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ StreamHandler \u53ef\u5199\u4efb\u610fOutputStream&#xff08;\u8fd9\u91cc\u5199System.out&#xff09;<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u6ce8\u610f&#xff1a;StreamHandler\u4e0d\u4f1a\u81ea\u52a8flush&#xff0c;\u4e00\u6761\u65e5\u5fd7\u53ef\u80fd\u6ede\u7559\u5728\u7f13\u51b2<\/span><br \/>\n        <span class=\"token class-name\">StreamHandler<\/span> out <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">StreamHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">SimpleFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n            <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">synchronized<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">publish<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">LogRecord<\/span> record<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">super<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">publish<\/span><span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token function\">flush<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9010\u6761\u5237\u65b0&#xff0c;\u5426\u5219\u770b\u4e0d\u5230\u8f93\u51fa<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        out<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>out<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u540c\u65f6\u8f93\u51fa\u5230stderr\u548cstdout&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>5.3 FileHandler \u4e0e\u6eda\u52a8\u6587\u4ef6<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>io<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">IOException<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token operator\">*<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">FileHandlerDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">throws<\/span> <span class=\"token class-name\">IOException<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;file.demo&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u6eda\u52a8\u6587\u4ef6&#xff1a;%g\u662f\u5e8f\u53f7&#xff0c;\u6700\u591a5\u4e2a\u6587\u4ef6&#xff0c;\u6bcf\u4e2a\u4e0a\u965050KB<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u5199\u6ee1\u540e app.log.0 \u2192 app.log.1&#xff0c;\u4f9d\u6b21\u8f6e\u8f6c<\/span><br \/>\n        <span class=\"token class-name\">FileHandler<\/span> fh <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">FileHandler<\/span><span class=\"token punctuation\">(<\/span><br \/>\n                <span class=\"token string\">&#034;logs\/app%g.log&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/\/ \u8def\u5f84\u6a21\u5f0f<\/span><br \/>\n                <span class=\"token number\">50<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">1024<\/span><span class=\"token punctuation\">,<\/span>        <span class=\"token comment\">\/\/ limit&#xff1a;\u5355\u6587\u4ef6\u5b57\u8282\u4e0a\u9650&#xff08;0&#061;\u4e0d\u9650&#xff09;<\/span><br \/>\n                <span class=\"token number\">5<\/span><span class=\"token punctuation\">,<\/span>                <span class=\"token comment\">\/\/ count&#xff1a;\u6eda\u52a8\u6587\u4ef6\u6570<\/span><br \/>\n                <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>            <span class=\"token comment\">\/\/ append&#xff1a;\u662f\u5426\u8ffd\u52a0<\/span><br \/>\n        fh<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        fh<span class=\"token punctuation\">.<\/span><span class=\"token function\">setFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">SimpleFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ FileHandler\u9ed8\u8ba4\u662fXMLFormatter<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>fh<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7b2c &#034;<\/span> <span class=\"token operator\">&#043;<\/span> i <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034; \u6761\u65e5\u5fd7&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        fh<span class=\"token punctuation\">.<\/span><span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5fc5\u987bclose&#xff0c;\u5426\u5219\u53ef\u80fd\u4e22\u5931\u5c3e\u90e8\u6570\u636e<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u6a21\u5f0f\u5360\u4f4d\u7b26\u901f\u67e5&#xff1a;<\/p>\n<table>\n<tr>\u5360\u4f4d\u7b26\u542b\u4e49\u793a\u4f8b<\/tr>\n<tbody>\n<tr>\n<td align=\"center\">%h<\/td>\n<td align=\"left\">\u7528\u6237\u4e3b\u76ee\u5f55 user.home<\/td>\n<td align=\"left\">C:\\\\Users\\\\dev<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">%t<\/td>\n<td align=\"left\">\u7cfb\u7edf\u4e34\u65f6\u76ee\u5f55 java.io.tmpdir<\/td>\n<td align=\"left\">\/tmp<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">%g<\/td>\n<td align=\"left\">\u6eda\u52a8\u5e8f\u53f7<\/td>\n<td align=\"left\">app0.log<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">%u<\/td>\n<td align=\"left\">\u552f\u4e00\u6570&#xff08;\u591a\u5b9e\u4f8b\u9632\u51b2\u7a81&#xff09;<\/td>\n<td align=\"left\">app1.log<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">%d<\/td>\n<td align=\"left\">\u65e5\u671f<\/td>\n<td align=\"left\">app2024-05-20.log<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>5.4 MemoryHandler&#xff08;\u7f13\u51b2\u8f6c\u53d1&#xff09;<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token operator\">*<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">MemoryHandlerDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;memory.demo&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u76ee\u6807&#xff1a;\u6587\u4ef6&#xff08;\u6a21\u62df&#xff1a;\u8fd9\u91cc\u7528\u63a7\u5236\u53f0&#xff09;<\/span><br \/>\n        <span class=\"token class-name\">ConsoleHandler<\/span> target <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ConsoleHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        target<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ MemoryHandler&#xff1a;\u7f13\u51b2100\u6761&#xff1b;\u9047\u5230WARNING\u53ca\u4ee5\u4e0a\u7acb\u5373push&#xff1b;\u4e5f\u53ef\u624b\u52a8push<\/span><br \/>\n        <span class=\"token class-name\">MemoryHandler<\/span> memory <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">MemoryHandler<\/span><span class=\"token punctuation\">(<\/span>target<span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">WARNING<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>memory<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5148\u7f13\u51b2&#xff0c;\u6682\u4e0d\u8f93\u51fa&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>     <span class=\"token comment\">\/\/ \u8fdb\u7f13\u51b2\u533a<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">fine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7ee7\u7eed\u7f13\u51b2&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>            <span class=\"token comment\">\/\/ \u8fdb\u7f13\u51b2\u533a<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">warning<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u89e6\u53d1push&#xff0c;\u524d\u9762\u7684\u5168\u90e8\u8f93\u51fa&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u2265WARNING \u2192 \u7f13\u51b2\u533a\u6574\u4f53\u63a8\u7ed9target<\/span><\/p>\n<p>        memory<span class=\"token punctuation\">.<\/span><span class=\"token function\">push<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u624b\u52a8\u5f3a\u5236\u8f93\u51fa\u5269\u4f59\u7f13\u51b2<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<hr \/>\n<h3>6. Formatter\u683c\u5f0f\u5316\u5668<\/h3>\n<h4>6.1 SimpleFormatter \u4e0e\u683c\u5f0f\u5b9a\u5236<\/h4>\n<p>SimpleFormatter \u8f93\u51fa\u6587\u672c\u683c\u5f0f\u3002\u9ed8\u8ba4\u8f93\u51fa\u8f83\u5570\u55e6&#xff0c;\u53ef\u901a\u8fc7\u7cfb\u7edf\u5c5e\u6027 -Djava.util.logging.SimpleFormatter.format \u5b9a\u5236&#xff1a;<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token operator\">*<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">SimpleFormatterDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u4e5f\u53ef\u5728\u4ee3\u7801\u91cc\u8bbe\u7f6e&#xff08;\u9700\u5728Logger\u4f7f\u7528\u524d&#xff09;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">setProperty<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;java.util.logging.SimpleFormatter.format&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token comment\">\/\/ %1$tF&#061;\u65e5\u671f %1$tT&#061;\u65f6\u95f4 %4$s&#061;\u7ea7\u522b %3$s&#061;Logger %5$s&#061;\u6d88\u606f %6$s&#061;\u5f02\u5e38<\/span><br \/>\n                <span class=\"token string\">&#034;%1$tF %1$tT [%4$s] %3$s &#8211; %5$s%6$s%n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;format.demo&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">ConsoleHandler<\/span> h <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ConsoleHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        h<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        h<span class=\"token punctuation\">.<\/span><span class=\"token function\">setFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">SimpleFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>h<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5355\u884c\u8f93\u51fa&#xff0c;\u6e05\u723d\u591a\u4e86&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token comment\">\/\/ \u8f93\u51fa&#xff1a;2024-05-20 10:30:15 [\u4fe1\u606f] format.demo &#8211; \u5355\u884c\u8f93\u51fa&#xff0c;\u6e05\u723d\u591a\u4e86<\/span><\/p>\n<p>\u5360\u4f4d\u7b26\u8bf4\u660e&#xff08;MessageFormat\u8bed\u6cd5&#xff09;&#xff1a;<\/p>\n<table>\n<tr>\u5360\u4f4d\u7b26\u5185\u5bb9<\/tr>\n<tbody>\n<tr>\n<td align=\"center\">%1$<\/td>\n<td align=\"left\">\u65e5\u671f\u65f6\u95f4&#xff08;LogRecord.millis&#xff09;<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">%2$<\/td>\n<td align=\"left\">\u6e90\u7c7b\u540d\u4e0e\u65b9\u6cd5\u540d<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">%3$<\/td>\n<td align=\"left\">Logger\u540d\u79f0<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">%4$<\/td>\n<td align=\"left\">\u7ea7\u522b&#xff08;\u672c\u5730\u5316\u540d\u79f0&#xff09;<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">%5$<\/td>\n<td align=\"left\">\u6d88\u606f<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">%6$<\/td>\n<td align=\"left\">\u5f02\u5e38\u5806\u6808<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>6.2 XMLFormatter<\/h4>\n<p>FileHandler \u7684\u9ed8\u8ba4\u683c\u5f0f\u5316\u5668&#xff0c;\u8f93\u51fa\u7ed3\u6784\u5316 XML&#xff0c;\u9002\u5408\u673a\u5668\u89e3\u6790&#xff1a;<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token operator\">*<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">XmlFormatterDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">throws<\/span> <span class=\"token class-name\">Exception<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;xml.demo&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">FileHandler<\/span> fh <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">FileHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;logs\/xml%u.log&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        fh<span class=\"token punctuation\">.<\/span><span class=\"token function\">setFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">XMLFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5176\u5b9e\u8fd9\u662f\u9ed8\u8ba4\u503c<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>fh<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;XML\u683c\u5f0f\u65e5\u5fd7&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        fh<span class=\"token punctuation\">.<\/span><span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token comment\">\/*<br \/>\n\u8f93\u51fa\u6587\u4ef6\u5185\u5bb9&#xff1a;<br \/>\n&lt;?xml version&#061;&#034;1.0&#034; encoding&#061;&#034;UTF-8&#034; standalone&#061;&#034;no&#034;?&gt;<br \/>\n&lt;log&gt;<br \/>\n&lt;record&gt;<br \/>\n  &lt;date&gt;2024-05-20T10:30:15.123456789Z&lt;\/date&gt;<br \/>\n  &lt;millis&gt;1716198615123&lt;\/millis&gt;<br \/>\n  &lt;sequence&gt;0&lt;\/sequence&gt;<br \/>\n  &lt;logger&gt;xml.demo&lt;\/logger&gt;<br \/>\n  &lt;level&gt;INFO&lt;\/level&gt;<br \/>\n  &lt;class&gt;XmlFormatterDemo&lt;\/class&gt;<br \/>\n  &lt;method&gt;main&lt;\/method&gt;<br \/>\n  &lt;thread&gt;1&lt;\/thread&gt;<br \/>\n  &lt;message&gt;XML\u683c\u5f0f\u65e5\u5fd7&lt;\/message&gt;<br \/>\n&lt;\/record&gt;<br \/>\n&lt;\/log&gt;<br \/>\n*\/<\/span><\/p>\n<h4>6.3 \u81ea\u5b9a\u4e49Formatter<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>time<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Instant<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>time<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">ZoneId<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>time<span class=\"token punctuation\">.<\/span>format<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">DateTimeFormatter<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token operator\">*<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u81ea\u5b9a\u4e49Formatter&#xff1a;\u53ea\u9700\u5b9e\u73b0 format(LogRecord)<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">JsonFormatter<\/span> <span class=\"token keyword\">extends<\/span> <span class=\"token class-name\">Formatter<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\">DateTimeFormatter<\/span> <span class=\"token constant\">FMT<\/span> <span class=\"token operator\">&#061;<\/span><br \/>\n            <span class=\"token class-name\">DateTimeFormatter<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">ofPattern<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;yyyy-MM-dd HH:mm:ss.SSS&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                             <span class=\"token punctuation\">.<\/span><span class=\"token function\">withZone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">ZoneId<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">systemDefault<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">format<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">LogRecord<\/span> record<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">StringBuilder<\/span> sb <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">StringBuilder<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">128<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        sb<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;{&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        sb<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;time\\\\&#034;:\\\\&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token constant\">FMT<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">format<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Instant<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">ofEpochMilli<\/span><span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getMillis<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;,&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        sb<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;level\\\\&#034;:\\\\&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;,&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        sb<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;logger\\\\&#034;:\\\\&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getLoggerName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;,&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        sb<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;msg\\\\&#034;:\\\\&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">escape<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">formatMessage<\/span><span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u6709\u5f02\u5e38\u65f6\u9644\u4e0a\u5806\u6808<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getThrown<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>io<span class=\"token punctuation\">.<\/span><\/span>StringWriter<\/span> sw <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>io<span class=\"token punctuation\">.<\/span><\/span>StringWriter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getThrown<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">printStackTrace<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>io<span class=\"token punctuation\">.<\/span><\/span>PrintWriter<\/span><span class=\"token punctuation\">(<\/span>sw<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            sb<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;,\\\\&#034;exception\\\\&#034;:\\\\&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">escape<\/span><span class=\"token punctuation\">(<\/span>sw<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        sb<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;}\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> sb<span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7b80\u5355\u8f6c\u4e49&#xff0c;\u9632\u6b62JSON\u7834\u574f<\/span><br \/>\n    <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">escape<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span> s<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> s<span class=\"token punctuation\">.<\/span><span class=\"token function\">replace<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\\\\\&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\\\\\\\\\\\\\\\\&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">replace<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\&#034;&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\\\\\\\\\\\\&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token punctuation\">.<\/span><span class=\"token function\">replace<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\\\\\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">replace<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\r&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\\\\\\\\r&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<hr \/>\n<h3>7. Filter\u8fc7\u6ee4\u5668<\/h3>\n<p>JDK 8 \u8d77 Filter \u662f\u51fd\u6570\u5f0f\u63a5\u53e3&#xff0c;\u53ef\u76f4\u63a5\u7528 Lambda\u3002Logger \u548c Handler \u5404\u53ef\u6302\u4e00\u4e2a&#xff0c;\u4e24\u8005\u90fd\u901a\u8fc7\u624d\u53d1\u5e03\u3002<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token operator\">*<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">FilterDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;filter.demo&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">ConsoleHandler<\/span> h <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ConsoleHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        h<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>h<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">ALL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 1) Logger\u7ea7\u8fc7\u6ee4&#xff1a;\u5c4f\u853d\u5305\u542b&#034;heartbeat&#034;\u7684\u5608\u6742\u65e5\u5fd7<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setFilter<\/span><span class=\"token punctuation\">(<\/span>record <span class=\"token operator\">-&gt;<\/span><br \/>\n                <span class=\"token operator\">!<\/span>record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getMessage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">contains<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;heartbeat&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6b63\u5e38\u4e1a\u52a1\u65e5\u5fd7&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>        <span class=\"token comment\">\/\/ \u8f93\u51fa<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;heartbeat check ok&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u88ab\u8fc7\u6ee4<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 2) Handler\u7ea7\u8fc7\u6ee4&#xff1a;\u53ea\u8f93\u51faSEVERE<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setFilter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u79fb\u9664Logger\u7ea7\u8fc7\u6ee4<\/span><br \/>\n        h<span class=\"token punctuation\">.<\/span><span class=\"token function\">setFilter<\/span><span class=\"token punctuation\">(<\/span>record <span class=\"token operator\">-&gt;<\/span> record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">intValue<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&gt;&#061;<\/span> <span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">SEVERE<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">intValue<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">warning<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8b66\u544a\u4e0d\u8f93\u51fa&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">severe<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u4e25\u91cd\u9519\u8bef\u624d\u8f93\u51fa&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 3) \u91c7\u6837\u8fc7\u6ee4&#xff1a;\u6bcf3\u6761\u8bb01\u6761&#xff08;\u964d\u4f4e\u9ad8\u9891\u65e5\u5fd7\u91cf&#xff09;<\/span><br \/>\n        <span class=\"token keyword\">final<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>concurrent<span class=\"token punctuation\">.<\/span>atomic<span class=\"token punctuation\">.<\/span><\/span>AtomicInteger<\/span> counter <span class=\"token operator\">&#061;<\/span><br \/>\n                <span class=\"token keyword\">new<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>concurrent<span class=\"token punctuation\">.<\/span>atomic<span class=\"token punctuation\">.<\/span><\/span>AtomicInteger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        h<span class=\"token punctuation\">.<\/span><span class=\"token function\">setFilter<\/span><span class=\"token punctuation\">(<\/span>record <span class=\"token operator\">-&gt;<\/span> counter<span class=\"token punctuation\">.<\/span><span class=\"token function\">incrementAndGet<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">%<\/span> <span class=\"token number\">3<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<hr \/>\n<h3>8. LogRecord\u4e0e\u65e5\u5fd7\u6d41\u8f6c<\/h3>\n<p>LogRecord \u662f\u65e5\u5fd7\u4e8b\u4ef6\u7684\u8f7d\u4f53&#xff0c;\u5c01\u88c5\u4e86\u4e00\u6b21\u65e5\u5fd7\u8c03\u7528\u7684\u5168\u90e8\u4fe1\u606f&#xff1a;<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Level<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">LogRecord<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">LogRecordDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">LogRecord<\/span> record <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">LogRecord<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">INFO<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u7528\u6237{0}\u767b\u5f55&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        record<span class=\"token punctuation\">.<\/span><span class=\"token function\">setParameters<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Object<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ {0}\u53c2\u6570<\/span><\/p>\n<p>        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7ea7\u522b: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6d88\u606f: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getMessage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u53c2\u6570: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span>Arrays<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getParameters<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u65f6\u95f4: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getMillis<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7ebf\u7a0b: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getThreadID<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5e8f\u53f7: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getSequenceNumber<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5168\u5c40\u9012\u589e<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6e90\u7c7b: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getSourceClassName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6e90\u65b9\u6cd5: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getSourceMethodName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u6ce8\u610f&#xff1a;Handler \u7684 publish(LogRecord) \u6536\u5230\u7684 record \u4e0e\u5176\u4ed6 Handler \u662f\u540c\u4e00\u5bf9\u8c61\u5f15\u7528\u3002\u5982\u679c\u81ea\u5b9a\u4e49 Handler \u4fee\u6539\u4e86 record&#xff08;\u5982\u6539\u6d88\u606f&#xff09;&#xff0c;\u4f1a\u5f71\u54cd\u540e\u7eed Handler\u3002\u5f02\u6b65\u4f7f\u7528\u65f6\u66f4\u8981\u5c0f\u5fc3\u751f\u547d\u5468\u671f\u3002<\/p>\n<hr \/>\n<h3>9. LogManager\u4e0e\u914d\u7f6e\u6587\u4ef6<\/h3>\n<h4>9.1 \u914d\u7f6e\u52a0\u8f7d\u4f18\u5148\u7ea7<\/h4>\n<p>\u2460 \u7cfb\u7edf\u5c5e\u6027 java.util.logging.config.class \u6307\u5b9a\u7684\u914d\u7f6e\u7c7b&#xff08;\u6700\u9ad8\u4f18\u5148\u7ea7&#xff09;<br \/>\n\u2461 \u7cfb\u7edf\u5c5e\u6027 java.util.logging.config.file \u6307\u5b9a\u7684\u6587\u4ef6<br \/>\n\u2462 $JAVA_HOME\/conf\/logging.properties&#xff08;JDK9&#043;&#xff1b;JDK8\u4e3a jre\/lib\/logging.properties&#xff09;<br \/>\n\u2463 \u90fd\u6ca1\u6709 \u2192 \u4f7f\u7528\u5185\u7f6e\u9ed8\u8ba4\u914d\u7f6e&#xff08;\u6839Logger&#061;INFO &#043; ConsoleHandler&#xff09;<\/p>\n<p>\u542f\u52a8\u65b9\u5f0f&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f1&#xff1a;\u5916\u90e8\u914d\u7f6e\u6587\u4ef6<\/span><br \/>\n<span class=\"token function\">java<\/span> <span class=\"token parameter variable\">-Djava.util.logging.config.file<\/span><span class=\"token operator\">&#061;<\/span>my-logging.properties <span class=\"token parameter variable\">-jar<\/span> app.jar<\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f2&#xff1a;\u5b9a\u5236SimpleFormatter\u683c\u5f0f<\/span><br \/>\n<span class=\"token function\">java<\/span> <span class=\"token parameter variable\">-Djava.util.logging.SimpleFormatter.format<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;%1<span class=\"token variable\">$tF<\/span> %1<span class=\"token variable\">$tT<\/span> [%4<span class=\"token variable\">$s<\/span>] %5<span class=\"token variable\">$s<\/span>%6<span class=\"token variable\">$s<\/span>%n&#034;<\/span> <span class=\"token parameter variable\">-jar<\/span> app.jar<\/p>\n<h4>9.2 logging.properties \u5b8c\u6574\u793a\u4f8b<\/h4>\n<p># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n# logging.properties \u793a\u4f8b<br \/>\n# &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/p>\n<p># \u6839Logger\u6302\u8f7d\u7684Handler\u5217\u8868&#xff08;\u9017\u53f7\u5206\u9694&#xff09;<br \/>\nhandlers &#061; java.util.logging.ConsoleHandler, java.util.logging.FileHandler<\/p>\n<p># \u6839Logger\u7ea7\u522b<br \/>\n.level &#061; INFO<\/p>\n<p># &#8212;- \u6309\u5305\u540d\/Logger\u540d\u8bbe\u7f6e\u7ea7\u522b&#xff08;\u5b50\u7ea7\u7ee7\u627f&#xff09; &#8212;-<br \/>\ncom.example.level &#061; FINE<br \/>\ncom.example.dao.level &#061; FINEST<br \/>\norg.hibernate.level &#061; WARNING<\/p>\n<p># &#8212;- ConsoleHandler \u914d\u7f6e &#8212;-<br \/>\njava.util.logging.ConsoleHandler.level &#061; ALL<br \/>\njava.util.logging.ConsoleHandler.formatter &#061; java.util.logging.SimpleFormatter<\/p>\n<p># &#8212;- FileHandler \u914d\u7f6e &#8212;-<br \/>\njava.util.logging.FileHandler.pattern &#061; %h\/myapp%u.log<br \/>\njava.util.logging.FileHandler.limit &#061; 5000000<br \/>\njava.util.logging.FileHandler.count &#061; 10<br \/>\njava.util.logging.FileHandler.append &#061; true<br \/>\njava.util.logging.FileHandler.formatter &#061; java.util.logging.SimpleFormatter<\/p>\n<p># &#8212;- SimpleFormatter \u5355\u884c\u683c\u5f0f &#8212;-<br \/>\njava.util.logging.SimpleFormatter.format &#061; %1$tF %1$tT [%4$s] %3$s &#8211; %5$s%6$s%n<\/p>\n<h4>9.3 \u7f16\u7a0b\u5f0f\u914d\u7f6e<\/h4>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>io<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">ByteArrayInputStream<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>nio<span class=\"token punctuation\">.<\/span>charset<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">StandardCharsets<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">LogManager<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Logger<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ProgrammaticConfigDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">throws<\/span> <span class=\"token class-name\">Exception<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u7528\u4ee3\u7801\u65b9\u5f0f\u63d0\u4f9bproperties\u5185\u5bb9<\/span><br \/>\n        <span class=\"token class-name\">String<\/span> config <span class=\"token operator\">&#061;<\/span> <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\n                handlers &#061; java.util.logging.ConsoleHandler<br \/>\n                .level &#061; INFO<br \/>\n                java.util.logging.ConsoleHandler.level &#061; ALL<br \/>\n                java.util.logging.ConsoleHandler.formatter &#061; java.util.logging.SimpleFormatter<br \/>\n                com.example.level &#061; FINE<br \/>\n                &#034;&#034;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">LogManager<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogManager<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">readConfiguration<\/span><span class=\"token punctuation\">(<\/span><br \/>\n                <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ByteArrayInputStream<\/span><span class=\"token punctuation\">(<\/span>config<span class=\"token punctuation\">.<\/span><span class=\"token function\">getBytes<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">StandardCharsets<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">UTF_8<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;com.example&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">fine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;FINE\u7ea7\u522b\u73b0\u5728\u53ef\u89c1\u4e86&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<hr \/>\n<h3>10. \u81ea\u5b9a\u4e49Handler\u4e0eFormatter<\/h3>\n<p>\u5c06\u65e5\u5fd7\u5199\u5165\u6570\u636e\u5e93\u7684\u5178\u578b\u573a\u666f&#xff1a;<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token operator\">*<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/**<br \/>\n * \u81ea\u5b9a\u4e49Handler&#xff1a;\u5c06SEVERE\u7ea7\u65e5\u5fd7\u5199\u5165\u6570\u636e\u5e93&#xff08;\u6b64\u5904\u7528\u5185\u5b58List\u6a21\u62df&#xff09;<br \/>\n *\/<\/span><br \/>\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">DatabaseHandler<\/span> <span class=\"token keyword\">extends<\/span> <span class=\"token class-name\">Handler<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u5b9e\u9645\u9879\u76ee\u4e2d\u6ce8\u5165DataSource&#xff0c;\u8fd9\u91cc\u7528List\u6a21\u62df\u6570\u636e\u5e93\u8868<\/span><br \/>\n    <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span>List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> logTable <span class=\"token operator\">&#061;<\/span><br \/>\n            <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span>Collections<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">synchronizedList<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span>ArrayList<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">publish<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">LogRecord<\/span> record<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ 1) \u7ea7\u522b\u4e0e\u8fc7\u6ee4\u5224\u65ad&#xff08;Handler\u57fa\u7c7b\u4e0d\u4f1a\u81ea\u52a8\u505a&#xff0c;\u9700\u624b\u52a8\u8c03\u7528&#xff09;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span><span class=\"token function\">isLoggable<\/span><span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token comment\">\/\/ 2) \u683c\u5f0f\u5316<\/span><br \/>\n        <span class=\"token class-name\">String<\/span> message <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">getFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token keyword\">null<\/span><br \/>\n                <span class=\"token operator\">?<\/span> <span class=\"token function\">getFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">formatMessage<\/span><span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token operator\">:<\/span> record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getMessage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token comment\">\/\/ 3) \u5199\u5165\u76ee\u6807&#xff08;\u6b64\u5904\u4e3aINSERT log_table VALUES(&#8230;)&#xff09;<\/span><br \/>\n        logTable<span class=\"token punctuation\">.<\/span><span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span>record<span class=\"token punctuation\">.<\/span><span class=\"token function\">getLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034; | &#034;<\/span> <span class=\"token operator\">&#043;<\/span> message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">flush<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token comment\">\/* \u6570\u636e\u5e93\u63d0\u4ea4 *\/<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token annotation punctuation\">&#064;Override<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">throws<\/span> <span class=\"token class-name\">SecurityException<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token comment\">\/* \u91ca\u653e\u8fde\u63a5 *\/<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">public<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span>List<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> <span class=\"token function\">getLogTable<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> logTable<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6f14\u793a<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;db.audit&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">DatabaseHandler<\/span> dbHandler <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">DatabaseHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        dbHandler<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">SEVERE<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u53ea\u5165\u5e93\u4e25\u91cd\u9519\u8bef<\/span><br \/>\n        dbHandler<span class=\"token punctuation\">.<\/span><span class=\"token function\">setFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">SimpleFormatter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">addHandler<\/span><span class=\"token punctuation\">(<\/span>dbHandler<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">warning<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8b66\u544a\u4e0d\u5165\u5e93&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">severe<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u652f\u4ed8\u5931\u8d25&#xff0c;\u9700\u8981\u4eba\u5de5\u4ecb\u5165&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5165\u5e93<\/span><\/p>\n<p>        <span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6570\u636e\u5e93\u4e2d\u7684\u65e5\u5fd7: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> dbHandler<span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogTable<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<hr \/>\n<h3>11. \u4e0eSLF4J\u6865\u63a5<\/h3>\n<h4>11.1 \u4e3a\u4ec0\u4e48\u9700\u8981\u6865\u63a5<\/h4>\n<p>\u8bb8\u591a JDK \u5185\u90e8\u7ec4\u4ef6\u548c\u7b2c\u4e09\u65b9\u5e93&#xff08;\u5982 HttpClient\u3001\u90e8\u5206\u65e7\u7248\u6846\u67b6&#xff09;\u76f4\u63a5\u4f7f\u7528 JUL\u3002\u5982\u679c\u5e94\u7528\u4e3b\u65e5\u5fd7\u8d70 SLF4J &#043; Logback&#xff0c;\u5c31\u9700\u8981\u628a JUL \u65e5\u5fd7\u7edf\u4e00\u6c47\u5165&#xff0c;\u5426\u5219\u65e5\u5fd7\u6563\u843d\u4e24\u5904\u3002<\/p>\n<h4>11.2 jul-to-slf4j \u6865\u63a5\u6b65\u9aa4<\/h4>\n<p><span class=\"token comment\">&lt;!&#8211; pom.xml&#xff1a;\u5f15\u5165SLF4J\u6865\u63a5\u5668 &#8211;&gt;<\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>dependency<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>groupId<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>org.slf4j<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>groupId<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>artifactId<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>jul-to-slf4j<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>artifactId<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>version<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>2.0.13<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>version<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>dependency<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>dependency<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>groupId<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>ch.qos.logback<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>groupId<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>artifactId<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>logback-classic<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>artifactId<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>version<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>1.4.14<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>version<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>dependency<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">org<span class=\"token punctuation\">.<\/span>slf4j<span class=\"token punctuation\">.<\/span>bridge<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">SLF4JBridgeHandler<\/span><\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Logger<\/span><\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">JulToSlf4jBridgeDemo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ 1) \u79fb\u9664\u6839Logger\u9ed8\u8ba4\u7684ConsoleHandler&#xff08;\u5426\u5219JUL\u65e5\u5fd7\u53cc\u4efd\u8f93\u51fa&#xff09;<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span> root <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span>Handler<\/span> h <span class=\"token operator\">:<\/span> root<span class=\"token punctuation\">.<\/span><span class=\"token function\">getHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            root<span class=\"token punctuation\">.<\/span><span class=\"token function\">removeHandler<\/span><span class=\"token punctuation\">(<\/span>h<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token comment\">\/\/ 2) \u5b89\u88c5\u6865\u63a5Handler&#xff1a;JUL\u65e5\u5fd7 \u2192 SLF4J \u2192 Logback<\/span><br \/>\n        <span class=\"token class-name\">SLF4JBridgeHandler<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">install<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token comment\">\/\/ 3) \u653e\u5f00JUL\u7ea7\u522b&#xff0c;\u8ba9SLF4J\u7aef\u63a7\u5236\u8fc7\u6ee4<\/span><br \/>\n        root<span class=\"token punctuation\">.<\/span><span class=\"token function\">setLevel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>logging<span class=\"token punctuation\">.<\/span><\/span>Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">FINEST<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u4e4b\u540e\u6240\u6709JUL\u65e5\u5fd7\u90fd\u8d70Logback\u7684\u683c\u5f0f\u4e0e\u8f93\u51fa\u76ee\u6807<\/span><br \/>\n        <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;legacy.lib&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8fd9\u6761JUL\u65e5\u5fd7\u73b0\u5728\u7531Logback\u8f93\u51fa&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u6027\u80fd\u6ce8\u610f&#xff1a;\u6865\u63a5\u901a\u8fc7\u53cd\u5c04\u4ece LogRecord \u63d0\u53d6\u8c03\u7528\u70b9\u4fe1\u606f&#xff0c;\u6709\u989d\u5916\u5f00\u9500\u3002SLF4J \u5b98\u65b9\u6587\u6863\u5efa\u8bae&#xff1a;\u5728\u6865\u63a5\u573a\u666f\u914d\u5408\u7ea7\u522b\u63a7\u5236&#xff08;\u6839 Logger \u7ea7\u522b\u4e0d\u8981\u592a\u4f4e&#xff09;&#xff0c;\u53ef\u51cf\u5c11\u65e0\u6548\u8f6c\u53d1\u3002Logback \u4e5f\u63d0\u4f9b\u4e86 LevelChangePropagator \u6765\u628a Logback \u7684\u7ea7\u522b\u53d8\u66f4\u4f20\u64ad\u56de JUL&#xff0c;\u964d\u4f4e\u5f00\u9500\u3002<\/p>\n<h4>11.3 \u53cd\u5411&#xff1a;SLF4J \u2192 JUL&#xff1f;<\/h4>\n<p>\u4e0d\u5e38\u89c1\u3002\u82e5\u6709\u5e93\u4f7f\u7528 SLF4J-api&#xff0c;\u800c\u4f60\u60f3\u7528 JUL \u8f93\u51fa&#xff0c;\u53ef\u5f15\u5165 slf4j-jdk14 \u7ed1\u5b9a&#xff08;SLF4J 1.x \u98ce\u683c&#xff09;\u3002\u73b0\u4ee3\u9879\u76ee\u4e00\u822c\u53cd\u8fc7\u6765\u7edf\u4e00\u3002<\/p>\n<hr \/>\n<h3>12. \u6700\u4f73\u5b9e\u8df5\u4e0e\u5e38\u89c1\u9677\u9631<\/h3>\n<h4>12.1 \u6700\u4f73\u5b9e\u8df5\u6e05\u5355<\/h4>\n<p><span class=\"token comment\">\/\/ \u2705 1. Logger\u5b58\u4e3astatic final\u5b57\u6bb5&#xff08;\u9632GC &#043; \u590d\u7528&#xff09;<\/span><br \/>\n<span class=\"token keyword\">private<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token class-name\">Logger<\/span> logger <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Logger<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">MyService<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">class<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u2705 2. \u7528\u53c2\u6570\u5316\u6d88\u606f\u4ee3\u66ff\u5b57\u7b26\u4e32\u62fc\u63a5&#xff08;\u7ea7\u522b\u4e0d\u591f\u65f6\u4e0d\u683c\u5f0f\u5316&#xff09;<\/span><br \/>\nlogger<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">INFO<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u7528\u6237{0}\u6d88\u8d39{1}\u5143&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Object<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">{<\/span>user<span class=\"token punctuation\">,<\/span> amount<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token comment\">\/\/ \u274c logger.info(&#034;\u7528\u6237&#034; &#043; user &#043; &#034;\u6d88\u8d39&#034; &#043; amount &#043; &#034;\u5143&#034;);<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u2705 3. \u6602\u8d35\u53c2\u6570\u5148\u505a\u7ea7\u522b\u5224\u65ad<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">isLoggable<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">FINEST<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">finest<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5feb\u7167: &#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">expensiveToString<\/span><span class=\"token punctuation\">(<\/span>obj<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u2705 4. \u5f02\u5e38\u65e5\u5fd7\u5e26Throwable&#xff0c;\u4fdd\u7559\u5b8c\u6574\u5806\u6808<\/span><br \/>\nlogger<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Level<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">SEVERE<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u4fdd\u5b58\u8ba2\u5355\u5931\u8d25, orderId&#061;&#034;<\/span> <span class=\"token operator\">&#043;<\/span> id<span class=\"token punctuation\">,<\/span> exception<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u2705 5. \u5173\u95ed\u5411\u7236Handler\u4f20\u64ad&#xff0c;\u907f\u514d\u91cd\u590d\u8f93\u51fa<\/span><br \/>\nchildLogger<span class=\"token punctuation\">.<\/span><span class=\"token function\">setUseParentHandlers<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>12.2 \u5e38\u89c1\u9677\u9631<\/h4>\n<table>\n<tr>\u9677\u9631\u73b0\u8c61\u89e3\u51b3<\/tr>\n<tbody>\n<tr>\n<td align=\"left\">Logger\u672a\u5b58\u5b57\u6bb5<\/td>\n<td align=\"left\">\u65e5\u5fd7&#034;\u968f\u673a\u6d88\u5931&#034;&#xff0c;\u88abGC\u56de\u6536<\/td>\n<td align=\"left\">\u5b58\u4e3a static final \u5b57\u6bb5<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Handler\u7ea7\u522b\u672a\u653e\u5f00<\/td>\n<td align=\"left\">logger.fine() \u65e0\u8f93\u51fa<\/td>\n<td align=\"left\">handler.setLevel(Level.ALL)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u5fd8\u8bb0\u5173\u4f20\u64ad<\/td>\n<td align=\"left\">\u540c\u4e00\u6761\u65e5\u5fd7\u6253\u5370\u591a\u6b21<\/td>\n<td align=\"left\">setUseParentHandlers(false)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">FileHandler\u672aclose<\/td>\n<td align=\"left\">\u65e5\u5fd7\u6587\u4ef6\u7f3a\u5c3e\u90e8\/\u9501\u6587\u4ef6\u6b8b\u7559<\/td>\n<td align=\"left\">try-with-resources \u6216\u663e\u5f0fclose<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u8f93\u51fa\u5230err\u56f0\u60d1<\/td>\n<td align=\"left\">ConsoleHandler\u5199System.err<\/td>\n<td align=\"left\">\u4e86\u89e3\u5373\u53ef&#xff0c;\u6216\u6362\u81ea\u5b9a\u4e49StreamHandler<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u5360\u4f4d\u7b26\u8bed\u6cd5\u9519<\/td>\n<td align=\"left\">{0} \u4e0d\u751f\u6548<\/td>\n<td align=\"left\">JUL\u7528MessageFormat\u8bed\u6cd5&#xff0c;\u975eSLF4J\u7684{}<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u9ed8\u8ba4\u914d\u7f6e\u8986\u76d6<\/td>\n<td align=\"left\">\u81ea\u5b9a\u4e49\u914d\u7f6e\u4e0d\u751f\u6548<\/td>\n<td align=\"left\">\u68c0\u67e5\u52a0\u8f7d\u4f18\u5148\u7ea7&#xff0c;\u7528-Djava.util.logging.config.file<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>12.3 \u4ec0\u4e48\u573a\u666f\u9002\u5408JUL<\/h4>\n<ul>\n<li>\u8f7b\u91cf\u5de5\u5177\/\u811a\u672c&#xff1a;\u4e0d\u60f3\u5f15\u5165\u7b2c\u4e09\u65b9\u4f9d\u8d56<\/li>\n<li>\u5e93\u5f00\u53d1&#xff1a;JDK \u5185\u7f6e&#xff0c;\u4e0d\u7ed9\u4f7f\u7528\u65b9\u5f3a\u52a0\u65e5\u5fd7\u5b9e\u73b0&#xff08;\u4f46\u66f4\u63a8\u8350 SLF4J-api&#xff09;<\/li>\n<li>\u53d7\u7ba1\u63a7\u73af\u5883&#xff1a;\u53ea\u5141\u8bb8 JDK \u6807\u51c6\u5e93<\/li>\n<li>\u5e94\u7528\u4e3b\u65e5\u5fd7&#xff1a;\u4e0d\u63a8\u8350&#xff0c;\u5efa\u8bae SLF4J &#043; Logback\/Log4j2<\/li>\n<\/ul>\n<hr \/>\n<h3>13. \u7248\u672c\u6f14\u8fdb<\/h3>\n<table>\n<tr>\u7248\u672c\u5e74\u4efd\u53d8\u5316<\/tr>\n<tbody>\n<tr>\n<td align=\"center\">JDK 1.4<\/td>\n<td align=\"center\">2002<\/td>\n<td align=\"left\">\u9996\u6b21\u5f15\u5165 java.util.logging \u5168\u5957API&#xff08;JSR 47&#xff09;&#xff1a;Logger\u3001Handler\u3001Formatter\u3001Level\u3001Filter\u3001LogManager\u3001LogRecord<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">JDK 5<\/td>\n<td align=\"center\">2004<\/td>\n<td align=\"left\">Logger.getAnonymousLogger() \u7b49\u5c0f\u5e45\u5b8c\u5584<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">JDK 7<\/td>\n<td align=\"center\">2011<\/td>\n<td align=\"left\">Logger.getGlobal()&#xff1b;SimpleFormatter.format \u7cfb\u7edf\u5c5e\u6027\u652f\u6301\u81ea\u5b9a\u4e49\u683c\u5f0f<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">JDK 8<\/td>\n<td align=\"center\">2014<\/td>\n<td align=\"left\">Filter \u6210\u4e3a\u51fd\u6570\u5f0f\u63a5\u53e3&#xff0c;\u652f\u6301 Lambda<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">JDK 9<\/td>\n<td align=\"center\">2017<\/td>\n<td align=\"left\">\u6a21\u5757\u5316&#xff1a;\u5f52\u5165 java.logging \u6a21\u5757&#xff1b;\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6\u8def\u5f84\u53d8\u4e3a $JAVA_HOME\/conf\/logging.properties&#xff1b;\u5f15\u5165 PlatformLogger&#xff08;JDK\u5185\u90e8\u65e5\u5fd7&#xff09;<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">JDK 10<\/td>\n<td align=\"center\">2018<\/td>\n<td align=\"left\">PlatformLogger.LoggerFinder SPI&#xff1a;\u53ef\u66ff\u6362 JDK \u5185\u90e8\u65e5\u5fd7\u540e\u7aef&#xff08;\u5982\u628aJDK\u5185\u90e8\u65e5\u5fd7\u5bfc\u5411\u81ea\u5b9a\u4e49\u5b9e\u73b0&#xff09;<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">JDK 21<\/td>\n<td align=\"center\">2023<\/td>\n<td align=\"left\">API \u4fdd\u6301\u7a33\u5b9a&#xff0c;\u65e0\u91cd\u5927\u53d8\u66f4&#xff1b;\u4e0e\u865a\u62df\u7ebf\u7a0b\u7b49\u5e76\u53d1\u7279\u6027\u81ea\u7136\u517c\u5bb9<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u603b\u7ed3&#xff1a;JUL \u81ea 1.4 \u5f15\u5165\u540e API \u9ad8\u5ea6\u7a33\u5b9a&#xff0c;\u6f14\u8fdb\u4ee5\u5c0f\u5e45\u589e\u5f3a\u4e3a\u4e3b\u3002\u5b83\u7684\u4ef7\u503c\u5728\u4e8e&#034;\u6c38\u8fdc\u5b58\u5728\u3001\u96f6\u4f9d\u8d56&#034;&#xff1b;\u4f01\u4e1a\u7ea7\u5e94\u7528\u901a\u5e38\u901a\u8fc7\u6865\u63a5\u5c06\u5176\u7eb3\u5165 SLF4J \u7edf\u4e00\u4f53\u7cfb\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260903050115-6a98ff1be987f.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java\u65e5\u5fd7API&#xff08;JUL&#xff09;\u8be6\u89e3 \u76ee\u5f55<br \/>\n\u6982\u8ff0\u4e0e\u5386\u53f2\u6838\u5fc3\u67b6\u6784\u4e0e\u7ec4\u4ef6\u5173\u7cfbLogger\u8be6\u89e3Level\u65e5\u5fd7\u7ea7\u522bHandler\u8f93\u51fa\u5904\u7406\u5668Formatter\u683c\u5f0f\u5316\u5668Filter\u8fc7\u6ee4\u5668LogRecord\u4e0e\u65e5\u5fd7\u6d41\u8f6cLogManager\u4e0e\u914d\u7f6e\u6587\u4ef6\u81ea\u5b9a\u4e49Handler\u4e0eFormatter\u4e0eSLF4J\u6865\u63a5\u6700\u4f73\u5b9e\u8df5\u4e0e\u5e38\u89c1\u9677\u9631\u7248\u672c\u6f14\u8fdb 1. \u6982\u8ff0\u4e0e\u5386\u53f2<br \/>\n1.1 \u4ec0\u4e48\u662fJUL<br \/>\nJUL&#xff08;Java Util Logging&#xff09;\u662f Java \u6807\u51c6\u5e93\u81ea<\/p>\n","protected":false},"author":2,"featured_media":99863,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[99,190],"topic":[],"class_list":["post-99864","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-java","tag-190"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java\u6df1\u5165\u89e3\u6790\u7bc7\u5341\u4e09\u4e4bJava\u65e5\u5fd7API\uff08JUL\uff09\u8be6\u89e3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/99864.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java\u6df1\u5165\u89e3\u6790\u7bc7\u5341\u4e09\u4e4bJava\u65e5\u5fd7API\uff08JUL\uff09\u8be6\u89e3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"Java\u65e5\u5fd7API&#xff08;JUL&#xff09;\u8be6\u89e3 \u76ee\u5f55 \u6982\u8ff0\u4e0e\u5386\u53f2\u6838\u5fc3\u67b6\u6784\u4e0e\u7ec4\u4ef6\u5173\u7cfbLogger\u8be6\u89e3Level\u65e5\u5fd7\u7ea7\u522bHandler\u8f93\u51fa\u5904\u7406\u5668Formatter\u683c\u5f0f\u5316\u5668Filter\u8fc7\u6ee4\u5668LogRecord\u4e0e\u65e5\u5fd7\u6d41\u8f6cLogManager\u4e0e\u914d\u7f6e\u6587\u4ef6\u81ea\u5b9a\u4e49Handler\u4e0eFormatter\u4e0eSLF4J\u6865\u63a5\u6700\u4f73\u5b9e\u8df5\u4e0e\u5e38\u89c1\u9677\u9631\u7248\u672c\u6f14\u8fdb 1. \u6982\u8ff0\u4e0e\u5386\u53f2 1.1 \u4ec0\u4e48\u662fJUL JUL&#xff08;Java Util Logging&#xff09;\u662f Java \u6807\u51c6\u5e93\u81ea\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/99864.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-03T05:01:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260903050115-6a98ff1be987f.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/99864.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/99864.html\",\"name\":\"Java\u6df1\u5165\u89e3\u6790\u7bc7\u5341\u4e09\u4e4bJava\u65e5\u5fd7API\uff08JUL\uff09\u8be6\u89e3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-03T05:01:17+00:00\",\"dateModified\":\"2026-09-03T05:01:17+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/99864.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/99864.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/99864.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\u6df1\u5165\u89e3\u6790\u7bc7\u5341\u4e09\u4e4bJava\u65e5\u5fd7API\uff08JUL\uff09\u8be6\u89e3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Java\u6df1\u5165\u89e3\u6790\u7bc7\u5341\u4e09\u4e4bJava\u65e5\u5fd7API\uff08JUL\uff09\u8be6\u89e3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/99864.html","og_locale":"zh_CN","og_type":"article","og_title":"Java\u6df1\u5165\u89e3\u6790\u7bc7\u5341\u4e09\u4e4bJava\u65e5\u5fd7API\uff08JUL\uff09\u8be6\u89e3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"Java\u65e5\u5fd7API&#xff08;JUL&#xff09;\u8be6\u89e3 \u76ee\u5f55 \u6982\u8ff0\u4e0e\u5386\u53f2\u6838\u5fc3\u67b6\u6784\u4e0e\u7ec4\u4ef6\u5173\u7cfbLogger\u8be6\u89e3Level\u65e5\u5fd7\u7ea7\u522bHandler\u8f93\u51fa\u5904\u7406\u5668Formatter\u683c\u5f0f\u5316\u5668Filter\u8fc7\u6ee4\u5668LogRecord\u4e0e\u65e5\u5fd7\u6d41\u8f6cLogManager\u4e0e\u914d\u7f6e\u6587\u4ef6\u81ea\u5b9a\u4e49Handler\u4e0eFormatter\u4e0eSLF4J\u6865\u63a5\u6700\u4f73\u5b9e\u8df5\u4e0e\u5e38\u89c1\u9677\u9631\u7248\u672c\u6f14\u8fdb 1. \u6982\u8ff0\u4e0e\u5386\u53f2 1.1 \u4ec0\u4e48\u662fJUL JUL&#xff08;Java Util Logging&#xff09;\u662f Java \u6807\u51c6\u5e93\u81ea","og_url":"https:\/\/www.wsisp.com\/helps\/99864.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-03T05:01:17+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260903050115-6a98ff1be987f.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"12 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/99864.html","url":"https:\/\/www.wsisp.com\/helps\/99864.html","name":"Java\u6df1\u5165\u89e3\u6790\u7bc7\u5341\u4e09\u4e4bJava\u65e5\u5fd7API\uff08JUL\uff09\u8be6\u89e3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-03T05:01:17+00:00","dateModified":"2026-09-03T05:01:17+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/99864.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/99864.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/99864.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"Java\u6df1\u5165\u89e3\u6790\u7bc7\u5341\u4e09\u4e4bJava\u65e5\u5fd7API\uff08JUL\uff09\u8be6\u89e3"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/99864","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=99864"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/99864\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/99863"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=99864"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=99864"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=99864"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=99864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}