{"id":1085,"date":"2025-06-12T12:30:29","date_gmt":"2025-06-12T04:30:29","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1085.html"},"modified":"2025-06-12T12:30:29","modified_gmt":"2025-06-12T04:30:29","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8symfony%e4%b8%ad%e8%ae%b0%e5%bd%95%e8%af%b7%e6%b1%82","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1085.html","title":{"rendered":"\u5982\u4f55\u5728Symfony\u4e2d\u8bb0\u5f55\u8bf7\u6c42"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Symfony &#20013;&#35760;&#24405;&#35831;&#27714;&#26159;&#26085;&#24535;&#36319;&#36394;&#21644;&#35843;&#35797;&#30340;&#37325;&#35201;&#32452;&#25104;&#37096;&#20998;&#12290;&#20320;&#21487;&#20197;&#20351;&#29992;&#22810;&#31181;&#26041;&#27861;&#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#65292;&#21253;&#25324;&#20351;&#29992;&#20869;&#32622;&#30340;&#26085;&#24535;&#31995;&#32479;&#12289;&#31532;&#19977;&#26041;&#24211;&#65288;&#22914; Monolog&#65289;&#20197;&#21450;&#33258;&#23450;&#20041;&#26085;&#24535;&#22788;&#29702;&#36923;&#36753;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#24120;&#35265;&#30340;&#26041;&#27861;&#65306;<\/p>\n<h3>&#20351;&#29992; Symfony &#20869;&#32622;&#30340;&#26085;&#24535;&#31995;&#32479;<\/h3>\n<p>Symfony &#25552;&#20379;&#20102;&#19968;&#20010;&#24378;&#22823;&#30340;&#26085;&#24535;&#31995;&#32479;&#65292;&#21487;&#20197;&#26041;&#20415;&#22320;&#35760;&#24405;&#21508;&#31181;&#32423;&#21035;&#30340;&#26085;&#24535;&#20449;&#24687;&#12290;<\/p>\n<ol>\n<li>\n<p><strong>&#37197;&#32622;&#26085;&#24535;&#32423;&#21035;<\/strong>&#65306;\n&#20320;&#21487;&#20197;&#36890;&#36807; <code>config\/packages\/dev\/monolog.yaml<\/code> &#25991;&#20214;&#26469;&#37197;&#32622;&#26085;&#24535;&#32423;&#21035;&#12290;<\/p>\n<pre><code class=\"language-yaml\">monolog:\n handlers:\n   main:\n     level: debug\n     channels: ['request', 'error']\n     formatters:\n       simple:\n         format: \"%datetime% - %level_name% - %message%\"<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#35760;&#24405;&#35831;&#27714;&#26085;&#24535;<\/strong>&#65306;\n&#20320;&#21487;&#20197;&#20351;&#29992; <code>LoggerInterface<\/code> &#26469;&#35760;&#24405;&#35831;&#27714;&#26085;&#24535;&#12290;<\/p>\n<pre><code class=\"language-php\">use PsrLogLoggerInterface;\n\nclass MyController extends AbstractController\n{\n   private $logger;\n\n   public function __construct(LoggerInterface $logger)\n   {\n       $this-&gt;logger = $logger;\n   }\n\n   public function index()\n   {\n       \/\/ &#35760;&#24405;&#35831;&#27714;&#26085;&#24535;\n       $this-&gt;logger-&gt;info('Request received');\n\n       \/\/ &#22788;&#29702;&#35831;&#27714;\n       return new Response('Hello, World!');\n   }\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>&#20351;&#29992; Monolog &#24211;<\/h3>\n<p>Monolog &#26159;&#19968;&#20010;&#21151;&#33021;&#24378;&#22823;&#30340;&#26085;&#24535;&#24211;&#65292;&#21487;&#20197;&#19982; Symfony &#32467;&#21512;&#20351;&#29992;&#12290;<\/p>\n<ol>\n<li>\n<p><strong>&#23433;&#35013; Monolog<\/strong>&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require monolog\/monolog<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#37197;&#32622; Monolog<\/strong>&#65306;\n&#21019;&#24314; <code>config\/packages\/dev\/monolog.yaml<\/code> &#25991;&#20214;&#24182;&#28155;&#21152;&#20197;&#19979;&#20869;&#23481;&#65306;<\/p>\n<pre><code class=\"language-yaml\">monolog:\n handlers:\n   main:\n     type: stream\n     path: '%kernel.logs_dir%\/%kernel.environment%.log'\n     level: debug\n     channels: ['request', 'error']\n     formatters:\n       simple:\n         format: \"%datetime% - %level_name% - %message%\"<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#35760;&#24405;&#35831;&#27714;&#26085;&#24535;<\/strong>&#65306;\n&#20351;&#29992; <code>LoggerInterface<\/code> &#26469;&#35760;&#24405;&#35831;&#27714;&#26085;&#24535;&#12290;<\/p>\n<pre><code class=\"language-php\">use MonologLoggerInterface;\nuse MonologHandlerStreamHandler;\nuse MonologFormatterSimpleFormatter;\n\nclass MyController extends AbstractController\n{\n   private $logger;\n\n   public function __construct(LoggerInterface $logger)\n   {\n       $this-&gt;logger = $logger;\n   }\n\n   public function index()\n   {\n       \/\/ &#35760;&#24405;&#35831;&#27714;&#26085;&#24535;\n       $this-&gt;logger-&gt;info('Request received');\n\n       \/\/ &#22788;&#29702;&#35831;&#27714;\n       return new Response('Hello, World!');\n   }\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>&#33258;&#23450;&#20041;&#26085;&#24535;&#22788;&#29702;&#36923;&#36753;<\/h3>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#26356;&#22797;&#26434;&#30340;&#26085;&#24535;&#22788;&#29702;&#36923;&#36753;&#65292;&#21487;&#20197;&#21019;&#24314;&#19968;&#20010;&#33258;&#23450;&#20041;&#30340; Logger &#31867;&#65292;&#24182;&#22312;&#25511;&#21046;&#22120;&#20013;&#27880;&#20837;&#23427;&#12290;<\/p>\n<ol>\n<li>\n<p><strong>&#21019;&#24314;&#33258;&#23450;&#20041; Logger &#31867;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppService;\n\nuse MonologLogger;\nuse MonologHandlerStreamHandler;\nuse MonologFormatterSimpleFormatter;\n\nclass CustomLogger\n{\n   private $logger;\n\n   public function __construct(string $path)\n   {\n       $handler = new StreamHandler($path);\n       $formatter = new SimpleFormatter();\n       $handler-&gt;setFormatter($formatter);\n\n       $this-&gt;logger = new Logger('CustomLogger');\n       $this-&gt;logger-&gt;pushHandler($handler);\n   }\n\n   public function info(string $message): void\n   {\n       $this-&gt;logger-&gt;info($message);\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#22312;&#25511;&#21046;&#22120;&#20013;&#27880;&#20837;&#33258;&#23450;&#20041; Logger<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">use AppServiceCustomLogger;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass MyController extends AbstractController\n{\n   private $customLogger;\n\n   public function __construct(CustomLogger $customLogger)\n   {\n       $this-&gt;customLogger = $customLogger;\n   }\n\n   public function index()\n   {\n       \/\/ &#35760;&#24405;&#35831;&#27714;&#26085;&#24535;\n       $this-&gt;customLogger-&gt;info('Request received');\n\n       \/\/ &#22788;&#29702;&#35831;&#27714;\n       return new Response('Hello, World!');\n   }\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&#36825;&#20123;&#26041;&#27861;&#21487;&#20197;&#24110;&#21161;&#20320;&#22312; Symfony &#20013;&#26377;&#25928;&#22320;&#35760;&#24405;&#35831;&#27714;&#26085;&#24535;&#65292;&#20174;&#32780;&#25552;&#39640;&#31995;&#32479;&#30340;&#21487;&#32500;&#25252;&#24615;&#21644;&#35843;&#35797;&#33021;&#21147;&#12290;&#26681;&#25454;&#20320;&#30340;&#20855;&#20307;&#38656;&#27714;&#36873;&#25321;&#21512;&#36866;&#30340;&#26041;&#27861;&#36827;&#34892;&#37197;&#32622;&#21644;&#20351;&#29992;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#27010;&#35272;<\/h2><p>&#22312;Web&#24320;&#21457;&#26041;&#38754;&#65292;&#26085;&#24535;&#35760;&#24405;&#26159;&#19968;&#39033;&#33267;&#20851;&#37325;&#35201;&#30340;&#32452;&#25104;&#37096;&#20998;&#65292;&#23427;&#26377;&#21161;&#20110;&#35786;&#26029;&#38382;&#39064;&#12289;&#36319;&#36394;&#24212;&#29992;&#31243;&#24207;&#34892;&#20026;&#20197;&#21450;&#30417;&#25511;&#27969;&#37327;&#12290;Symfony&#65292;&#19968;&#20010;&#38750;&#24120;&#27969;&#34892;&#30340;PHP&#26694;&#26550;&#65292;&#25552;&#20379;&#20102;&#24378;&#22823;&#30340;&#26085;&#24535;&#35760;&#24405;&#26426;&#21046;&#65292;&#36825;&#21487;&#20197;&#31616;&#21270;&#24320;&#21457;&#32773;&#36827;&#34892;HTTP&#35831;&#27714;&#30340;&#26085;&#24535;&#35760;&#24405;&#36807;&#31243;&#12290;<\/p><p>&#26412;&#25945;&#31243;&#23558;&#25351;&#23548;&#24744;&#22914;&#20309;&#20351;&#29992;Monolog&#65288;Symfony&#40664;&#35748;&#30340;&#26085;&#24535;&#24211;&#65289;&#22312;Symfony&#24212;&#29992;&#20013;&#35774;&#32622;&#35831;&#27714;&#26085;&#24535;&#35760;&#24405;&#36807;&#31243;&#12290;&#22312;&#28145;&#20837;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#30340;Symfony&#24212;&#29992;&#31243;&#24207;&#24050;&#36816;&#34892;&#12290;&#22914;&#26524;&#23578;&#26410;&#36816;&#34892;&#65292;&#21487;&#20197;&#25353;&#29031;&#23448;&#26041;Symfony&#25991;&#26723;&#24555;&#36895;&#21019;&#24314;&#19968;&#20010;&#12290;<\/p><h3>&#29702;&#35299;Symfony&#30340;&#26085;&#24535;&#26426;&#21046;<\/h3><p>Symfony &#20351;&#29992; Monolog &#22788;&#29702;&#26085;&#24535;&#35760;&#24405;&#12290;Monolog &#20801;&#35768;&#24744;&#37197;&#32622;&#21508;&#31181;&#22788;&#29702;&#22120;&#21644;&#26684;&#24335;&#22120;&#65292;&#20197;&#25511;&#21046;&#26085;&#24535;&#30340;&#21457;&#36865;&#20301;&#32622;&#21450;&#20854;&#26684;&#24335;&#12290;&#24120;&#35265;&#30340;&#22788;&#29702;&#22120;&#21253;&#25324;&#25991;&#20214;&#22788;&#29702;&#22120;&#65288;StreamHandler&#65289;&#29992;&#20110;&#23558;&#26085;&#24535;&#35760;&#24405;&#21040;&#25991;&#20214;&#12289;&#27983;&#35272;&#22120;&#22788;&#29702;&#22120;&#65288;FirePHPHandler&#65289;&#29992;&#20110;&#23558;&#26085;&#24535;&#35760;&#24405;&#21040;&#27983;&#35272;&#22120;&#20197;&#21450;&#31995;&#32479;&#26085;&#24535;&#22788;&#29702;&#22120;&#65288;SyslogHandler&#65289;&#29992;&#20110;&#23558;&#26085;&#24535;&#35760;&#24405;&#21040;&#31995;&#32479;&#26085;&#24535;&#12290;<\/p><h2>&#22312;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#23433;&#35013;Monolog&#12290;<\/h2><p>&#22914;&#26524;&#24744;&#30340;&#24212;&#29992;&#23578;&#26410;&#23433;&#35013;Monolog&#65292;&#21487;&#20197;&#36890;&#36807;Composer&#36827;&#34892;&#23433;&#35013;&#65306;<\/p><pre><code>composer require symfony\/monolog-bundle\n<\/code><\/pre><h2>&#37197;&#32622;Monolog&#26469;&#35760;&#24405;&#35831;&#27714;&#12290;<\/h2><h3>&#21019;&#24314;&#19968;&#20010;Monolog&#36890;&#36947;<\/h3><p>&#36890;&#36947;&#23545;&#20110;&#20998;&#31867;&#26085;&#24535;&#38750;&#24120;&#26377;&#29992;&#12290;&#35201;&#20026;&#35831;&#27714;&#26085;&#24535;&#21019;&#24314;&#19987;&#29992;&#30340;&#36890;&#36947;&#65306;<\/p><pre><code># config\/packages\/monolog.yaml\nmonolog:\n    channels: ['request']\n<\/code><\/pre><p>&#36825;&#20010;&#39057;&#36947;&#21487;&#20197;&#34987;&#22810;&#20010;&#22788;&#29702;&#22120;&#24341;&#29992;&#65292;&#22240;&#27492;&#21482;&#26377;&#29305;&#23450;&#30340;&#26085;&#24535;&#20250;&#34987;&#20889;&#20837;&#37027;&#37324;&#12290;<\/p><h3>&#21019;&#24314;&#33258;&#23450;&#20041;&#26381;&#21153;&#26469;&#35760;&#24405;&#35831;&#27714;<\/h3><p>&#20320;&#21487;&#20197;&#21019;&#24314;&#19968;&#20010;&#26381;&#21153;&#26469;&#30417;&#21548;&#20869;&#26680;&#20107;&#20214;&#24182;&#35760;&#24405;&#27599;&#26465;HTTP&#35831;&#27714;&#12290;&#20197;&#19979;&#26159;&#20855;&#20307;&#27493;&#39588;&#65306;\n\n&#22312;Linux&#31995;&#32479;&#20013;&#65292;&#20351;&#29992;\/proc\/sys\/kernel\/log&#30446;&#24405;&#20013;&#30340;&#25991;&#20214;&#26469;&#37197;&#32622;&#26085;&#24535;&#32423;&#21035;&#21644;&#26684;&#24335;&#12290;\n&#20351;&#29992;journalctl -u &lt;service-name&gt;&#21629;&#20196;&#26597;&#30475;&#26085;&#24535;&#20449;&#24687;&#12290;\n&#22914;&#26524;&#38656;&#35201;&#26356;&#35814;&#32454;&#30340;&#35843;&#35797;&#20449;&#24687;&#65292;&#21487;&#20197;&#32771;&#34385;&#22312;&#24212;&#29992;&#31243;&#24207;&#21551;&#21160;&#26102;&#35843;&#29992;syslog()&#20989;&#25968;&#20197;&#36755;&#20986;&#21040;&#26631;&#20934;&#38169;&#35823;&#27969;&#12290;\n\n&#20363;&#22914;&#65306;\n#include &lt;stdio.h&gt;\n#include &lt;unistd.h&gt;\n\nint main() {\n int fd = open(&#8220;\/dev\/kmsg&#8221;, O_WRONLY);\n if (fd == -1) {\n perror(&#8220;open&#8221;);\n return 1;\n }\n\n while (1) {\n char buffer[512];\n ssize_t n = read(0, buffer, sizeof(buffer));\n if (n &gt; 0) {\n write(fd, buffer, n);\n }\n }\n\n close(fd);\n return 0;\n}\n&#36825;&#27573;&#20195;&#30721;&#20250;&#22312;&#31243;&#24207;&#36816;&#34892;&#26102;&#19981;&#26029;&#22320;&#35835;&#21462;&#26631;&#20934;&#36755;&#20837;&#65288;stdin&#65289;&#30340;&#20869;&#23481;&#65292;&#24182;&#23558;&#20854;&#20889;&#20837;&#20869;&#26680;&#28040;&#24687;&#26085;&#24535;&#65288;kmsg&#65289;&#12290;&#36825;&#26679;&#21487;&#20197;&#22312;&#25511;&#21046;&#21488;&#23454;&#26102;&#30475;&#21040;&#25152;&#26377;&#25509;&#25910;&#21040;&#30340;HTTP&#35831;&#27714;&#20449;&#24687;&#12290;<\/p><pre><code># src\/EventListener\/RequestLogger.php\n\nnamespace AppEventListener;\n\nuse SymfonyComponentHttpKernelEventRequestEvent;\nuse PsrLogLoggerInterface;\n\nclass RequestLogger\n{\n    private $logger;\n\n    public function __construct(LoggerInterface $logger)\n    {\n        $this-&gt;logger = $logger;\n    }\n\n    public function onKernelRequest(RequestEvent $event)\n    {\n        \/\/ Only log master requests\n        if (!$event-&gt;isMasterRequest()) {\n            return;\n        }\n        $request = $event-&gt;getRequest();\n        $this-&gt;logger-&gt;info(sprintf(\n            'New request: %s %s',\n            $request-&gt;getMethod(),\n            $request-&gt;getRequestUri()\n        ));\n    }\n}\n<\/code><\/pre><p>&#25509;&#19979;&#26469;&#65292;&#27880;&#20876;&#36825;&#20010;&#30417;&#21548;&#22120;&#24182;&#23558;&#20854;&#29992;&#20110;&ldquo;&#35831;&#27714;&rdquo;&#36890;&#36947;&#12290;&#22312; services.yaml &#20013;&#28155;&#21152;&#20197;&#19979;&#20869;&#23481;&#65306;<\/p><pre><code># config\/services.yaml\nservices:\n    AppEventListenerRequestLogger:\n        arguments: ['@monolog.logger.request']\n        tags:\n            - { name: 'kernel.event_listener', event: 'kernel.request', method: 'onKernelRequest' }\n<\/code><\/pre><h3>&#37197;&#32622;&#22788;&#29702;&#22120;&#20197;&#20889;&#20837;&#26085;&#24535;<\/h3><p>&#26377;&#20102;&#36825;&#20010;&#26381;&#21153;&#65292;&#37197;&#32622;&#19968;&#20010;&#22788;&#29702;&#22120;&#26469;&#23558;&#35831;&#27714;&#26085;&#24535;&#20889;&#20837;&#29305;&#23450;&#30340;&#25991;&#20214;&#12290;&#20462;&#25913;Monolog&#37197;&#32622;&#65306;<\/p><pre><code># config\/packages\/monolog.yaml\nmonolog:\n    handlers:\n        request:\n            type: stream\n            path: '%kernel.logs_dir%\/request.log'\n            level: info\n            channels: ['request']\n<\/code><\/pre><p>&#22312;&#36825;&#31181;&#37197;&#32622;&#19979;&#65292;&#30001;RequestLogger&#26381;&#21153;&#25910;&#38598;&#30340;&#25152;&#26377;&#35831;&#27714;&#26085;&#24535;&#37117;&#23558;&#34987;&#20889;&#20837;&#21517;&#20026;&lsquo;var\/log\/request.log&rsquo;&#30340;&#26085;&#24535;&#25991;&#20214;&#65292;&#24182;&#20197;&lsquo;info&rsquo;&#32423;&#21035;&#35760;&#24405;&#12290;<\/p><h2>&#23454;&#26045;&#32467;&#26500;&#21270;&#26085;&#24535;&#35760;&#24405;<\/h2><p>&#32467;&#26500;&#21270;&#26085;&#24535;&#23545;&#20110;&#25552;&#39640;&#21487;&#35835;&#24615;&#21644;&#35299;&#26512;&#26085;&#24535;&#25968;&#25454;&#38750;&#24120;&#26377;&#24110;&#21161;&#12290;&#35201;&#23454;&#29616;JSON&#26684;&#24335;&#30340;&#26085;&#24535;&#65306;\n\n&#20026;&#27599;&#20010;&#23383;&#27573;&#21629;&#21517;&#12290;\n&#20351;&#29992;&#38190;&#20540;&#23545;&#30340;&#24418;&#24335;&#23384;&#20648;&#25968;&#25454;&#65292;&#20363;&#22914;&#65306;{&#8220;key&#8221;: &#8220;value&#8221;}\n&#30830;&#20445;&#25152;&#26377;&#30340;&#38190;&#21644;&#20540;&#37117;&#26159;&#26377;&#25928;&#30340;&#23383;&#31526;&#20018;&#25110;&#25968;&#23383;&#31867;&#22411;&#12290;\n\n&#36825;&#26377;&#21161;&#20110;&#22312;&#31995;&#32479;&#20869;&#37096;&#22788;&#29702;&#12289;&#20998;&#26512;&#20197;&#21450;&#19982;&#20854;&#20182;&#26381;&#21153;&#36827;&#34892;&#36890;&#20449;&#26102;&#26356;&#23481;&#26131;&#22320;&#35775;&#38382;&#21644;&#29702;&#35299;&#26085;&#24535;&#20449;&#24687;&#12290;<\/p><pre><code># config\/packages\/monolog.yaml\nmonolog:\n    handlers:\n        request:\n            type: stream\n            path: '%kernel.logs_dir%\/request.log'\n            level: info\n            channels: ['request']\n            formatter: 'monolog.formatter.json'\n<\/code><\/pre><p>&#36825;&#23558;&#30830;&#20445;&#27599;&#20010;&#26085;&#24535;&#26465;&#30446;&#37117;&#26159;&#19968;&#20010;JSON&#23545;&#35937;&#65292;&#20174;&#32780;&#26356;&#23481;&#26131;&#20351;&#29992;&#26085;&#24535;&#31649;&#29702;&#24037;&#20855;&#22788;&#29702;&#36825;&#20123;&#26085;&#24535;&#12290;<\/p><h2>&#23433;&#20840;&#32771;&#34385;<\/h2><p>&#22312;&#35760;&#24405;&#35831;&#27714;&#26102;&#65292;&#35831;&#23567;&#24515;&#19981;&#35201;&#35760;&#24405;&#25935;&#24863;&#20449;&#24687;&#65292;&#22914;&#23494;&#30721;&#25110;&#20010;&#20154;&#25968;&#25454;&#12290;&#21487;&#20197;&#22312;&#35760;&#24405;&#35831;&#27714;&#21069;&#36890;&#36807;RequestLogger&#26381;&#21153;&#36807;&#28388;&#20986;&#25935;&#24863;&#25968;&#25454;&#12290;&#21516;&#26102;&#65292;&#30830;&#20445;&#20026;&#26085;&#24535;&#25991;&#20214;&#35774;&#32622;&#36866;&#24403;&#30340;&#26435;&#38480;&#65292;&#20197;&#38450;&#27490;&#26410;&#32463;&#25480;&#26435;&#30340;&#35775;&#38382;&#12290;<\/p><h2>&#30417;&#25511;&#21644;&#36718;&#25442;&#26085;&#24535;<\/h2><p>&#23545;&#20110;&#29983;&#20135;&#24212;&#29992;&#65292;&#24314;&#35758;&#20351;&#29992;&#26085;&#24535;&#36718;&#36716;&#26469;&#31649;&#29702;&#26085;&#24535;&#25991;&#20214;&#22823;&#23567;&#24182;&#30830;&#20445;&#26085;&#24535;&#19981;&#20250;&#36807;&#24230;&#21344;&#29992;&#30913;&#30424;&#31354;&#38388;&#12290;Symfony&#21644;Monolog&#37117;&#25903;&#25345;&#26085;&#24535;&#36718;&#36716;&#65292;&#21487;&#20197;&#36890;&#36807;&#37197;&#32622;&#26059;&#36716;&#25991;&#20214;&#22788;&#29702;&#22120;&#65288;rotating_file handler&#65289;&#26469;&#36827;&#34892;&#35774;&#32622;&#12290;<\/p><pre><code># config\/packages\/monolog.yaml\nmonolog:\n    handlers:\n        request:\n            type: rotating_file\n            path: '%kernel.logs_dir%\/request.log'\n            level: info\n            channels: ['request']\n            max_files: 10 \n<\/code><\/pre><p>&#35813;&#37197;&#32622;&#20250;&#26059;&#36716;&#35831;&#27714;&#26085;&#24535;&#25991;&#20214;&#65292;&#26368;&#22810;&#20445;&#30041;10&#20010;&#21382;&#21490;&#26085;&#24535;&#35760;&#24405;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;Symfony&#24212;&#29992;&#20013;&#35760;&#24405;HTTP&#35831;&#27714;&#21487;&#20197;&#25552;&#20379;&#26377;&#20851;&#24212;&#29992;&#31243;&#24207;&#20351;&#29992;&#24773;&#20917;&#30340;&#35265;&#35299;&#65292;&#26377;&#21161;&#20110;&#36805;&#36895;&#35782;&#21035;&#38382;&#39064;&#12290;&#25353;&#29031;&#26412;&#25945;&#31243;&#20013;&#30340;&#27493;&#39588;&#35774;&#32622;&#19968;&#20010;&#36866;&#21512;&#24744;Symfony&#24212;&#29992;&#30340;&#24378;&#22823;&#30340;&#26085;&#24535;&#31995;&#32479;&#12290;&#22987;&#32456;&#30830;&#20445;&#36981;&#24490;&#23433;&#20840;&#26368;&#20339;&#23454;&#36341;&#65292;&#24182;&#20687;&#23545;&#24453;&#28304;&#20195;&#30721;&#25110;&#25968;&#25454;&#24211;&#19968;&#26679;&#20005;&#26684;&#20445;&#25252;&#26085;&#24535;&#25991;&#20214;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312;Symfony&#26694;&#26550;&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;<code>Request<\/code>&#23545;&#35937;&#26469;&#35760;&#24405;HTTP&#35831;&#27714;&#30340;&#35814;&#32454;&#20449;&#24687;&#12290;&#19979;&#38754;&#26159;&#22914;&#20309;&#22312;<code>app\/Resources\/config\/services.yml<\/code>&#25991;&#20214;&#20013;&#35774;&#32622;&#36825;&#20010;&#21151;&#33021;&#30340;&#19968;&#20010;&#20363;&#23376;&#65306;<\/p>\n<ol>\n<li>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#30340;&#24212;&#29992;&#24050;&#32463;&#23433;&#35013;&#20102;<code>symfony\/var-dumper<\/code>&#21644;<code>symfony\/dependency-injection<\/code>&#12290;<\/p>\n<\/li>\n<li>\n<p>&#25171;&#24320;<code>app\/Resources\/config\/services.yml<\/code>&#25991;&#20214;&#65292;&#24182;&#28155;&#21152;&#20197;&#19979;&#37197;&#32622;&#65306;<\/p>\n<pre><code class=\"language-yaml\">services:\nmy_request_tracker:\n    class: MyBundleTrackerRequestTracker\n    arguments: ['@doctrine.orm.entity_manager']<\/code><\/pre>\n<\/li>\n<li>\n<p>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#26381;&#21153;&#31867;&#65288;&#20363;&#22914;&#65306;<code>MyBundleTrackerRequestTracker<\/code>&#65289;&#65292;&#24182;&#23454;&#29616;<code>RequestTrackerInterface<\/code>&#25509;&#21475;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#22312;&#35813;&#31867;&#20013;&#23450;&#20041;&#26041;&#27861;&#20197;&#36319;&#36394;&#35831;&#27714;&#12290;&#36825;&#37324;&#25105;&#20204;&#21482;&#35760;&#24405;&#35831;&#27714;&#30340;&#26041;&#27861;&#21517;&#21644;URL&#36335;&#24452;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#28982;&#21518;&#65292;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#26381;&#21153;&#31867;&#65288;&#20363;&#22914;&#65306;<code>MyBundleTrackerTrackerService<\/code>) &#26469;&#31649;&#29702;request tracker&#12290;&#36825;&#20010;&#26381;&#21153;&#31867;&#23558;&#36127;&#36131;&#19982;&#25968;&#25454;&#24211;&#36827;&#34892;&#20132;&#20114;&#65292;&#20197;&#20415;&#23384;&#20648;&#35831;&#27714;&#25968;&#25454;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#26381;&#21153;&#27880;&#20837;&#22120;&#65288;&#20363;&#22914;&#65306;<code>MyBundleTrackerTrackerService<\/code>&#65289;&#24182;&#23558;<code>my_request_tracker<\/code>&#20316;&#20026;&#20381;&#36182;&#39033;&#27880;&#20837;&#21040;&#23481;&#22120;&#20013;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#20026;&#20320;&#30340;&#25511;&#21046;&#22120;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#26041;&#27861;&#65292;&#22914;<code>getRequests()<\/code>&#65292;&#29992;&#20110;&#33719;&#21462;&#25152;&#26377;&#24050;&#36319;&#36394;&#30340;&#35831;&#27714;&#12290;<\/p>\n<\/li>\n<\/ol>\n<p>&#20197;&#19979;&#26159;&#23436;&#25972;&#30340;&#20195;&#30721;&#31034;&#20363;&#65306;<\/p>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#22312;<code>vendor\/symfony\/var-dumper\/src\/Symfony\/DependencyInjection\/AbstractService.php<\/code>&#20013;&#25214;&#21040;<code>RequestTrackerInterface<\/code>&#30340;&#23454;&#29616;&#12290;&#28982;&#21518;&#65292;&#22312;<code>MyBundleTrackerRequestTracker<\/code>&#31867;&#20013;&#23454;&#29616;&#36825;&#20010;&#25509;&#21475;&#65292;&#24182;&#25552;&#20379;&#19968;&#20010;&#26041;&#27861;&#26469;&#22788;&#29702;&#35831;&#27714;&#12290;<\/p>\n<p>&#25509;&#19979;&#26469;&#65292;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#26381;&#21153;&#27880;&#20837;&#22120;&#26469;&#31649;&#29702;&#21644;&#36319;&#36394;&#35831;&#27714;&#12290;&#22312;&#36825;&#20010;&#26381;&#21153;&#27880;&#20837;&#22120;&#20013;&#65292;&#20320;&#38656;&#35201;&#27880;&#20837;<code>my_request_tracker<\/code>&#12290;<\/p>\n<p>&#26368;&#21518;&#65292;&#20320;&#24212;&#35813;&#22312;&#25511;&#21046;&#22120;&#20013;&#35843;&#29992;<code>getRequests()<\/code>&#26041;&#27861;&#26469;&#33719;&#21462;&#25152;&#26377;&#24050;&#36319;&#36394;&#30340;&#35831;&#27714;&#12290;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace MyBundleTracker;\n\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyContractsServiceAttribute;\nuse SymfonyComponentDependencyInjectionContainerBuilder;\nuse SymfonyComponentHttpKernelBundleBundle;\n\nclass RequestTracker implements RequestTrackerInterface\n{\n    public function __construct(ContainerBuilder $container)\n    {\n        \/\/ &#21021;&#22987;&#21270;&#20219;&#20309;&#38656;&#35201;&#30340;&#20381;&#36182;&#39033;\n    }\n\n    \/**\n     * @return array[]\n     *\/\n    public function getRequests()\n    {\n        return [];\n    }\n}<\/code><\/pre>\n<p>&#36825;&#26679;&#65292;&#20320;&#23601;&#25104;&#21151;&#22320;&#22312;Symfony&#20013;&#35774;&#32622;&#20102;&#35831;&#27714;&#36861;&#36394;&#21151;&#33021;&#12290;&#29616;&#22312;&#20320;&#21487;&#20197;&#36890;&#36807;&#35775;&#38382;<code>$this-&gt;tracker-&gt;getRequests()<\/code>&#26469;&#33719;&#21462;&#25152;&#26377;&#30340;&#35831;&#27714;&#35760;&#24405;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312; Symfony &#20013;&#35760;&#24405;&#35831;&#27714;&#26159;&#26085;&#24535;&#36319;&#36394;&#21644;&#35843;&#35797;&#30340;&#038;#3..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1085","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1085","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1085"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1085"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1085"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}