Skip to content
Snippets Groups Projects
Commit 499c28ab authored by Alexey Korepov's avatar Alexey Korepov
Browse files

Issue #3391070: Option to log all custom fields from the context array

parent 5b6b1eec
Branches
Tags
1 merge request!4Issue #3391070: Option to log all custom fields from the context array
...@@ -15,6 +15,7 @@ fields: ...@@ -15,6 +15,7 @@ fields:
uid: uid uid: uid
link: link link: link
metadata: metadata metadata: metadata
fields_all: false
fields_custom: [] fields_custom: []
target: file target: file
target_syslog_identity: drupal target_syslog_identity: drupal
......
...@@ -8,6 +8,9 @@ extended_logger.settings: ...@@ -8,6 +8,9 @@ extended_logger.settings:
sequence: sequence:
type: string type: string
label: Field name label: Field name
fields_all:
type: boolean
label: Add all fields to logs
fields_custom: fields_custom:
type: sequence type: sequence
label: Additional custom fields to include label: Additional custom fields to include
......
...@@ -73,11 +73,23 @@ class SettingsForm extends ConfigFormBase { ...@@ -73,11 +73,23 @@ class SettingsForm extends ConfigFormBase {
// @codingStandardsIgnoreEnd // @codingStandardsIgnoreEnd
} }
$form['fields_all'] = [
'#type' => 'checkbox',
'#title' => $this->getSettingLabel('fields_all'),
'#description' => $this->t('Enables adding all fields from the context array to the log entries.'),
'#default_value' => $config->get('fields_all') ?? FALSE,
];
$form['fields_custom'] = [ $form['fields_custom'] = [
'#type' => 'textfield', '#type' => 'textfield',
'#title' => $this->getSettingLabel('fields'), '#title' => $this->getSettingLabel('fields_custom'),
'#description' => $this->t('A comma separated list of additional fields from the context array to include.'), '#description' => $this->t('A comma separated list of additional fields from the context array to include.'),
'#default_value' => implode(',', $config->get('fields_custom') ?? []), '#default_value' => implode(',', $config->get('fields_custom') ?? []),
'#states' => [
'visible' => [
':input[name="fields_all"]' => ['checked' => FALSE],
],
],
]; ];
$form['target'] = [ $form['target'] = [
...@@ -156,6 +168,7 @@ class SettingsForm extends ConfigFormBase { ...@@ -156,6 +168,7 @@ class SettingsForm extends ConfigFormBase {
$this->config(ExtendedLogger::CONFIG_KEY) $this->config(ExtendedLogger::CONFIG_KEY)
->set('fields', $form_state->getValue('fields')) ->set('fields', $form_state->getValue('fields'))
->set('fields_all', $form_state->getValue('fields_all'))
->set('fields_custom', $fields_custom) ->set('fields_custom', $fields_custom)
->set('target', $form_state->getValue('target')) ->set('target', $form_state->getValue('target'))
->set('target_syslog_identity', $form_state->getValue('target_syslog_identity')) ->set('target_syslog_identity', $form_state->getValue('target_syslog_identity'))
......
...@@ -115,66 +115,66 @@ class ExtendedLogger implements LoggerInterface { ...@@ -115,66 +115,66 @@ class ExtendedLogger implements LoggerInterface {
$entry = new ExtendedLoggerEntry(); $entry = new ExtendedLoggerEntry();
foreach ($fields as $label) { foreach ($fields as $field) {
switch ($label) { switch ($field) {
case '0': case '0':
// Skipping turned off fields. // Skipping turned off fields.
break; break;
case 'message': case 'message':
$message_placeholders = $this->parser->parseMessagePlaceholders($message, $context); $message_placeholders = $this->parser->parseMessagePlaceholders($message, $context);
$entry->set($label, empty($message_placeholders) ? $message : strtr($message, $message_placeholders)); $entry->set($field, empty($message_placeholders) ? $message : strtr($message, $message_placeholders));
break; break;
case 'message_raw': case 'message_raw':
$entry->set($label, $message); $entry->set($field, $message);
break; break;
case 'base_url': case 'base_url':
$entry->set($label, $base_url); $entry->set($field, $base_url);
break; break;
case 'timestamp_float': case 'timestamp_float':
$entry->set($label, microtime(TRUE)); $entry->set($field, microtime(TRUE));
break; break;
case 'time': case 'time':
$entry->set($label, date('c', $context['timestamp'])); $entry->set($field, date('c', $context['timestamp']));
break; break;
case 'request_time': case 'request_time':
$request ??= $this->requestStack->getCurrentRequest(); $request ??= $this->requestStack->getCurrentRequest();
$entry->set($label, $request->server->get('REQUEST_TIME')); $entry->set($field, $request->server->get('REQUEST_TIME'));
break; break;
case 'request_time_float': case 'request_time_float':
$request ??= $this->requestStack->getCurrentRequest(); $request ??= $this->requestStack->getCurrentRequest();
$entry->set($label, $request->server->get('REQUEST_TIME_FLOAT')); $entry->set($field, $request->server->get('REQUEST_TIME_FLOAT'));
break; break;
case 'severity': case 'severity':
$entry->set($label, $level); $entry->set($field, $level);
break; break;
case 'level': case 'level':
$entry->set($label, $this->getRfcLogLevelAsString($level)); $entry->set($field, $this->getRfcLogLevelAsString($level));
break; break;
case 'exception': case 'exception':
if (isset($context['exception'])) { if (isset($context['exception'])) {
if ($context['exception'] instanceof \Throwable) { if ($context['exception'] instanceof \Throwable) {
$entry->set($label, $this->exceptionToArray($context['exception'])); $entry->set($field, $this->exceptionToArray($context['exception']));
} }
else { else {
$entry->set($label, $context['exception']); $entry->set($field, $context['exception']);
} }
} }
break; break;
// A special label "metadata" to pass any free form data. // A special label "metadata" to pass any free form data.
case 'metadata': case 'metadata':
if (isset($context[$label])) { if (isset($context[$field])) {
$entry->set($label, $context[$label]); $entry->set($field, $context[$field]);
} }
break; break;
...@@ -186,18 +186,28 @@ class ExtendedLogger implements LoggerInterface { ...@@ -186,18 +186,28 @@ class ExtendedLogger implements LoggerInterface {
case 'referer': case 'referer':
case 'uid': case 'uid':
case 'link': case 'link':
if (isset($context[$label])) { if (isset($context[$field])) {
$entry->set($label, $context[$label]); $entry->set($field, $context[$field]);
} }
break;
default: default:
break; break;
} }
} }
if ($this->config->get('fields_all') ?? FALSE) {
foreach ($this->config->get('fields_custom') ?? [] as $field) { foreach ($context as $field => $value) {
if (isset($context[$field])) { if (!isset($fields[$field])) {
$entry->set($field, $context[$field]); $entry->set($field, $value);
}
}
$entry->set($field, $context[$field]);
}
else {
foreach ($this->config->get('fields_custom') ?? [] as $field) {
if (isset($context[$field])) {
$entry->set($field, $context[$field]);
}
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment