{"id":1018,"date":"2022-06-19T21:40:56","date_gmt":"2022-06-19T13:40:56","guid":{"rendered":"http:\/\/175.24.184.226\/?p=1018"},"modified":"2022-06-19T21:40:56","modified_gmt":"2022-06-19T13:40:56","slug":"loguru%e9%85%8d%e7%bd%ae%e8%af%b4%e6%98%8e01","status":"publish","type":"post","link":"\/?p=1018","title":{"rendered":"Loguru\u914d\u7f6e\u8bf4\u660e01"},"content":{"rendered":"<p><strong>Loguru<\/strong> \u4e00\u4e2a\u80fd\u5f7b\u5e95\u89e3\u653e\u4f60\u7684<a href=\"https:\/\/pythondict.com\/tag\/\u65e5\u5fd7\/\">\u65e5\u5fd7<\/a>\u8bb0\u5f55\u5668\u3002<\/p>\n<p>\u5b83\u5373\u63d2\u5373\u7528\uff0c\u5177\u5907\u591a\u79cd\u65b9\u5f0f\u6eda\u52a8\u65e5\u5fd7\u3001\u81ea\u52a8\u538b\u7f29\u65e5\u5fd7\u6587\u4ef6\u3001\u5b9a\u65f6\u5220\u9664\u7b49\u529f\u80fd\u3002<\/p>\n<p>\u9664\u6b64\u4e4b\u5916\uff0c\u591a\u7ebf\u7a0b\u5b89\u5168\u3001\u9ad8\u4eae\u65e5\u5fd7\u3001\u65e5\u5fd7\u544a\u8b66\u7b49\u529f\u80fd\u4e5f\u4e0d\u5728\u8bdd\u4e0b\u3002<\/p>\n<p>\u4e0b\u9762\u5c31\u7ed9\u5927\u5bb6\u4ecb\u7ecd\u4e00\u4e0b\u8fd9\u4e2a\u5f3a\u5927<a href=\"https:\/\/pythondict.com\/tag\/tools\/\">\u5de5\u5177<\/a>\u7684\u57fa\u672c\u4f7f\u7528\u65b9\u6cd5\u3002<\/p>\n<p><img src=\"https:\/\/lemon-guess.oss-cn-hangzhou.aliyuncs.com\/2021030317012026.gif\" alt=\"img\" \/> <\/p>\n<p>Loguru \u5b89\u88c5\u65b9\u5f0f\u5f88\u7b80\u5355\uff0c\u6253\u5f00\u7ec8\u7aef\u8f93\u5165\uff1a<\/p>\n<pre><code class=\"language-shell\">pip install loguru<\/code><\/pre>\n<p>\u5373\u53ef\u5b8c\u6210\u5b89\u88c5\u3002<\/p>\n<h2>1.\u5373\u5f00\u5373\u7528<\/h2>\n<p>\u5982\u679c\u4f60\u9700\u8981\u8f93\u51fa debug \u65e5\u5fd7\u5230\u7ec8\u7aef\uff0c\u53ef\u4ee5\u8fd9\u4e48\u505a\uff1a<\/p>\n<pre><code class=\"language-python\">from loguru import logger\n\nlogger.debug(&quot;That&#039;s it, beautiful and simple logging!&quot;)<\/code><\/pre>\n<p>\u5176\u8f93\u51fa\u81ea\u5e26\u9ad8\u4eae\uff1a<\/p>\n<p><img src=\"https:\/\/lemon-guess.oss-cn-hangzhou.aliyuncs.com\/2021030317070750.png\" alt=\"img\" \/> <\/p>\n<p>\u5982\u679c\u4f60\u9700\u8981\u628a\u65e5\u5fd7\u8f93\u51fa\u5230\u6587\u4ef6\uff0c\u53ea\u9700\u8981\u8fd9\u6837\uff1a<\/p>\n<pre><code class=\"language-python\">from loguru import logger\nlogger.add(&quot;file_{time}.log&quot;)\nlogger.debug(&quot;That&#039;s it, beautiful and simple logging!&quot;)<\/code><\/pre>\n<p>\u8fd9\u6837\u5c31\u4f1a\u5728\u5f53\u524d\u8fd0\u884c\u7684\u6587\u4ef6\u5939\u4e0b\u751f\u6210 <strong>file_\u5f53\u524d\u65f6\u95f4.log<\/strong> \u7684\u65e5\u5fd7\u6587\u4ef6\uff1a<\/p>\n<p><img src=\"https:\/\/lemon-guess.oss-cn-hangzhou.aliyuncs.com\/2021030317084523.png\" alt=\"img\" \/><\/p>\n<h2>2.\u6eda\u52a8\u65e5\u5fd7\u4e0e\u538b\u7f29<\/h2>\n<p>\u4f7f\u7528 Loguru \u6211\u4eec\u53ef\u8f7b\u6613\u5730\u5b9e\u73b0\u6eda\u52a8\u65e5\u5fd7\u3002<\/p>\n<p><strong>\u6309\u65f6\u95f4\u6eda\u52a8<\/strong><\/p>\n<p>\u6bd4\u5982\u6309\u65f6\u95f4\u6eda\u52a8\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728 logger.add \u53c2\u6570\u4e2d\u6dfb\u52a0\u4e00\u4e2a rotation \u53c2\u6570\uff1a<\/p>\n<pre><code class=\"language-python\">from loguru import logger\nlogger.add(&quot;file_2.log&quot;, rotation=&quot;12:00&quot;)     # \u6bcf\u592912:00\u4f1a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6587\u4ef6\nlogger.debug(&quot;That&#039;s it, beautiful and simple logging!&quot;)<\/code><\/pre>\n<p>\u8fd9\u6837\uff0c\u5982\u679c\u5f53\u524d\u65f6\u95f4\u8fc7\u4e86\u8fd9\u4e2a\u8bbe\u5b9a\u7684\u65f6\u95f4\uff0c\u5b83\u5c31\u4f1a\u751f\u6210\u4e00\u4e2a\u65b0\u7684\u65e5\u5fd7\u6587\u4ef6\u3002\u5982\u679c\u6ca1\u6709\u5219\u4f7f\u7528\u539f\u6765\u7684\u65e5\u5fd7\u6587\u4ef6\uff1a<\/p>\n<p><img src=\"https:\/\/lemon-guess.oss-cn-hangzhou.aliyuncs.com\/2021030317120512.png\" alt=\"img\" \/> <\/p>\n<p>\u5982\u56fe\u6240\u793a\uff0c\u8fc7\u4e86\u8bbe\u5b9a\u7684\u65f6\u95f4\uff0c\u5219\u5c06\u539f\u6765\u7684 file_2.log \u91cd\u547d\u540d\uff0c\u5e76\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684 file_2.log \u6587\u4ef6\u3002<\/p>\n<p><strong>\u6309\u5927\u5c0f\u6eda\u52a8<\/strong><\/p>\n<p>\u9664\u4e86\u6309\u65f6\u95f4\u6eda\u52a8\u65e5\u5fd7\u5916\uff0cLoguru \u8fd8\u53ef\u4ee5\u6309\u65e5\u5fd7\u5927\u5c0f\u6eda\u52a8\uff1a<\/p>\n<pre><code class=\"language-python\">from loguru import logger\nlogger.add(&quot;file_1.log&quot;, rotation=&quot;1 MB&quot;)    # \u6eda\u52a8\u5927\u65e5\u5fd7\u6587\u4ef6\nlogger.debug(&quot;That&#039;s it, beautiful and simple logging!&quot;)<\/code><\/pre>\n<p>\u8fd9\u6837\uff0c\u4e00\u65e6\u65e5\u5fd7\u6587\u4ef6\u5927\u5c0f\u8d85\u8fc7 1 MB \u5c31\u4f1a\u4ea7\u751f\u65b0\u7684\u65e5\u5fd7\u6587\u4ef6\u3002<\/p>\n<p><strong>\u538b\u7f29\u65e5\u5fd7<\/strong><\/p>\n<p>\u5982\u679c\u4f60\u4e0d\u60f3\u5220\u9664\u539f\u6709\u65e5\u5fd7\u6587\u4ef6\uff0cLoguru \u8fd8\u652f\u6301\u5c06\u65e5\u5fd7\u76f4\u63a5\u538b\u7f29\uff1a<\/p>\n<pre><code class=\"language-python\">from loguru import logger\nlogger.add(&quot;file_Y.log&quot;, compression=&quot;zip&quot;)    # \u538b\u7f29\u65e5\u5fd7<\/code><\/pre>\n<h2>3.\u5176\u4ed6\u7279\u6027<\/h2>\n<p><strong>\u81ea\u5b9a\u4e49\u989c\u8272<\/strong><\/p>\n<p>Loguru \u662f\u652f\u6301\u81ea\u5b9a\u4e49\u989c\u8272\u7684\uff0c\u5982\u679c\u4f60\u4e0d\u559c\u6b22\u5b83\u9ed8\u8ba4\u7684\u989c\u8272\uff0c\u53ef\u4ee5\u8fd9\u4e48\u6539\uff1a<\/p>\n<pre><code class=\"language-python\">logger.add(sys.stdout, colorize=True, format=&quot;&lt;green&gt;{time}&lt;\/green&gt; &lt;level&gt;{message}&lt;\/level&gt;&quot;)<\/code><\/pre>\n<p>\u7c7b\u4f3c\u4e8eHTML\u6807\u7b7e <green><\/green> \u6807\u7b7e\u4e2d\u95f4\u7684\u6587\u5b57\u5c06\u4f1a\u88ab\u6807\u8bb0\u4e3a\u7eff\u8272\u3002<\/p>\n<p><strong>\u591a\u8fdb\u7a0b\u5b89\u5168<\/strong><\/p>\n<p>Loguru \u9ed8\u8ba4\u60c5\u51b5\u4e0b\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u4f46\u5b83\u4e0d\u662f\u591a\u8fdb\u7a0b\u5b89\u5168\u7684\u3002\u4e0d\u8fc7\u5982\u679c\u4f60\u9700\u8981\u591a\u8fdb\u7a0b\/\u5f02\u6b65\u8bb0\u5f55\u65e5\u5fd7\uff0c\u5b83\u4e5f\u80fd\u652f\u6301\uff0c\u53ea\u9700\u8981\u6dfb\u52a0\u4e00\u4e2a enqueue \u53c2\u6570\uff1a<\/p>\n<pre><code class=\"language-python\">logger.add(&quot;somefile.log&quot;, enqueue=True)<\/code><\/pre>\n<p><strong>\u652f\u6301Backtrace<\/strong><\/p>\n<p>\u5bf9\u4e8e\u65e5\u5fd7\u800c\u8a00\uff0c\u6ca1\u6709\u9519\u8bef\u5806\u6808\u7684\u65e5\u5fd7\u662f\u6ca1\u6709\u7075\u9b42\u7684\u3002Loguru \u5141\u8bb8\u663e\u793a\u6574\u4e2a\u5806\u6808\u4fe1\u606f\u6765\u5e2e\u52a9\u4f60\u53d1\u73b0\u95ee\u9898\uff08\u5305\u62ec\u53d8\u91cf\uff09\u3002<\/p>\n<p>\u6bd4\u5982\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\uff1a<\/p>\n<pre><code class=\"language-python\">logger.add(&quot;out.log&quot;, backtrace=True, diagnose=True)  # Caution, may leak sensitive data in prod\n\ndef func(a, b):\n    return a \/ b\n\ndef nested(c):\n    try:\n        func(5, c)\n    except ZeroDivisionError:\n        logger.exception(&quot;What?!&quot;)\n\nnested(0)<\/code><\/pre>\n<p>\u65e5\u5fd7\u5c06\u4f1a\u662f\u8fd9\u6837\u7684\uff1a<\/p>\n<p><img src=\"https:\/\/lemon-guess.oss-cn-hangzhou.aliyuncs.com\/2021030317290273.png\" alt=\"img\" \/> <\/p>\n<p>\u975e\u5e38\u6e05\u6670\u660e\u4e86\u3002<\/p>\n<p><strong>\u90ae\u4ef6\u544a\u8b66<\/strong><\/p>\n<p>Loguru \u53ef\u4ee5\u548c\u5f3a\u5927\u7684\u90ae\u4ef6\u901a\u77e5\u6a21\u5757 <code>notifiers<\/code> \u5e93\u7ed3\u5408\u4f7f\u7528\uff0c\u4ee5\u5728\u7a0b\u5e8f\u610f\u5916\u5931\u8d25\u65f6\u63a5\u6536\u7535\u5b50\u90ae\u4ef6\uff0c\u6216\u53d1\u9001\u8bb8\u591a\u5176\u4ed6\u7c7b\u578b\u7684\u901a\u77e5\u3002<\/p>\n<pre><code class=\"language-python\">import notifiers\n\nparams = {\n    &quot;username&quot;: &quot;you@gmail.com&quot;,\n    &quot;password&quot;: &quot;abc123&quot;,\n    &quot;to&quot;: &quot;dest@gmail.com&quot;\n}\n\n# \u521d\u59cb\u5316\u65f6\u53d1\u9001\u4e00\u5c01\u90ae\u4ef6\nnotifier = notifiers.get_notifier(&quot;gmail&quot;)\nnotifier.notify(message=&quot;The application is running!&quot;, **params)\n\n# \u53d1\u751fError\u65e5\u5fd7\u65f6\uff0c\u53d1\u90ae\u4ef6\u8fdb\u884c\u8b66\u62a5\nfrom notifiers.logging import NotificationHandler\n\nhandler = NotificationHandler(&quot;gmail&quot;, defaults=params)\nlogger.add(handler, level=&quot;ERROR&quot;)<\/code><\/pre>\n<p>\u8fd9\u6837\u914d\u7f6e\u4e4b\u540e\uff0c\u6bcf\u6b21\u4ea7\u751f Error \u65e5\u5fd7\uff0c\u7a0b\u5e8f\u90fd\u4f1a\u81ea\u52a8\u5411\u4f60\u7684\u90ae\u7bb1\u53d1\u9001\u544a\u8b66\uff0c\u771f\u7684\u6781\u5176\u65b9\u4fbf\u3002<\/p>\n<p>\u9664\u4e86\u8fd9\u4e9b\u7279\u6027\u5916\uff0cLoguru \u8fd8\u652f\u6301\u4e0e Python \u539f\u751f\u7684 Logging \u6a21\u5757\u517c\u5bb9\u4f7f\u7528\uff0c\u4f60\u53ef\u4ee5\u5c06\u539f\u59cb\u7684\u6807\u51c6\u65e5\u5fd7\u8bb0\u5f55\u5668\u8bb0\u5f55\u7684\u6240\u6709\u4fe1\u606f\u8f6c\u79fb\u5230Loguru\u4e2d\u3002<\/p>\n<p>\u4f60\u8fd8\u53ef\u4ee5\u57fa\u4e8e Loguru \u5b9a\u5236\u65b0\u7684\u65e5\u5fd7 Level\uff0c\u5b9a\u5236\u81ea\u5df1\u559c\u6b22\u7684\u7ed3\u6784\u5316\u6570\u636e\uff0c\u8be6\u60c5\u53ef\u89c1 Loguru \u7684\u5b98\u65b9\u6587\u6863\uff1a<\/p>\n<p><a href=\"https:\/\/github.com\/Delgan\/loguru\">https:\/\/github.com\/Delgan\/loguru<\/a><\/p>\n<h2>4.\u793a\u4f8b\u4ee3\u7801<\/h2>\n<pre><code class=\"language-python\">from loguru import logger\n\n# \u8bbe\u7f6e\u65e5\u5fd7\u6587\u4ef6\u5927\u5c0f\nlogger.add(&quot;out.log&quot;, rotation=&quot;100 MB&quot;, backtrace=True, diagnose=True)<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Loguru \u4e00\u4e2a\u80fd\u5f7b\u5e95\u89e3\u653e\u4f60\u7684\u65e5\u5fd7\u8bb0\u5f55\u5668\u3002 \u5b83\u5373\u63d2\u5373\u7528\uff0c\u5177\u5907\u591a\u79cd\u65b9\u5f0f\u6eda\u52a8\u65e5\u5fd7\u3001\u81ea\u52a8\u538b\u7f29\u65e5\u5fd7\u6587\u4ef6\u3001\u5b9a\u65f6\u5220\u9664\u7b49\u529f\u80fd\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u591a\u7ebf\u7a0b\u5b89\u5168   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[51],"tags":[],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1018"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1018"}],"version-history":[{"count":1,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1018\/revisions"}],"predecessor-version":[{"id":1019,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1018\/revisions\/1019"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1018"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}