{"id":2641,"date":"2025-03-24T08:46:53","date_gmt":"2025-03-23T23:46:53","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2641"},"modified":"2025-03-24T08:47:21","modified_gmt":"2025-03-23T23:47:21","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91laravel%e3%83%ad%e3%82%b0%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89-%e8%a8%ad%e5%ae%9a%e3%81%8b%e3%82%89%e5%ae%9f%e8%b7%b5%e7%9a%84%e3%81%aa%e5%ae%9f","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2641","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Laravel\u30ed\u30b0\u5b8c\u5168\u30ac\u30a4\u30c9 &#8211; \u8a2d\u5b9a\u304b\u3089\u5b9f\u8df5\u7684\u306a\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af\u307e\u3067"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Laravel \u306e\u30ed\u30b0\u6a5f\u80fd\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">Laravel \u304c\u63d0\u4f9b\u3059\u308b\u6a19\u6e96\u7684\u306a\u30ed\u30b0\u6a5f\u80fd\u306e\u6982\u8981<\/a>      <\/li>      <li>        <a href=\"#i-2\">\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\u3068\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u8a73\u7d30\u306a\u8aac\u660e<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">Laravel \u306e\u30ed\u30b0\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u69cb\u9020<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">Laravel \u30ed\u30b0\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">\u30ed\u30b0\u51fa\u529b\u306e\u57fa\u672c\u7684\u306a\u69cb\u6587\u3068\u4f7f\u7528\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-6\">\u5404\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u9069\u5207\u306a\u4f7f\u3044\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u60c5\u5831\u306e\u8ffd\u52a0\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">Laravel\u30ed\u30b0\u306e\u9ad8\u5ea6\u306a\u8a2d\u5b9a\u3068\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-9\">\u8907\u6570\u306e\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u8a2d\u5b9a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-10\">\u30ab\u30b9\u30bf\u30e0\u30ed\u30b0\u30cf\u30f3\u30c9\u30e9\u30fc\u306e\u4f5c\u6210\u624b\u9806<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">\u30ed\u30b0\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u5b9f\u8df5\u7684\u306a\u30ed\u30b0\u904b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">\u672c\u756a\u74b0\u5883\u3067\u306e\u52b9\u7387\u7684\u306a\u30ed\u30b0\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-14\">\u30a8\u30e9\u30fc\u8ffd\u8de1\u3092\u52b9\u7387\u5316\u3059\u308b\u30ed\u30b0\u8a2d\u8a08\u306e\u30b3\u30c4<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u51fa\u529b\u306e\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-16\">Laravel\u30ed\u30b0\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">\u4e00\u822c\u7684\u306a\u30ed\u30b0\u95a2\u9023\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-18\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\u3057\u305f\u30ed\u30b0\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-19\">\u30ed\u30b0\u51fa\u529b\u304c\u6a5f\u80fd\u3057\u306a\u3044\u5834\u5408\u306e\u30c7\u30d0\u30c3\u30b0\u624b\u9806<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-20\">\u767a\u5c55\u7684\u306a\u30ed\u30b0\u6d3b\u7528\u8853<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-21\">\u5916\u90e8\u30ed\u30b0\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-22\">\u30ed\u30b0\u5206\u6790\u30c4\u30fc\u30eb\u306e\u5c0e\u5165\u3068\u6d3b\u7528\u624b\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-23\">\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3067\u306e\u904b\u7528\u30ed\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Laravel \u306e\u30ed\u30b0\u6a5f\u80fd\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">Laravel \u304c\u63d0\u4f9b\u3059\u308b\u6a19\u6e96\u7684\u306a\u30ed\u30b0\u6a5f\u80fd\u306e\u6982\u8981<\/h3>\n\n\n\n<p>Laravel\u306e\u30ed\u30b0\u6a5f\u80fd\u306f\u3001Monolog\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30d9\u30fc\u30b9\u306b\u69cb\u7bc9\u3055\u308c\u305f\u5f37\u529b\u306a\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002\u3053\u306e\u30b7\u30b9\u30c6\u30e0\u306f\u4ee5\u4e0b\u306e\u7279\u5fb4\u3092\u6301\u3063\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30de\u30eb\u30c1\u30c1\u30e3\u30f3\u30cd\u30eb\u5bfe\u5fdc\uff1a\u8907\u6570\u306e\u30ed\u30b0\u51fa\u529b\u5148\u3092\u540c\u6642\u306b\u8a2d\u5b9a\u53ef\u80fd<\/li>\n\n\n\n<li>8\u7a2e\u985e\u306e\u30ed\u30b0\u30ec\u30d9\u30eb\uff1aemergency, alert, critical, error, warning, notice, info, debug<\/li>\n\n\n\n<li>\u67d4\u8edf\u306a\u8a2d\u5b9a\uff1a\u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308b\u30ed\u30b0\u8a2d\u5b9a\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u30cf\u30f3\u30c9\u30e9\u30fc\uff1a\u30d5\u30a1\u30a4\u30eb\u3001\u30e1\u30fc\u30eb\u3001Slack\u7b49\u3078\u306e\u51fa\u529b\u306b\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u30ed\u30b0\u306e\u81ea\u52d5\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\uff1a\u65e5\u4ed8\u3084\u30b5\u30a4\u30ba\u30d9\u30fc\u30b9\u3067\u306e\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\u3068\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u8a73\u7d30\u306a\u8aac\u660e<\/h3>\n\n\n\n<p><strong>\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb<\/strong><br>Laravel\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u4e3b\u8981\u306a\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>single\uff1a\u5358\u4e00\u306e\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306b\u51fa\u529b<\/li>\n\n\n\n<li>daily\uff1a\u65e5\u4ed8\u30d9\u30fc\u30b9\u3067\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210<\/li>\n\n\n\n<li>slack\uff1aSlack\u3078\u306e\u901a\u77e5<\/li>\n\n\n\n<li>stderr\uff1a\u6a19\u6e96\u30a8\u30e9\u30fc\u51fa\u529b<\/li>\n\n\n\n<li>syslog\uff1a\u30b7\u30b9\u30c6\u30e0\u30ed\u30b0<\/li>\n\n\n\n<li>errorlog\uff1aPHP\u306eerror_log()\u95a2\u6570\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>monolog\uff1aMonolog\u306e\u30cf\u30f3\u30c9\u30e9\u30fc\u3092\u76f4\u63a5\u8a2d\u5b9a<\/li>\n\n\n\n<li>custom\uff1a\u30ab\u30b9\u30bf\u30e0\u30cf\u30f3\u30c9\u30e9\u30fc<\/li>\n<\/ol>\n\n\n\n<p><strong>\u30ed\u30b0\u30ec\u30d9\u30eb<\/strong><br>\u91cd\u8981\u5ea6\u306e\u9ad8\u3044\u9806\u306b\u4ee5\u4e0b\u306e\u30ec\u30d9\u30eb\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>emergency\uff1a\u30b7\u30b9\u30c6\u30e0\u304c\u4f7f\u7528\u4e0d\u53ef<\/li>\n\n\n\n<li>alert\uff1a\u5373\u6642\u5bfe\u5fdc\u304c\u5fc5\u8981<\/li>\n\n\n\n<li>critical\uff1a\u91cd\u5927\u306a\u30a8\u30e9\u30fc<\/li>\n\n\n\n<li>error\uff1a\u30a8\u30e9\u30fc<\/li>\n\n\n\n<li>warning\uff1a\u8b66\u544a<\/li>\n\n\n\n<li>notice\uff1a\u901a\u5e38\u3060\u304c\u91cd\u8981\u306a\u60c5\u5831<\/li>\n\n\n\n<li>info\uff1a\u901a\u5e38\u306e\u60c5\u5831<\/li>\n\n\n\n<li>debug\uff1a\u30c7\u30d0\u30c3\u30b0\u60c5\u5831<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">Laravel \u306e\u30ed\u30b0\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u69cb\u9020<\/h3>\n\n\n\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<code>config\/logging.php<\/code>\u306e\u57fa\u672c\u69cb\u9020\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">return [\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\n    'default' =&gt; env('LOG_CHANNEL', 'stack'),\n\n    \/\/ \u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u5b9a\u7fa9\n    'channels' =&gt; [\n        \/\/ \u30b9\u30bf\u30c3\u30af\u30c1\u30e3\u30f3\u30cd\u30eb\uff08\u8907\u6570\u306e\u30c1\u30e3\u30f3\u30cd\u30eb\u3092\u7d44\u307f\u5408\u308f\u305b\uff09\n        'stack' =&gt; [\n            'driver' =&gt; 'stack',\n            'channels' =&gt; ['single'],\n            'ignore_exceptions' =&gt; false,\n        ],\n\n        \/\/ \u5358\u4e00\u30d5\u30a1\u30a4\u30eb\u30c1\u30e3\u30f3\u30cd\u30eb\n        'single' =&gt; [\n            'driver' =&gt; 'single',\n            'path' =&gt; storage_path('logs\/laravel.log'),\n            'level' =&gt; env('LOG_LEVEL', 'debug'),\n        ],\n\n        \/\/ \u65e5\u6b21\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u30c1\u30e3\u30f3\u30cd\u30eb\n        'daily' =&gt; [\n            'driver' =&gt; 'daily',\n            'path' =&gt; storage_path('logs\/laravel.log'),\n            'level' =&gt; env('LOG_LEVEL', 'debug'),\n            'days' =&gt; 14,\n        ],\n    ],\n];<\/pre>\n\n\n\n<p>\u91cd\u8981\u306a\u8a2d\u5b9a\u9805\u76ee\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>default<\/code>\uff1a\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u4f7f\u7528\u3059\u308b\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb<\/li>\n\n\n\n<li><code>channels<\/code>\uff1a\u5229\u7528\u53ef\u80fd\u306a\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u5b9a\u7fa9<\/li>\n\n\n\n<li><code>level<\/code>\uff1a\u8a18\u9332\u3059\u308b\u6700\u5c0f\u306e\u30ed\u30b0\u30ec\u30d9\u30eb<\/li>\n\n\n\n<li><code>path<\/code>\uff1a\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u4fdd\u5b58\u5834\u6240<\/li>\n\n\n\n<li><code>days<\/code>\uff1a\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u4fdd\u6301\u671f\u9593\uff08daily\u30c9\u30e9\u30a4\u30d0\u30fc\u306e\u5834\u5408\uff09<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u305f\u67d4\u8edf\u306a\u30ed\u30b0\u7ba1\u7406\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">Laravel \u30ed\u30b0\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30ed\u30b0\u51fa\u529b\u306e\u57fa\u672c\u7684\u306a\u69cb\u6587\u3068\u4f7f\u7528\u4f8b<\/h3>\n\n\n\n<p>Laravel\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u65b9\u6cd5\u3067\u30ed\u30b0\u3092\u51fa\u529b\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d5\u30a1\u30b5\u30fc\u30c9\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use Illuminate\\Support\\Facades\\Log;\n\n\/\/ \u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\nLog::info('\u30e6\u30fc\u30b6\u30fc\u304c\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3057\u305f');\n\n\/\/ \u4f8b\u5916\u3092\u30ed\u30b0\u306b\u8a18\u9332\ntry {\n    \/\/ \u4f55\u3089\u304b\u306e\u51e6\u7406\n} catch (Exception $e) {\n    Log::error('\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f', ['exception' =&gt; $e]);\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ info()\u30d8\u30eb\u30d1\u30fc\ninfo('\u3053\u308c\u306f\u60c5\u5831\u30ed\u30b0\u3067\u3059');\n\n\/\/ logger()\u30d8\u30eb\u30d1\u30fc\nlogger('\u30c7\u30d0\u30c3\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8', ['key' =&gt; 'value']);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u5404\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u9069\u5207\u306a\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>\u5404\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u4f7f\u7528\u4f8b\u3068\u9069\u5207\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ emergency: \u30b7\u30b9\u30c6\u30e0\u304c\u5b8c\u5168\u306b\u4f7f\u7528\u4e0d\u53ef\u80fd\u306a\u72b6\u614b\nLog::emergency('\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u304c\u5b8c\u5168\u306b\u5931\u308f\u308c\u307e\u3057\u305f', [\n    'database' =&gt; 'main',\n    'error' =&gt; $exception-&gt;getMessage()\n]);\n\n\/\/ alert: \u5373\u6642\u5bfe\u5fdc\u304c\u5fc5\u8981\u306a\u72b6\u6cc1\nLog::alert('API\u30ad\u30fc\u304c\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059', [\n    'api_service' =&gt; 'payment',\n    'status' =&gt; 'invalid'\n]);\n\n\/\/ critical: \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u5229\u7528\u3067\u304d\u306a\u3044\nLog::critical('\u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30fc\u30d0\u30fc\u304c\u30c0\u30a6\u30f3\u3057\u3066\u3044\u307e\u3059', [\n    'cache_host' =&gt; 'redis-master'\n]);\n\n\/\/ error: \u5b9f\u884c\u6642\u30a8\u30e9\u30fc\nLog::error('\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u51e6\u7406\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f', [\n    'user_id' =&gt; $userId,\n    'error_code' =&gt; $errorCode\n]);\n\n\/\/ warning: \u8b66\u544a\uff08\u30a8\u30e9\u30fc\u3067\u306f\u306a\u3044\u304c\u6ce8\u610f\u304c\u5fc5\u8981\uff09\nLog::warning('API\u547c\u3073\u51fa\u3057\u306e\u30ec\u30fc\u30c8\u5236\u9650\u306b\u8fd1\u3065\u3044\u3066\u3044\u307e\u3059', [\n    'current_rate' =&gt; $currentRate,\n    'limit' =&gt; $rateLimit\n]);\n\n\/\/ notice: \u6b63\u5e38\u3060\u304c\u91cd\u8981\u306a\u60c5\u5831\nLog::notice('\u30d0\u30c3\u30c1\u51e6\u7406\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f', [\n    'processed_records' =&gt; $count,\n    'duration' =&gt; $duration\n]);\n\n\/\/ info: \u4e00\u822c\u7684\u306a\u60c5\u5831\nLog::info('\u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u304c\u767b\u9332\u3055\u308c\u307e\u3057\u305f', [\n    'user_id' =&gt; $user-&gt;id,\n    'email' =&gt; $user-&gt;email\n]);\n\n\/\/ debug: \u30c7\u30d0\u30c3\u30b0\u60c5\u5831\nLog::debug('\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u6642\u9593', [\n    'query' =&gt; $query,\n    'execution_time' =&gt; $time\n]);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u60c5\u5831\u306e\u8ffd\u52a0\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30ed\u30b0\u306b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u60c5\u5831\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001\u554f\u984c\u306e\u7279\u5b9a\u3068\u89e3\u6c7a\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u914d\u5217\u306b\u3088\u308b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u8ffd\u52a0<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Log::info('\u6ce8\u6587\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f', [\n    'order_id' =&gt; $order-&gt;id,\n    'user_id' =&gt; $user-&gt;id,\n    'amount' =&gt; $order-&gt;total_amount,\n    'items' =&gt; $order-&gt;items-&gt;count()\n]);<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>with()\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u308b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u8ffd\u52a0<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Log::withContext([\n    'user_id' =&gt; Auth::id(),\n    'request_id' =&gt; request()-&gt;id()\n]);\n\n\/\/ \u4ee5\u964d\u306e\u30ed\u30b0\u306b\u81ea\u52d5\u7684\u306b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304c\u4ed8\u52a0\u3055\u308c\u308b\nLog::info('\u30e6\u30fc\u30b6\u30fc\u30a2\u30af\u30b7\u30e7\u30f3\u5b9f\u884c');<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30af\u30e9\u30b9\u5358\u4f4d\u3067\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class OrderController extends Controller\n{\n    public function __construct()\n    {\n        \/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u5185\u306e\u5168\u3066\u306e\u30ed\u30b0\u306b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8ffd\u52a0\n        Log::withContext([\n            'controller' =&gt; class_basename($this),\n            'session_id' =&gt; session()-&gt;getId()\n        ]);\n    }\n}<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u30ea\u30af\u30a8\u30b9\u30c8\u60c5\u5831\u306e\u8ffd\u52a0<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Log::info('API\u30ea\u30af\u30a8\u30b9\u30c8\u53d7\u4fe1', [\n    'method' =&gt; request()-&gt;method(),\n    'path' =&gt; request()-&gt;path(),\n    'ip' =&gt; request()-&gt;ip(),\n    'user_agent' =&gt; request()-&gt;userAgent()\n]);<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306a\u30ed\u30b0\u6a5f\u80fd\u3092\u9069\u5207\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u52d5\u4f5c\u72b6\u6cc1\u3092\u52b9\u679c\u7684\u306b\u76e3\u8996\u3057\u3001\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u969b\u306e\u539f\u56e0\u7279\u5b9a\u3092\u5bb9\u6613\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">Laravel\u30ed\u30b0\u306e\u9ad8\u5ea6\u306a\u8a2d\u5b9a\u3068\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u8907\u6570\u306e\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u8a2d\u5b9a\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u8907\u6570\u306e\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30ed\u30b0\u306e\u7ba1\u7406\u3068\u5206\u6790\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b9\u30bf\u30c3\u30af\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u8a2d\u5b9a\u4f8b<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/logging.php\n'channels' =&gt; [\n    'stack' =&gt; [\n        'driver' =&gt; 'stack',\n        'channels' =&gt; ['daily', 'slack', 'error_log'],\n        'ignore_exceptions' =&gt; false,\n    ],\n\n    'error_log' =&gt; [\n        'driver' =&gt; 'single',\n        'path' =&gt; storage_path('logs\/errors.log'),\n        'level' =&gt; 'error',\n    ],\n\n    'slack' =&gt; [\n        'driver' =&gt; 'slack',\n        'url' =&gt; env('LOG_SLACK_WEBHOOK_URL'),\n        'username' =&gt; 'Laravel Log',\n        'emoji' =&gt; ':boom:',\n        'level' =&gt; 'critical',\n    ],\n]<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u74b0\u5883\u5225\u306e\u30ed\u30b0\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">'channels' =&gt; [\n    'production' =&gt; [\n        'driver' =&gt; 'daily',\n        'path' =&gt; storage_path('logs\/production.log'),\n        'level' =&gt; 'warning',\n        'days' =&gt; 30,\n    ],\n\n    'development' =&gt; [\n        'driver' =&gt; 'single',\n        'path' =&gt; storage_path('logs\/development.log'),\n        'level' =&gt; 'debug',\n    ],\n]<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u52d5\u7684\u306a\u5207\u308a\u66ff\u3048<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u7279\u5b9a\u306e\u51e6\u7406\u306e\u307f\u5225\u30c1\u30e3\u30f3\u30cd\u30eb\u3092\u4f7f\u7528\nLog::channel('error_log')-&gt;error('\u91cd\u5927\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f');\n\n\/\/ \u8907\u6570\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u4e00\u6642\u7684\u306a\u4f7f\u7528\nLog::stack(['daily', 'slack'])-&gt;critical('\u30b7\u30b9\u30c6\u30e0\u969c\u5bb3\u304c\u767a\u751f\u3057\u307e\u3057\u305f');<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30ab\u30b9\u30bf\u30e0\u30ed\u30b0\u30cf\u30f3\u30c9\u30e9\u30fc\u306e\u4f5c\u6210\u624b\u9806<\/h3>\n\n\n\n<p>\u72ec\u81ea\u306e\u30ed\u30b0\u30cf\u30f3\u30c9\u30e9\u30fc\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3067\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u56fa\u6709\u306e\u30cb\u30fc\u30ba\u306b\u5bfe\u5fdc\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30bf\u30e0\u30ed\u30b0\u30cf\u30f3\u30c9\u30e9\u30fc\u30af\u30e9\u30b9\u306e\u4f5c\u6210<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace App\\Logging;\n\nuse Monolog\\Logger;\nuse Monolog\\Handler\\AbstractProcessingHandler;\n\nclass CustomLogHandler extends AbstractProcessingHandler\n{\n    protected function write(array $record): void\n    {\n        \/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n        $logData = [\n            'timestamp' =&gt; $record['datetime']-&gt;format('Y-m-d H:i:s'),\n            'level' =&gt; $record['level_name'],\n            'message' =&gt; $record['message'],\n            'context' =&gt; $record['context'],\n        ];\n\n        \/\/ \u30ab\u30b9\u30bf\u30e0\u51e6\u7406\uff08\u4f8b\uff1a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u4fdd\u5b58\uff09\n        DB::table('application_logs')-&gt;insert([\n            'log_data' =&gt; json_encode($logData),\n            'created_at' =&gt; now(),\n        ]);\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30bf\u30e0\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u4f5c\u6210<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace App\\Logging;\n\nuse Monolog\\Logger;\n\nclass CustomLogChannel\n{\n    public function __invoke(array $config)\n    {\n        $logger = new Logger('custom');\n        $logger-&gt;pushHandler(new CustomLogHandler(\n            level: $config['level'] ?? Logger::DEBUG,\n            bubble: $config['bubble'] ?? true\n        ));\n\n        return $logger;\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u767b\u9332<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/logging.php\n'channels' =&gt; [\n    'custom' =&gt; [\n        'driver' =&gt; 'custom',\n        'via' =&gt; App\\Logging\\CustomLogChannel::class,\n        'level' =&gt; 'debug',\n    ],\n]<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30ed\u30b0\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u30ed\u30b0\u7ba1\u7406\u306e\u305f\u3081\u306e\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u8a2d\u5b9a\u3068\u63a8\u5968\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u65e5\u6b21\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u8a73\u7d30\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">'daily' =&gt; [\n    'driver' =&gt; 'daily',\n    'path' =&gt; storage_path('logs\/laravel.log'),\n    'level' =&gt; 'debug',\n    'days' =&gt; 14,\n    'permission' =&gt; 0664,\n    'locking' =&gt; true,\n]<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30b5\u30a4\u30ba\u30d9\u30fc\u30b9\u306e\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ab\u30b9\u30bf\u30e0\u30b5\u30a4\u30ba\u30d9\u30fc\u30b9\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\nnamespace App\\Logging;\n\nuse Monolog\\Handler\\RotatingFileHandler;\n\nclass SizeBasedRotatingHandler extends RotatingFileHandler\n{\n    protected function getTimedFilename(): string\n    {\n        $fileInfo = pathinfo($this-&gt;filename);\n        $timedFilename = str_replace(\n            ['{filename}', '{date}'],\n            [$fileInfo['filename'], date('Y-m-d_H-i-s')],\n            '{filename}_{date}'\n        );\n\n        if (!empty($fileInfo['extension'])) {\n            $timedFilename .= '.'.$fileInfo['extension'];\n        }\n\n        return $timedFilename;\n    }\n}<\/pre>\n\n\n\n<p>\u30ed\u30b0\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ed\u30b0\u30ec\u30d9\u30eb\u306b\u5fdc\u3058\u305f\u4fdd\u6301\u671f\u9593\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30ed\u30b0\uff1a30-90\u65e5<\/li>\n\n\n\n<li>\u4e00\u822c\u30ed\u30b0\uff1a7-14\u65e5<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\uff1a3-7\u65e5<\/li>\n\n\n\n<li>\u30c7\u30a3\u30b9\u30af\u5bb9\u91cf\u306e\u76e3\u8996<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ed\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u5bb9\u91cf\u30c1\u30a7\u30c3\u30af\nif (disk_free_space(storage_path('logs')) &lt; 1024 * 1024 * 100) { \/\/ 100MB\u672a\u6e80\n    Log::emergency('\u30ed\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u7a7a\u304d\u5bb9\u91cf\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059');\n}<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9a\u671f\u7684\u306a\u30ed\u30b0\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\File;\n\nclass CleanOldLogs extends Command\n{\n    protected $signature = 'logs:clean {--days=7}';\n\n    public function handle()\n    {\n        $directory = storage_path('logs');\n        $files = File::glob($directory.'\/*.log');\n\n        foreach ($files as $file) {\n            if (time() - File::lastModified($file) &gt; $this-&gt;option('days') * 86400) {\n                File::delete($file);\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u9ad8\u5ea6\u306a\u8a2d\u5b9a\u3068\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u305f\u52b9\u7387\u7684\u306a\u30ed\u30b0\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u5b9f\u8df5\u7684\u306a\u30ed\u30b0\u904b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u672c\u756a\u74b0\u5883\u3067\u306e\u52b9\u7387\u7684\u306a\u30ed\u30b0\u7ba1\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u672c\u756a\u74b0\u5883\u3067\u306e\u30ed\u30b0\u7ba1\u7406\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5b89\u5b9a\u904b\u7528\u306b\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u52b9\u679c\u7684\u306a\u7ba1\u7406\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u74b0\u5883\u5225\u306e\u30ed\u30b0\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/logging.php\nreturn [\n    'channels' =&gt; [\n        'production' =&gt; [\n            'driver' =&gt; 'daily',\n            'path' =&gt; storage_path('logs\/production.log'),\n            'level' =&gt; env('LOG_LEVEL', 'warning'),\n            'days' =&gt; 30,\n            'permission' =&gt; 0644,\n        ],\n        'exceptions' =&gt; [\n            'driver' =&gt; 'daily',\n            'path' =&gt; storage_path('logs\/exceptions.log'),\n            'level' =&gt; 'error',\n            'days' =&gt; 60,\n        ],\n        'access' =&gt; [\n            'driver' =&gt; 'daily',\n            'path' =&gt; storage_path('logs\/access.log'),\n            'level' =&gt; 'info',\n            'days' =&gt; 7,\n        ],\n    ],\n];<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30b7\u30b9\u30c6\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a18\u9332<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class SystemMetricsLogger\n{\n    public function logMetrics()\n    {\n        $metrics = [\n            'memory_usage' =&gt; memory_get_usage(true),\n            'peak_memory' =&gt; memory_get_peak_usage(true),\n            'cpu_load' =&gt; sys_getloadavg(),\n            'disk_free' =&gt; disk_free_space(base_path()),\n            'php_workers' =&gt; $this-&gt;getPhpFpmProcessCount(),\n        ];\n\n        Log::channel('metrics')-&gt;info('System metrics', $metrics);\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u81ea\u52d5\u76e3\u8996\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Providers\/LogServiceProvider.php\npublic function boot()\n{\n    Log::beforeLogging(function ($level, $message, $context) {\n        if ($level &gt;= Logger::ERROR) {\n            $this-&gt;notifyTeam($level, $message, $context);\n        }\n    });\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30a8\u30e9\u30fc\u8ffd\u8de1\u3092\u52b9\u7387\u5316\u3059\u308b\u30ed\u30b0\u8a2d\u8a08\u306e\u30b3\u30c4<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u30a8\u30e9\u30fc\u8ffd\u8de1\u306e\u305f\u3081\u306e\u30ed\u30b0\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u60c5\u5831\u306e\u4f53\u7cfb\u5316<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ContextualLogger\n{\n    public static function logError($error, $additionalContext = [])\n    {\n        $baseContext = [\n            'request_id' =&gt; request()-&gt;id(),\n            'url' =&gt; request()-&gt;fullUrl(),\n            'user_id' =&gt; auth()-&gt;id(),\n            'trace_id' =&gt; app('trace')-&gt;getCurrentId(),\n            'server' =&gt; gethostname(),\n            'environment' =&gt; app()-&gt;environment(),\n        ];\n\n        Log::error($error-&gt;getMessage(), array_merge(\n            $baseContext,\n            $additionalContext,\n            ['stack_trace' =&gt; $error-&gt;getTraceAsString()]\n        ));\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u30ed\u30b0\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class TransactionLogger\n{\n    private $transactionId;\n\n    public function startTransaction($type)\n    {\n        $this-&gt;transactionId = uniqid($type . '_');\n        Log::info(\"Transaction started\", [\n            'transaction_id' =&gt; $this-&gt;transactionId,\n            'type' =&gt; $type\n        ]);\n    }\n\n    public function logStep($step, $data)\n    {\n        Log::info(\"Transaction step\", [\n            'transaction_id' =&gt; $this-&gt;transactionId,\n            'step' =&gt; $step,\n            'data' =&gt; $data\n        ]);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u51fa\u529b\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30a2\u306a\u30ed\u30b0\u51fa\u529b\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6a5f\u5bc6\u60c5\u5831\u306e\u30de\u30b9\u30ad\u30f3\u30b0<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class SecureLogger\n{\n    private $sensitiveKeys = [\n        'password', 'token', 'credit_card',\n        'secret', 'api_key', 'auth'\n    ];\n\n    public function logSecurely($message, array $context)\n    {\n        $maskedContext = $this-&gt;maskSensitiveData($context);\n        Log::info($message, $maskedContext);\n    }\n\n    private function maskSensitiveData(array $data)\n    {\n        array_walk_recursive($data, function (&amp;$value, $key) {\n            if ($this-&gt;isSensitive($key)) {\n                $value = str_repeat('*', 8);\n            }\n        });\n\n        return $data;\n    }\n\n    private function isSensitive($key)\n    {\n        return Str::contains(\n            strtolower($key),\n            $this-&gt;sensitiveKeys\n        );\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>PII\uff08\u500b\u4eba\u8b58\u5225\u60c5\u5831\uff09\u306e\u4fdd\u8b77<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class PIILogger\n{\n    public function logUserAction($action, $userData)\n    {\n        $safeUserData = $this-&gt;anonymizeUserData($userData);\n        Log::info(\"User action: {$action}\", $safeUserData);\n    }\n\n    private function anonymizeUserData($userData)\n    {\n        return [\n            'user_hash' =&gt; hash('sha256', $userData['id']),\n            'action_type' =&gt; $userData['action'],\n            \/\/ \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u4e00\u90e8\u30de\u30b9\u30ad\u30f3\u30b0\n            'email_domain' =&gt; substr(strrchr($userData['email'], \"@\"), 1),\n            'country' =&gt; $userData['country'],\n        ];\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class SecureAccessLogger\n{\n    public function logAccess(Request $request)\n    {\n        $logData = [\n            'ip' =&gt; $request-&gt;ip(),\n            'method' =&gt; $request-&gt;method(),\n            'path' =&gt; $request-&gt;path(),\n            'user_agent' =&gt; $request-&gt;userAgent(),\n            \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3ID\u306f\u30cf\u30c3\u30b7\u30e5\u5316\n            'session' =&gt; hash('sha256', $request-&gt;session()-&gt;getId()),\n            \/\/ \u6a5f\u5bc6\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u9664\u5916\n            'params' =&gt; $this-&gt;filterSensitiveParams($request-&gt;all()),\n        ];\n\n        Log::channel('access')-&gt;info('Request received', $logData);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30bb\u30ad\u30e5\u30a2\u3067\u7ba1\u7406\u3057\u3084\u3059\u3044\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u904b\u7528\u52b9\u7387\u306e\u4e21\u65b9\u3092\u8003\u616e\u3057\u305f\u30ed\u30b0\u8a2d\u8a08\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">Laravel\u30ed\u30b0\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u4e00\u822c\u7684\u306a\u30ed\u30b0\u95a2\u9023\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u3088\u304f\u3042\u308b\u554f\u984c\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u30a8\u30e9\u30fc<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c: storage\/logs \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u304c\u306a\u3044\n\/\/ \u89e3\u6c7a\u65b9\u6cd5:\n\/\/ 1. \u6a29\u9650\u306e\u78ba\u8a8d\u3068\u4fee\u6b63\n$logPath = storage_path('logs');\nif (!is_writable($logPath)) {\n    \/\/ \u6a29\u9650\u306e\u4fee\u6b63\n    chmod($logPath, 0755);\n    \/\/ \u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u81ea\u4f53\u306e\u6a29\u9650\u3082\u4fee\u6b63\n    chmod($logPath . '\/laravel.log', 0644);\n}\n\n\/\/ 2. \u6240\u6709\u8005\u306e\u5909\u66f4\uff08\u672c\u756a\u74b0\u5883\u3067\u306e\u5bfe\u5fdc\uff09\n\/\/ \u30bf\u30fc\u30df\u30ca\u30eb\u3067\u5b9f\u884c\uff1a\n\/\/ sudo chown -R www-data:www-data storage\/logs<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ed\u30b0\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u554f\u984c<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c: \u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u304c\u80a5\u5927\u5316\u3057\u3066\u3044\u308b\n\/\/ \u89e3\u6c7a\u65b9\u6cd5: \u30ed\u30b0\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u88c5\n\nclass LogCleanupCommand extends Command\n{\n    protected $signature = 'log:cleanup {--days=7}';\n\n    public function handle()\n    {\n        $pattern = storage_path('logs\/*.log');\n        $days = $this-&gt;option('days');\n\n        foreach (glob($pattern) as $file) {\n            if (time() - filemtime($file) &gt;= $days * 86400) {\n                unlink($file);\n                $this-&gt;info(\"Deleted: \" . basename($file));\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u91cd\u8907<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c: \u540c\u3058\u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8907\u6570\u56de\u8a18\u9332\u3055\u308c\u308b\n\/\/ \u89e3\u6c7a\u65b9\u6cd5: \u30ed\u30b0\u30cf\u30f3\u30c9\u30e9\u30fc\u306e\u91cd\u8907\u30c1\u30a7\u30c3\u30af\n\nclass DuplicatePreventionLogger\n{\n    private static $loggedMessages = [];\n\n    public static function log($level, $message, array $context = [])\n    {\n        $hash = md5($level . $message . serialize($context));\n\n        if (!isset(self::$loggedMessages[$hash])) {\n            Log::$level($message, $context);\n            self::$loggedMessages[$hash] = true;\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\u3057\u305f\u30ed\u30b0\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/h3>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u30ed\u30b0\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class BufferedLogger\n{\n    private $buffer = [];\n    private $maxBufferSize = 100;\n\n    public function add($message, $context = [])\n    {\n        $this-&gt;buffer[] = [\n            'message' =&gt; $message,\n            'context' =&gt; $context,\n            'timestamp' =&gt; microtime(true)\n        ];\n\n        if (count($this-&gt;buffer) &gt;= $this-&gt;maxBufferSize) {\n            $this-&gt;flush();\n        }\n    }\n\n    public function flush()\n    {\n        if (empty($this-&gt;buffer)) {\n            return;\n        }\n\n        DB::transaction(function () {\n            foreach ($this-&gt;buffer as $log) {\n                Log::info($log['message'], $log['context']);\n            }\n        });\n\n        $this-&gt;buffer = [];\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u975e\u540c\u671f\u30ed\u30b0\u51e6\u7406<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class AsyncLogger\n{\n    public function log($message, $context = [])\n    {\n        dispatch(new LogMessageJob($message, $context))\n            -&gt;onQueue('logging');\n    }\n}\n\nclass LogMessageJob implements ShouldQueue\n{\n    public function handle()\n    {\n        \/\/ \u30d0\u30c3\u30c1\u51e6\u7406\u3067\u30ed\u30b0\u3092\u66f8\u304d\u8fbc\u307f\n        Log::info($this-&gt;message, $this-&gt;context);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30ed\u30b0\u51fa\u529b\u304c\u6a5f\u80fd\u3057\u306a\u3044\u5834\u5408\u306e\u30c7\u30d0\u30c3\u30b0\u624b\u9806<\/h3>\n\n\n\n<p>\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u969b\u306e\u4f53\u7cfb\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u624b\u9806\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u8a3c<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class LogConfigurationDebugger\n{\n    public function checkConfiguration()\n    {\n        $issues = [];\n\n        \/\/ \u57fa\u672c\u8a2d\u5b9a\u306e\u78ba\u8a8d\n        if (!config('logging.default')) {\n            $issues[] = '\u30c7\u30d5\u30a9\u30eb\u30c8\u30ed\u30b0\u30c1\u30e3\u30f3\u30cd\u30eb\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093';\n        }\n\n        \/\/ \u30c1\u30e3\u30f3\u30cd\u30eb\u8a2d\u5b9a\u306e\u78ba\u8a8d\n        foreach (config('logging.channels') as $channel =&gt; $config) {\n            if (!isset($config['driver'])) {\n                $issues[] = \"\u30c1\u30e3\u30f3\u30cd\u30eb '{$channel}' \u306b\u30c9\u30e9\u30a4\u30d0\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\";\n            }\n        }\n\n        \/\/ \u30b9\u30c8\u30ec\u30fc\u30b8\u30d1\u30b9\u306e\u78ba\u8a8d\n        $logPath = storage_path('logs');\n        if (!file_exists($logPath)) {\n            $issues[] = '\u30ed\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u5b58\u5728\u3057\u307e\u305b\u3093';\n        } elseif (!is_writable($logPath)) {\n            $issues[] = '\u30ed\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093';\n        }\n\n        return $issues;\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ed\u30b0\u30cf\u30f3\u30c9\u30e9\u30fc\u306e\u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DebugLogHandler extends AbstractProcessingHandler\n{\n    protected function write(array $record): void\n    {\n        \/\/ \u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u8ffd\u52a0\n        $record['debug_info'] = [\n            'memory_usage' =&gt; memory_get_usage(true),\n            'process_id' =&gt; getmypid(),\n            'timestamp' =&gt; microtime(true),\n        ];\n\n        \/\/ \u6a19\u6e96\u30a8\u30e9\u30fc\u51fa\u529b\u306b\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3092\u51fa\u529b\n        fwrite(STDERR, json_encode($record, JSON_PRETTY_PRINT) . \"\\n\");\n\n        \/\/ \u5143\u306e\u30ed\u30b0\u51e6\u7406\u3082\u5b9f\u884c\n        parent::write($record);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30ed\u30b0\u95a2\u9023\u306e\u554f\u984c\u3092\u52b9\u7387\u7684\u306b\u7279\u5b9a\u3057\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30c7\u30d0\u30c3\u30b0\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u9069\u5207\u306a\u8a2d\u5b9a\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-20\">\u767a\u5c55\u7684\u306a\u30ed\u30b0\u6d3b\u7528\u8853<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u5916\u90e8\u30ed\u30b0\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u4e3b\u8981\u306a\u5916\u90e8\u30ed\u30b0\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u5b9f\u88c5\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Papertrail\u3068\u306e\u9023\u643a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/logging.php\n'papertrail' =&gt; [\n    'driver' =&gt; 'monolog',\n    'level' =&gt; env('LOG_LEVEL', 'debug'),\n    'handler' =&gt; SyslogUdpHandler::class,\n    'handler_with' =&gt; [\n        'host' =&gt; env('PAPERTRAIL_URL'),\n        'port' =&gt; env('PAPERTRAIL_PORT'),\n    ],\n    'processors' =&gt; [PsrLogMessageProcessor::class],\n],\n\n\/\/ \u30ab\u30b9\u30bf\u30e0\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u306e\u8ffd\u52a0\nclass PapertrailFormatter\n{\n    public function __invoke($logging)\n    {\n        $handler = new SyslogUdpHandler(\n            env('PAPERTRAIL_URL'),\n            env('PAPERTRAIL_PORT')\n        );\n\n        $formatter = new LineFormatter(\n            '%channel%.%level_name%: %message% %extra%'\n        );\n\n        $handler-&gt;setFormatter($formatter);\n\n        return new Logger('papertrail', [$handler]);\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>New Relic\u3068\u306e\u9023\u643a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class NewRelicLogger\n{\n    public function __invoke(array $config)\n    {\n        $logger = new Logger('newrelic');\n\n        \/\/ New Relic\u5411\u3051\u306e\u30cf\u30f3\u30c9\u30e9\u30fc\u8a2d\u5b9a\n        $handler = new NewRelicHandler();\n        $handler-&gt;setFormatter(new NormalizerFormatter());\n\n        \/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u60c5\u5831\u306e\u8ffd\u52a0\n        $handler-&gt;pushProcessor(function ($record) {\n            $record['extra']['app_name'] = config('app.name');\n            $record['extra']['environment'] = app()-&gt;environment();\n            return $record;\n        });\n\n        $logger-&gt;pushHandler($handler);\n        return $logger;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u30ed\u30b0\u5206\u6790\u30c4\u30fc\u30eb\u306e\u5c0e\u5165\u3068\u6d3b\u7528\u624b\u6cd5<\/h3>\n\n\n\n<p>\u52b9\u679c\u7684\u306a\u30ed\u30b0\u5206\u6790\u306e\u305f\u3081\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Elasticsearch\u3068\u306e\u9023\u643a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ElasticsearchLogger\n{\n    private $client;\n\n    public function __construct()\n    {\n        $this-&gt;client = ClientBuilder::create()\n            -&gt;setHosts([env('ELASTICSEARCH_HOST')])\n            -&gt;build();\n    }\n\n    public function logToElasticsearch($message, array $context = [])\n    {\n        $params = [\n            'index' =&gt; 'laravel-logs-' . date('Y.m.d'),\n            'body' =&gt; [\n                'timestamp' =&gt; date('c'),\n                'message' =&gt; $message,\n                'context' =&gt; $context,\n                'environment' =&gt; app()-&gt;environment(),\n                'host' =&gt; gethostname(),\n                'type' =&gt; 'application_log'\n            ]\n        ];\n\n        try {\n            $this-&gt;client-&gt;index($params);\n        } catch (Exception $e) {\n            Log::error('Elasticsearch logging failed', [\n                'error' =&gt; $e-&gt;getMessage()\n            ]);\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ed\u30b0\u96c6\u8a08\u3068\u5206\u6790\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class LogAnalyzer\n{\n    public function analyzeErrors($timeRange = '-24 hours')\n    {\n        $logs = Storage::disk('logs')\n            -&gt;get('laravel.log');\n\n        $parser = new LogParser();\n        $parsed = $parser-&gt;parse($logs);\n\n        return [\n            'error_count' =&gt; $this-&gt;countErrorsByType($parsed),\n            'error_timeline' =&gt; $this-&gt;createErrorTimeline($parsed),\n            'most_frequent' =&gt; $this-&gt;findMostFrequentErrors($parsed)\n        ];\n    }\n\n    private function createErrorTimeline($logs)\n    {\n        return collect($logs)\n            -&gt;groupBy(function ($log) {\n                return Carbon::parse($log['timestamp'])\n                    -&gt;format('Y-m-d H:00:00');\n            })\n            -&gt;map-&gt;count();\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3067\u306e\u904b\u7528\u30ed\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u74b0\u5883\u3067\u306e\u52b9\u679c\u7684\u306a\u30ed\u30b0\u7ba1\u7406\u624b\u6cd5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5206\u6563\u30c8\u30ec\u30fc\u30b7\u30f3\u30b0\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DistributedLogger\n{\n    private $traceId;\n\n    public function __construct()\n    {\n        $this-&gt;traceId = request()-&gt;header('X-Trace-ID')\n            ?? Str::uuid()-&gt;toString();\n    }\n\n    public function log($message, array $context = [])\n    {\n        $enhancedContext = array_merge($context, [\n            'trace_id' =&gt; $this-&gt;traceId,\n            'service' =&gt; config('app.name'),\n            'timestamp' =&gt; microtime(true),\n            'correlation_id' =&gt; request()-&gt;header('X-Correlation-ID'),\n        ]);\n\n        Log::info($message, $enhancedContext);\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u96c6\u4e2d\u30ed\u30b0\u7ba1\u7406\u306e\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class CentralizedLogging\n{\n    public function setupCentralizedLogging()\n    {\n        $config = [\n            'driver' =&gt; 'fluentd',\n            'host' =&gt; env('FLUENTD_HOST', 'localhost'),\n            'port' =&gt; env('FLUENTD_PORT', 24224),\n            'options' =&gt; [\n                'tag' =&gt; 'laravel.' . config('app.name'),\n                'labels' =&gt; [\n                    'environment' =&gt; app()-&gt;environment(),\n                    'service' =&gt; config('app.name'),\n                    'version' =&gt; config('app.version'),\n                ],\n            ],\n        ];\n\n        return new FluentdLogger($config);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u767a\u5c55\u7684\u306a\u30ed\u30b0\u6d3b\u7528\u65b9\u6cd5\u3092\u5c0e\u5165\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u76e3\u8996\u6027\u3068\u904b\u7528\u52b9\u7387\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u74b0\u5883\u3067\u306f\u3001\u5206\u6563\u30c8\u30ec\u30fc\u30b7\u30f3\u30b0\u3068\u96c6\u4e2d\u30ed\u30b0\u7ba1\u7406\u304c\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":{"0":"post-2641","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2641"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2641\/revisions"}],"predecessor-version":[{"id":2643,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2641\/revisions\/2643"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}