mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
MDL-62907 Logging: JSON format option for logstore_database
This commit is contained in:
parent
75dc1756bb
commit
12f9acbe76
5 changed files with 50 additions and 5 deletions
|
@ -57,6 +57,9 @@ class store implements \tool_log\log\writer, \core\log\sql_reader {
|
|||
$levels = $this->get_config('includelevels', '');
|
||||
$this->includeactions = $actions === '' ? array() : explode(',', $actions);
|
||||
$this->includelevels = $levels === '' ? array() : explode(',', $levels);
|
||||
// JSON writing defaults to false (table format compatibility with older versions).
|
||||
// Note: This variable is defined in the buffered_writer trait.
|
||||
$this->jsonformat = (bool)$this->get_config('jsonformat', false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -223,7 +226,7 @@ class store implements \tool_log\log\writer, \core\log\sql_reader {
|
|||
$extra = array('origin' => $data->origin, 'ip' => $data->ip, 'realuserid' => $data->realuserid);
|
||||
$data = (array)$data;
|
||||
$id = $data['id'];
|
||||
$data['other'] = unserialize($data['other']);
|
||||
$data['other'] = \logstore_standard\log\store::decode_other($data['other']);
|
||||
if ($data['other'] === false) {
|
||||
$data['other'] = array();
|
||||
}
|
||||
|
|
|
@ -39,5 +39,12 @@ function xmldb_logstore_database_upgrade($oldversion) {
|
|||
// Automatically generated Moodle v3.6.0 release upgrade line.
|
||||
// Put any upgrade step following this.
|
||||
|
||||
if ($oldversion < 2019032800) {
|
||||
// For existing installations, set the new jsonformat option to off (no behaviour change).
|
||||
// New installations default to on.
|
||||
set_config('jsonformat', 0, 'logstore_database');
|
||||
upgrade_plugin_savepoint(true, 2019032800, 'logstore', 'database');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -59,6 +59,10 @@ if ($hassiteconfig) {
|
|||
$settings->add(new admin_setting_configtext('logstore_database/buffersize', get_string('buffersize',
|
||||
'logstore_database'), get_string('buffersize_help', 'logstore_database'), 50));
|
||||
|
||||
$settings->add(new admin_setting_configcheckbox('logstore_database/jsonformat',
|
||||
new lang_string('jsonformat', 'logstore_standard'),
|
||||
new lang_string('jsonformat_desc', 'logstore_standard'), 1));
|
||||
|
||||
// Filters.
|
||||
$settings->add(new admin_setting_heading('filters', get_string('filters', 'logstore_database'), get_string('filters_help',
|
||||
'logstore_database')));
|
||||
|
|
|
@ -28,11 +28,21 @@ require_once(__DIR__ . '/fixtures/event.php');
|
|||
require_once(__DIR__ . '/fixtures/store.php');
|
||||
|
||||
class logstore_database_store_testcase extends advanced_testcase {
|
||||
public function test_log_writing() {
|
||||
/**
|
||||
* Tests log writing.
|
||||
*
|
||||
* @param bool $jsonformat True to test with JSON format
|
||||
* @dataProvider test_log_writing_provider
|
||||
* @throws moodle_exception
|
||||
*/
|
||||
public function test_log_writing(bool $jsonformat) {
|
||||
global $DB, $CFG;
|
||||
$this->resetAfterTest();
|
||||
$this->preventResetByRollback(); // Logging waits till the transaction gets committed.
|
||||
|
||||
// Apply JSON format system setting.
|
||||
set_config('jsonformat', $jsonformat ? 1 : 0, 'logstore_database');
|
||||
|
||||
$dbman = $DB->get_manager();
|
||||
$this->assertTrue($dbman->table_exists('logstore_standard_log'));
|
||||
$DB->delete_records('logstore_standard_log');
|
||||
|
@ -118,7 +128,11 @@ class logstore_database_store_testcase extends advanced_testcase {
|
|||
|
||||
$log1 = reset($logs);
|
||||
unset($log1->id);
|
||||
if ($jsonformat) {
|
||||
$log1->other = json_decode($log1->other, true);
|
||||
} else {
|
||||
$log1->other = unserialize($log1->other);
|
||||
}
|
||||
$log1 = (array)$log1;
|
||||
$data = $event1->get_data();
|
||||
$data['origin'] = 'cli';
|
||||
|
@ -145,7 +159,11 @@ class logstore_database_store_testcase extends advanced_testcase {
|
|||
|
||||
$log3 = array_shift($logs);
|
||||
unset($log3->id);
|
||||
if ($jsonformat) {
|
||||
$log3->other = json_decode($log3->other, true);
|
||||
} else {
|
||||
$log3->other = unserialize($log3->other);
|
||||
}
|
||||
$log3 = (array)$log3;
|
||||
$data = $event2->get_data();
|
||||
$data['origin'] = 'cli';
|
||||
|
@ -229,6 +247,19 @@ class logstore_database_store_testcase extends advanced_testcase {
|
|||
get_log_manager(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns different JSON format settings so the test can be run with JSON format either on or
|
||||
* off.
|
||||
*
|
||||
* @return [bool] Array of true/false
|
||||
*/
|
||||
public static function test_log_writing_provider(): array {
|
||||
return [
|
||||
[false],
|
||||
[true]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method is_event_ignored.
|
||||
*/
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2019032800; // The current plugin version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2018112800; // Requires this Moodle version.
|
||||
$plugin->component = 'logstore_database'; // Full name of the plugin (used for diagnostics).
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue