Background
Symfony generates a lot of logs like, like process init, begin transaction, ini, . Most of these logs provide less important information, but they interfere with the log system and especially cost customers (when using cloud services like AWS Cloudwatch log to store and filter logs). Here are ways to hide it
Release
Use log level settings
In the monolog.yml file, set the log level variable to a level that you feel is necessary, serving good information for debugging and investigation tasks.
1 2 3 4 5 6 | <span class="token key atrule">cloudWatch</span> <span class="token punctuation">:</span> <span class="token key atrule">type</span> <span class="token punctuation">:</span> service <span class="token key atrule">action_level</span> <span class="token punctuation">:</span> <span class="token string">"%env(LOG_LEVEL)%"</span> <span class="token key atrule">id</span> <span class="token punctuation">:</span> cloudwatch_handler <span class="token key atrule">channels</span> <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token string">"!event"</span> <span class="token punctuation">,</span> <span class="token string">"!doctrine"</span> <span class="token punctuation">,</span> <span class="token string">"!php"</span> <span class="token punctuation">]</span> |
The levels of setting log levels you can refer to
1 2 3 4 5 6 7 8 9 | <span class="token key atrule">DEBUG</span> <span class="token punctuation">:</span> Detailed debug information. <span class="token key atrule">INFO</span> <span class="token punctuation">:</span> Interesting events or information. <span class="token key atrule">NOTICE</span> <span class="token punctuation">:</span> Normal but significant events. <span class="token key atrule">WARNING</span> <span class="token punctuation">:</span> Exceptional occurrences that are not errors. <span class="token key atrule">ERROR</span> <span class="token punctuation">:</span> Runtime errors that do not require immediate action. <span class="token key atrule">CRITICAL</span> <span class="token punctuation">:</span> Critical conditions. <span class="token key atrule">ALERT</span> <span class="token punctuation">:</span> Action must be taken immediately. <span class="token key atrule">EMERGENCY</span> <span class="token punctuation">:</span> System is unusable. |
Use a custom handler (better)
Because these residual logs are mostly debug and log info, it is also at the same level as the logs I often add to investigate, so it is difficult to use the above method, so use a top handle to filter messages only. Specifically, the solution I think is quite good
- Create a custom handle at the beginning of the log string.
1 2 3 4 5 6 7 | <span class="token key atrule">handlers</span> <span class="token punctuation">:</span> <span class="token key atrule">main</span> <span class="token punctuation">:</span> <span class="token key atrule">type</span> <span class="token punctuation">:</span> service <span class="token key atrule">id</span> <span class="token punctuation">:</span> monolog.custom_handler.service <span class="token key atrule">level</span> <span class="token punctuation">:</span> debug <span class="token key atrule">handler</span> <span class="token punctuation">:</span> cloudWatch |
- In service.yml add define class.
1 2 3 | <span class="token key atrule">monolog.custom_handler.service</span> <span class="token punctuation">:</span> <span class="token key atrule">class</span> <span class="token punctuation">:</span> CustomizeLogCustomHandler |
- In the Customize/Log folder add the class:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">Customize Log</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Monolog Handler AbstractHandler</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name-definition class-name">CustomHandler</span> <span class="token keyword">extends</span> <span class="token class-name">AbstractHandler</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">handle</span> <span class="token punctuation">(</span> <span class="token keyword type-hint">array</span> <span class="token variable">$record</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Check if handling level was reached</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$record</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'level'</span> <span class="token punctuation">]</span> <span class="token operator"><</span> <span class="token variable">$this</span> <span class="token operator">-></span> <span class="token property">level</span> <span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token constant boolean">false</span> <span class="token punctuation">;</span> <span class="token variable">$listMessageRemoved</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'INIT'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PROCESS START'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PROCESS END'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'User was reloaded'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'Checking support on guard authenticator'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'Guard authenticator does not support the request'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'Checking for guard authentication credentials'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'Read existing security token from the session'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'Stored the security token in the session'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'Matched route'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'LOGIC START'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'LOGIC END'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'Begin Transaction'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'Commit executed'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'fallback to PC layout'</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$listMessageRemoved</span> <span class="token keyword">as</span> <span class="token variable">$messageRemoved</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$this</span> <span class="token operator">-></span> <span class="token function">startsWith</span> <span class="token punctuation">(</span> <span class="token variable">$record</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'message'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token variable">$messageRemoved</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token constant boolean">false</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * Check string start with. */</span> <span class="token keyword">private</span> <span class="token keyword">function</span> <span class="token function-definition function">startsWith</span> <span class="token punctuation">(</span> <span class="token variable">$string</span> <span class="token punctuation">,</span> <span class="token variable">$startString</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$len</span> <span class="token operator">=</span> <span class="token function">strlen</span> <span class="token punctuation">(</span> <span class="token variable">$startString</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">(</span> <span class="token function">substr</span> <span class="token punctuation">(</span> <span class="token variable">$string</span> <span class="token punctuation">,</span> <span class="token number">0</span> <span class="token punctuation">,</span> <span class="token variable">$len</span> <span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token variable">$startString</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
As you can see above, the $listMessageRemoved variable contains the messages that you want to remove from the log, the mechanism here is based on the handle() method, returning true means that this message has been processed so it is not needed. sent through the next handle (here is the cloudwatch handler), according to the documention:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token comment">/** * Handles a record. * * All records may be passed to this method, and the handler should discard * those that it does not want to handle. * * The return value of this function controls the bubbling process of the handler stack. * Unless the bubbling is interrupted (by returning true), the Logger class will keep on * calling further handlers in the stack with a given log record. * * @param array $record The record to handle * @return bool true means that this handler handled the record, and that bubbling is not permitted. * false means the record was either not processed or that this handler allows bubbling. */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">handle</span> <span class="token punctuation">(</span> <span class="token keyword type-hint">array</span> <span class="token variable">$record</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
=> Finally we have a delicious solution, to remove the log to waste customers’ money, hopefully it will help everyone