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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
|
# 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
|