Twig\Error\RuntimeError {#1286 -lineno: 571 -name: "@WebProfiler/Collector/logger.html.twig" -rawMessage: "An exception has been thrown during the rendering of a template ("Typed property Symfony\Component\VarDumper\Cloner\Stub::$value must not be accessed before initialization")." -sourcePath: "/profiles/k/kf/kfr/kfrbmadoaba2/stride2.aba.vg/vendor/symfony/web-profiler-bundle/Resources/views/Collector/logger.html.twig" -sourceCode: """ {% extends '@WebProfiler/Profiler/layout.html.twig' %}\n \n {% block stylesheets %}\n {{ parent() }}\n \n <style>\n :root {\n --log-filter-active-num-color: #2563EB;\n --log-timestamp-color: #555;\n }\n .theme-dark {\n --log-filter-active-num-color: #2563EB;\n --log-timestamp-color: #ccc;\n }\n \n .log-filters {\n display: flex;\n flex-wrap: wrap;\n }\n .log-filters .log-filter {\n flex-shrink: 0;\n margin-right: 15px;\n position: relative;\n }\n .log-filters .log-filter summary {\n align-items: center;\n background: var(--button-background);\n border-radius: 6px;\n border: 1px solid var(--button-border-color);\n box-shadow: var(--button-box-shadow);\n color: var(--button-color);\n cursor: pointer;\n display: flex;\n font-size: 13px;\n font-weight: 500;\n padding: 4px 8px;\n white-space: nowrap;\n }\n .log-filters .log-filter summary:active {\n box-shadow: none;\n transform: translateY(1px);\n }\n .log-filters .log-filter summary .icon {\n height: 18px;\n width: 18px;\n margin: 0 7px 0 0;\n }\n .log-filters .log-filter summary svg {\n height: 18px;\n width: 18px;\n opacity: 0.7;\n }\n .log-filters .log-filter summary svg {\n stroke-width: 2;\n }\n .log-filters .log-filter summary .filter-active-num {\n color: var(--log-filter-active-num-color);\n font-weight: bold;\n padding: 0 1px;\n }\n .log-filter .tab-navigation {\n position: relative;\n }\n .log-filter .tab-navigation input[type="radio"] {\n position: absolute;\n pointer-events: none;\n opacity: 0;\n }\n .tab-navigation input[type="radio"]:checked + .tab-control {\n background-color: var(--tab-active-background);\n border-radius: 6px;\n box-shadow: inset 0 0 0 1.5px var(--tab-active-border-color);\n color: var(--tab-active-color);\n position: relative;\n z-index: 1;\n }\n .theme-dark .tab-navigation input[type="radio"]:checked + .tab-control {\n box-shadow: inset 0 0 0 1px var(--tab-border-color);\n }\n .tab-navigation input[type="radio"]:focus-visible + .tab-control {\n outline: 1px solid var(--color-link);\n }\n .tab-navigation input[type="radio"]:checked + .tab-control + input[type="radio"] + .tab-control:before{\n width: 0;\n }\n \n .log-filters .log-filter .log-filter-content {\n background: var(--base-0);\n border: 1px solid var(--table-border-color);\n border-radius: 6px;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n padding: 15px;\n position: absolute;\n left: 0;\n top: 32px;\n max-width: 400px;\n min-width: 200px;\n z-index: 9999;\n }\n .log-filters .log-filter .log-filter-content .log-filter-option {\n align-items: center;\n display: flex;\n }\n .log-filter .filter-select-all-or-none {\n margin-bottom: 10px;\n }\n .log-filter .filter-select-all-or-none button + button {\n margin-left: 15px;\n }\n .log-filters .log-filter .log-filter-content .log-filter-option + .log-filter-option {\n margin: 7px 0 0;\n }\n .log-filters .log-filter .log-filter-content .log-filter-option label {\n cursor: pointer;\n flex: 1;\n padding-left: 10px;\n }\n \n table.logs {\n border-bottom-width: 0;\n border-collapse: collapse;\n }\n table.logs tr + tr td {\n border-width: 1px 0 0;\n }\n table.logs .metadata {\n display: block;\n font-size: 12px;\n }\n .theme-dark tr.status-error td,\n .theme-dark tr.status-warning td { border-bottom: unset; border-top: unset; }\n \n table.logs .log-timestamp {\n color: var(--log-timestamp-color);\n }\n table.logs .log-metadata {\n margin: 8px 0 0;\n }\n table.logs .log-metadata > span {\n display: inline-block;\n }\n table.logs .log-metadata > span + span {\n margin-left: 10px;\n }\n table.logs .log-metadata .log-channel {\n color: var(--base-1);\n font-size: 13px;\n font-weight: bold;\n }\n table.logs .log-metadata .badge {\n background: var(--badge-light-background);\n color: var(--badge-light-color);\n }\n table.logs .log-metadata .log-num-occurrences {\n color: var(--color-muted);\n font-size: 13px;\n }\n table.logs .log-metadata .context {\n background: var(--code-block-background);\n border-radius: 4px;\n padding: 5px;\n }\n table.logs .log-metadata .context + .context {\n margin-top: 10px;\n }\n .log-type-badge {\n background: var(--badge-light-background);\n box-shadow: none;\n color: var(--badge-light-color);\n display: inline-block;\n font-family: var(--font-family-system);\n margin-top: 5px;\n }\n .log-type-badge.badge-deprecation,\n .log-type-badge.badge-warning {\n background: var(--badge-warning-background);\n color: var(--badge-warning-color);\n }\n .log-type-badge.badge-error {\n background: var(--badge-danger-background);\n color: var(--badge-danger-color);\n }\n .log-type-badge.badge-silenced {\n background: #EDE9FE;\n color: #6D28D9;\n }\n .theme-dark .log-type-badge.badge-silenced {\n background: #5B21B6;\n color: #EDE9FE;\n }\n \n tr.log-status-warning > td:first-child,\n tr.log-status-error > td:first-child,\n tr.log-status-silenced > td:first-child {\n position: relative;\n }\n tr.log-status-warning > td:first-child:before,\n tr.log-status-error > td:first-child:before,\n tr.log-status-silenced > td:first-child:before {\n background: transparent;\n border-radius: 0;\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 4px;\n height: 100%;\n }\n tr.log-status-warning > td:first-child:before {\n background: var(--yellow-400);\n }\n tr.log-status-error > td:first-child:before {\n background: var(--red-400);\n }\n tr.log-status-silenced > td:first-child:before {\n background: #a78bfa;\n }\n \n .container-compilation-logs {\n background: var(--table-background);\n border: 1px solid var(--base-2);\n border-radius: 6px;\n margin-top: 30px;\n padding: 15px;\n }\n .container-compilation-logs summary {\n cursor: pointer;\n }\n .container-compilation-logs summary h4 {\n margin: 0 0 5px;\n }\n .container-compilation-logs summary p {\n margin: 0;\n }\n </style>\n {% endblock %}\n \n {% block javascripts %}\n <script>\n window.addEventListener('DOMContentLoaded', () => {\n new SymfonyProfilerLoggerPanel();\n });\n \n class SymfonyProfilerLoggerPanel {\n constructor() {\n this.#initializeLogsTable();\n }\n \n #initializeLogsTable() {\n this.#updateLogsTable();\n \n document.querySelectorAll('.log-filter input').forEach((input) => {\n input.addEventListener('change', () => { this.#updateLogsTable(); });\n });\n \n document.querySelectorAll('.filter-select-all-or-none button').forEach((link) => {\n link.addEventListener('click', () => {\n const selectAll = link.classList.contains('select-all');\n link.closest('.log-filter-content').querySelectorAll('input').forEach((input) => {\n input.checked = selectAll;\n });\n \n this.#updateLogsTable();\n });\n });\n \n document.body.addEventListener('click', (event) => {\n document.querySelectorAll('details.log-filter').forEach((filterElement) => {\n if (!filterElement.contains(event.target) && filterElement.open) {\n filterElement.open = false;\n }\n });\n });\n }\n \n #updateLogsTable() {\n const logs = document.querySelector('table.logs');\n if (null === logs) {\n return;\n }\n \n const selectedType = document.querySelector('#log-filter-type input:checked').value;\n const priorities = document.querySelectorAll('#log-filter-priority input');\n const allPriorities = Array.from(priorities).map((input) => input.value);\n const selectedPriorities = Array.from(priorities).filter((input) => input.checked).map((input) => input.value);\n const channels = document.querySelectorAll('#log-filter-channel input');\n const selectedChannels = Array.from(channels).filter((input) => input.checked).map((input) => input.value);\n \n /* hide rows that don't match the current filters */\n let numVisibleRows = 0;\n logs.querySelectorAll('tbody tr').forEach((row) => {\n if ('all' !== selectedType && selectedType !== row.getAttribute('data-type')) {\n row.style.display = 'none';\n return;\n }\n \n const priority = row.getAttribute('data-priority');\n if (false === selectedPriorities.includes(priority) && true === allPriorities.includes(priority)) {\n row.style.display = 'none';\n return;\n }\n \n if ('' !== row.getAttribute('data-channel') && false === selectedChannels.includes(row.getAttribute('data-channel'))) {\n row.style.display = 'none';\n return;\n }\n \n row.style.display = 'table-row';\n numVisibleRows++;\n });\n \n document.querySelector('table.logs').style.display = 0 === numVisibleRows ? 'none' : 'table';\n document.querySelector('.no-logs-message').style.display = 0 === numVisibleRows ? 'block' : 'none';\n \n /* update the selected totals of all filters */\n document.querySelector('#log-filter-priority .filter-active-num').innerText = (priorities.length === selectedPriorities.length) ? 'All' : selectedPriorities.length;\n document.querySelector('#log-filter-channel .filter-active-num').innerText = (channels.length === selectedChannels.length) ? 'All' : selectedChannels.length;\n }\n }\n </script>\n {% endblock %}\n \n {% block toolbar %}\n {% if collector.counterrors or collector.countdeprecations or collector.countwarnings %}\n {% set icon %}\n {% set status_color = collector.counterrors ? 'red' : collector.countwarnings ? 'yellow' : 'none' %}\n {{ source('@WebProfiler/Icon/logger.svg') }}\n <span class="sf-toolbar-value">{{ collector.counterrors ?: (collector.countdeprecations + collector.countwarnings) }}</span>\n {% endset %}\n \n {% set text %}\n <div class="sf-toolbar-info-piece">\n <b>Errors</b>\n <span class="sf-toolbar-status sf-toolbar-status-{{ collector.counterrors ? 'red' }}">{{ collector.counterrors|default(0) }}</span>\n </div>\n \n <div class="sf-toolbar-info-piece">\n <b>Warnings</b>\n <span class="sf-toolbar-status sf-toolbar-status-{{ collector.countwarnings ? 'yellow' }}">{{ collector.countwarnings|default(0) }}</span>\n </div>\n \n <div class="sf-toolbar-info-piece">\n <b>Deprecations</b>\n <span class="sf-toolbar-status sf-toolbar-status-{{ collector.countdeprecations ? 'none' }}">{{ collector.countdeprecations|default(0) }}</span>\n </div>\n {% endset %}\n \n {{ include('@WebProfiler/Profiler/toolbar_item.html.twig', { link: profiler_url, status: status_color }) }}\n {% endif %}\n {% endblock %}\n \n {% block menu %}\n <span class="label label-status-{{ collector.counterrors ? 'error' : collector.countwarnings ? 'warning' : 'none' }} {{ collector.logs is empty ? 'disabled' }}">\n <span class="icon">{{ source('@WebProfiler/Icon/logger.svg') }}</span>\n <strong>Logs</strong>\n {% if collector.counterrors or collector.countdeprecations or collector.countwarnings %}\n <span class="count">\n <span>{{ collector.counterrors ?: (collector.countdeprecations + collector.countwarnings) }}</span>\n </span>\n {% endif %}\n </span>\n {% endblock %}\n \n {% block panel %}\n <h2>Log Messages</h2>\n \n {% if collector.processedLogs is empty %}\n <div class="empty empty-panel">\n <p>No log messages available.</p>\n </div>\n {% else %}\n {% set has_error_logs = collector.processedLogs|column('type')|filter(type => 'error' == type)|length > 0 %}\n {% set has_deprecation_logs = collector.processedLogs|column('type')|filter(type => 'deprecation' == type)|length > 0 %}\n \n {% set filters = collector.filters %}\n <div class="log-filters">\n <div id="log-filter-type" class="log-filter">\n <div class="tab-navigation">\n {% set initially_active_tab = has_error_logs ? 'error' : has_deprecation_logs ? 'deprecation' : 'all' %}\n <input type="radio" id="filter-log-type-all" name="filter-log-type" value="all" {{ 'all' == initially_active_tab ? 'checked' }}>\n <label for="filter-log-type-all" class="tab-control">\n All messages\n </label>\n \n <input type="radio" id="filter-log-type-error" name="filter-log-type" value="error" {{ 'error' == initially_active_tab ? 'checked' }}>\n <label for="filter-log-type-error" class="tab-control">\n Errors\n <span class="badge status-{{ collector.counterrors ? 'error' }}">{{ collector.counterrors|default(0) }}</span>\n </label>\n \n <input type="radio" id="filter-log-type-deprecation" name="filter-log-type" value="deprecation" {{ 'deprecation' == initially_active_tab ? 'checked' }}>\n <label for="filter-log-type-deprecation" class="tab-control">\n Deprecations\n <span class="badge status-{{ collector.countdeprecations ? 'warning' }}">{{ collector.countdeprecations|default(0) }}</span>\n </label>\n </div>\n </div>\n \n <details id="log-filter-priority" class="log-filter">\n <summary>\n <span class="icon">{{ source('@WebProfiler/Icon/filter.svg') }}</span>\n Level (<span class="filter-active-num">{{ filters.priority|length - 1 }}</span>)\n </summary>\n \n <div class="log-filter-content">\n <div class="filter-select-all-or-none">\n <button type="button" class="btn btn-link select-all">Select All</button>\n <button type="button" class="btn btn-link select-none">Select None</button>\n </div>\n \n {% for label, value in filters.priority %}\n <div class="log-filter-option">\n <input {{ 'debug' != value ? 'checked' }} type="checkbox" id="filter-log-level-{{ value }}" name="filter-log-level-{{ value }}" value="{{ value }}">\n <label for="filter-log-level-{{ value }}">{{ label }}</label>\n </div>\n {% endfor %}\n </div>\n </details>\n \n <details id="log-filter-channel" class="log-filter">\n <summary>\n <span class="icon">{{ source('@WebProfiler/Icon/filter.svg') }}</span>\n Channel (<span class="filter-active-num">{{ filters.channel|length - 1 }}</span>)\n </summary>\n \n <div class="log-filter-content">\n <div class="filter-select-all-or-none">\n <button type="button" class="btn btn-link select-all">Select All</button>\n <button type="button" class="btn btn-link select-none">Select None</button>\n </div>\n \n {% for value in filters.channel %}\n <div class="log-filter-option">\n <input {{ 'event' != value ? 'checked' }} type="checkbox" id="filter-log-channel-{{ value }}" name="filter-log-channel-{{ value }}" value="{{ value }}">\n <label for="filter-log-channel-{{ value }}">{{ value|title }}</label>\n </div>\n {% endfor %}\n </div>\n </details>\n </div>\n \n <table class="logs">\n <colgroup>\n <col style="width: 140px">\n <col>\n </colgroup>\n \n <thead>\n <tr>\n <th>Time</th>\n <th>Message</th>\n </tr>\n </thead>\n \n <tbody>\n {% for log in collector.processedLogs %}\n {% set css_class = 'error' == log.type ? 'error'\n : (log.priorityName == 'WARNING' or 'deprecation' == log.type) ? 'warning'\n : 'silenced' == log.type ? 'silenced'\n %}\n <tr class="log-status-{{ css_class }}" data-type="{{ log.type }}" data-priority="{{ log.priority }}" data-channel="{{ log.channel }}" style="{{ 'event' == log.channel or 'DEBUG' == log.priorityName ? 'display: none' }}">\n <td class="log-timestamp">\n <time class="newline" title="{{ log.timestamp|date('r') }}" datetime="{{ log.timestamp|date(constant('DateTimeInterface::RFC3339_EXTENDED')) }}" data-convert-to-user-timezone data-render-as-time data-render-with-millisecond-precision>\n {{ log.timestamp|date('H:i:s.v') }}\n </time>\n \n {% if log.type in ['error', 'deprecation', 'silenced'] or 'WARNING' == log.priorityName %}\n <span class="log-type-badge badge badge-{{ css_class }}">\n {% if 'error' == log.type or 'WARNING' == log.priorityName %}\n {{ log.priorityName|lower }}\n {% else %}\n {{ log.type|lower }}\n {% endif %}\n </span>\n {% else %}\n <span class="log-type-badge badge badge-{{ css_class }}">\n {{ log.priorityName|lower }}\n </span>\n {% endif %}\n </td>\n \n <td class="font-normal">\n {{ _self.render_log_message('debug', loop.index, log) }}\n </td>\n </tr>\n {% endfor %}\n </tbody>\n </table>\n \n <div class="no-logs-message empty">\n <p>There are no log messages.</p>\n </div>\n {% endif %}\n \n {% set compilerLogTotal = collector.compilerLogs|reduce((total, logs) => total + logs|length, 0) %}\n <details class="container-compilation-logs">\n <summary>\n <h4>Container Compilation Logs <span class="text-muted">({{ compilerLogTotal }})</span></h4>\n <span class="text-muted">Log messages generated during the compilation of the service container.</span>\n </summary>\n \n {% if collector.compilerLogs is empty %}\n <div class="empty">\n <p>There are no compiler log messages.</p>\n </div>\n {% else %}\n <table class="container-logs">\n <thead>\n <tr>\n <th>Messages</th>\n <th class="full-width">Class</th>\n </tr>\n </thead>\n \n <tbody>\n {% for class, logs in collector.compilerLogs %}\n <tr>\n <td class="font-normal text-right">{{ logs|length }}</td>\n <td class="font-normal">\n {% set context_id = 'context-compiler-' ~ loop.index %}\n \n <button type="button" class="btn btn-link sf-toggle" data-toggle-selector="#{{ context_id }}" data-toggle-alt-content="{{ class }}">{{ class }}</button>\n \n <div id="{{ context_id }}" class="context sf-toggle-content sf-toggle-hidden">\n <ul class="break-long-words">\n {% for log in logs %}\n <li>{{ profiler_dump_log(log.message) }}</li>\n {% endfor %}\n </ul>\n </div>\n </td>\n </tr>\n {% endfor %}\n </tbody>\n </table>\n {% endif %}\n </details>\n {% endblock %}\n \n {% macro render_log_message(category, log_index, log) %}\n {% set has_context = log.context is defined and log.context is not empty %}\n {% set has_trace = log.context.exception.trace is defined %}\n \n {% if not has_context %}\n {{ profiler_dump_log(log.message) }}\n {% else %}\n {{ profiler_dump_log(log.message, log.context) }}\n {% endif %}\n \n <div class="log-metadata">\n {% if log.channel %}\n <span class="badge">{{ log.channel }}</span>\n {% endif %}\n \n {% if log.errorCount is defined and log.errorCount > 1 %}\n <span class="log-num-occurrences">{{ log.errorCount }} times</span>\n {% endif %}\n \n {% if has_context %}\n {% set context_id = 'context-' ~ category ~ '-' ~ log_index %}\n <span><button type="button" class="btn btn-link text-small sf-toggle" data-toggle-selector="#{{ context_id }}" data-toggle-alt-content="Hide context">Show context</button></span>\n {% endif %}\n \n {% if has_trace %}\n {% set trace_id = 'trace-' ~ category ~ '-' ~ log_index %}\n <span><button type="button" class="btn btn-link text-small sf-toggle" data-toggle-selector="#{{ trace_id }}" data-toggle-alt-content="Hide trace">Show trace</button></span>\n {% endif %}\n \n {% if has_context %}\n <div id="{{ context_id }}" class="context sf-toggle-content sf-toggle-hidden">\n {{ profiler_dump(log.context, maxDepth=1) }}\n </div>\n {% endif %}\n \n {% if has_trace %}\n <div id="{{ trace_id }}" class="context sf-toggle-content sf-toggle-hidden">\n {{ profiler_dump(log.context.exception.trace, maxDepth=1) }}\n </div>\n {% endif %}\n </div>\n {% endmacro %}\n """ }