224 lines
5.0 KiB
SQL
224 lines
5.0 KiB
SQL
# name: test/sql/logging/logging_call_functions.test
|
|
# description: Test logging
|
|
# group: [logging]
|
|
|
|
require noforcestorage
|
|
|
|
# Create test view to get log settings
|
|
statement ok
|
|
CREATE VIEW log_settings AS select name, value from duckdb_settings() where name in ['logging_level', 'logging_mode', 'logging_storage', 'enable_logging', 'enabled_log_types', 'disabled_log_types'] ORDER BY name
|
|
|
|
####
|
|
# Most simple way to enable logging: turns on default behaviour
|
|
###
|
|
|
|
statement ok
|
|
CALL enable_logging();
|
|
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 1
|
|
enabled_log_types (empty)
|
|
logging_level INFO
|
|
logging_mode LEVEL_ONLY
|
|
logging_storage memory
|
|
|
|
statement ok
|
|
CALL disable_logging()
|
|
|
|
# Logging now disabled again
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 0
|
|
enabled_log_types (empty)
|
|
logging_level INFO
|
|
logging_mode LEVEL_ONLY
|
|
logging_storage memory
|
|
|
|
####
|
|
# Enabling logging at a specific level
|
|
###
|
|
|
|
statement ok
|
|
CALL enable_logging(level='DEBUG');
|
|
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 1
|
|
enabled_log_types (empty)
|
|
logging_level DEBUG
|
|
logging_mode LEVEL_ONLY
|
|
logging_storage memory
|
|
|
|
# Note: disable_logging resets the log config
|
|
statement ok
|
|
CALL disable_logging()
|
|
|
|
# disable logging turns off logging only
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 0
|
|
enabled_log_types (empty)
|
|
logging_level DEBUG
|
|
logging_mode LEVEL_ONLY
|
|
logging_storage memory
|
|
|
|
####
|
|
# Enabling logging of a specific type
|
|
###
|
|
|
|
statement ok
|
|
CALL enable_logging('QueryLog');
|
|
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 1
|
|
enabled_log_types QueryLog
|
|
logging_level INFO
|
|
logging_mode ENABLE_SELECTED
|
|
logging_storage memory
|
|
|
|
####
|
|
# Enabling logging of multiple types (note that log level will match lowest level of the types)
|
|
###
|
|
|
|
statement ok
|
|
CALL enable_logging(['QueryLog', 'FileSystem']);
|
|
|
|
# Use sorted list to avoid indeterministic result
|
|
query II
|
|
SELECT name, list_sort(split(value, ',')) FROM log_settings;
|
|
----
|
|
disabled_log_types ['']
|
|
enable_logging [1]
|
|
enabled_log_types [FileSystem, QueryLog]
|
|
logging_level [TRACE]
|
|
logging_mode [ENABLE_SELECTED]
|
|
logging_storage [memory]
|
|
|
|
|
|
# Due to different file locking behaviour, this currently fails on windows
|
|
require notwindows
|
|
|
|
####
|
|
# Configuring a different log storage, using the config param to pass arbitrary (extensible!) options
|
|
###
|
|
|
|
statement ok
|
|
CALL enable_logging('FileSystem', storage='file', storage_config={'path': '__TEST_DIR__/logging_call_functions_test_log'});
|
|
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 1
|
|
enabled_log_types FileSystem
|
|
logging_level TRACE
|
|
logging_mode ENABLE_SELECTED
|
|
logging_storage file
|
|
|
|
####
|
|
# Syntactic sugar exists to easily pass some log_storage related settings
|
|
###
|
|
|
|
statement ok
|
|
CALL enable_logging(storage='file', storage_path='__TEST_DIR__/logging_call_functions');
|
|
|
|
statement ok
|
|
CALL disable_logging()
|
|
|
|
####
|
|
# For the storage_path setting we can even omit the storage and it will automatically set it to storage='file'
|
|
###
|
|
|
|
statement ok
|
|
CALL enable_logging(storage_path='__TEST_DIR__/logging_call_functions');
|
|
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 1
|
|
enabled_log_types (empty)
|
|
logging_level INFO
|
|
logging_mode LEVEL_ONLY
|
|
logging_storage file
|
|
|
|
# Reset
|
|
statement ok
|
|
CALL enable_logging()
|
|
|
|
####
|
|
# Some invalid invocations throw nice errors
|
|
###
|
|
|
|
statement error
|
|
CALL enable_logging(hocus_pocus='this is bogus');
|
|
----
|
|
Binder Error: Invalid named parameter "hocus_pocus" for function enable_logging
|
|
|
|
# enable_logging is currently not atomic TODO: fix this
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 1
|
|
enabled_log_types (empty)
|
|
logging_level INFO
|
|
logging_mode LEVEL_ONLY
|
|
logging_storage memory
|
|
|
|
# Unknown storage option: this error is thrown by the log storage, because not all log storages implement the same params
|
|
statement error
|
|
CALL enable_logging(storage='file', level='DEBUG', storage_config={'hocus_pocus': 'this is bogus', 'path': '__TEST_DIR__/hi.csv'});
|
|
----
|
|
Invalid Input Error: Unrecognized log storage config option for storage: 'FileLogStorage': 'hocus_pocus'
|
|
|
|
# enable_logging is currently not atomic TODO: fix this
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 1
|
|
enabled_log_types (empty)
|
|
logging_level DEBUG
|
|
logging_mode LEVEL_ONLY
|
|
logging_storage file
|
|
|
|
statement ok
|
|
CALL disable_logging();
|
|
|
|
# The path param does not exist for the memory storage
|
|
statement error
|
|
CALL enable_logging(storage='memory', storage_config={'path': 'bla'});
|
|
----
|
|
Invalid Input Error: Unrecognized log storage config option for storage: 'InMemoryLogStorage': 'path'
|
|
|
|
# storage_config should be a struct
|
|
statement error
|
|
CALL enable_logging(storage_config='hi')
|
|
----
|
|
Invalid Input Error: EnableLogging: storage_config must be a struct
|
|
|
|
# Logging config remains untouched TODO: fix
|
|
query II
|
|
FROM log_settings;
|
|
----
|
|
disabled_log_types (empty)
|
|
enable_logging 1
|
|
enabled_log_types (empty)
|
|
logging_level INFO
|
|
logging_mode LEVEL_ONLY
|
|
logging_storage memory
|
|
|