code.gitea.io/gitea@v1.22.3/modules/setting/log_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package setting 5 6 import ( 7 "path/filepath" 8 "strings" 9 "testing" 10 11 "code.gitea.io/gitea/modules/json" 12 "code.gitea.io/gitea/modules/log" 13 14 "github.com/stretchr/testify/assert" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func initLoggersByConfig(t *testing.T, config string) (*log.LoggerManager, func()) { 19 oldLogConfig := Log 20 Log = LogGlobalConfig{} 21 defer func() { 22 Log = oldLogConfig 23 }() 24 25 cfg, err := NewConfigProviderFromData(config) 26 assert.NoError(t, err) 27 28 manager := log.NewManager() 29 initManagedLoggers(manager, cfg) 30 return manager, manager.Close 31 } 32 33 func toJSON(v any) string { 34 b, _ := json.MarshalIndent(v, "", "\t") 35 return string(b) 36 } 37 38 func TestLogConfigDefault(t *testing.T) { 39 manager, managerClose := initLoggersByConfig(t, ``) 40 defer managerClose() 41 42 writerDump := ` 43 { 44 "console": { 45 "BufferLen": 10000, 46 "Colorize": false, 47 "Expression": "", 48 "Flags": "stdflags", 49 "Level": "info", 50 "Prefix": "", 51 "StacktraceLevel": "none", 52 "WriterOption": { 53 "Stderr": false 54 }, 55 "WriterType": "console" 56 } 57 } 58 ` 59 60 dump := manager.GetLogger(log.DEFAULT).DumpWriters() 61 require.JSONEq(t, writerDump, toJSON(dump)) 62 63 dump = manager.GetLogger("access").DumpWriters() 64 require.JSONEq(t, "{}", toJSON(dump)) 65 66 dump = manager.GetLogger("router").DumpWriters() 67 require.JSONEq(t, writerDump, toJSON(dump)) 68 69 dump = manager.GetLogger("xorm").DumpWriters() 70 require.JSONEq(t, writerDump, toJSON(dump)) 71 } 72 73 func TestLogConfigDisable(t *testing.T) { 74 manager, managerClose := initLoggersByConfig(t, ` 75 [log] 76 logger.router.MODE = 77 logger.xorm.MODE = 78 `) 79 defer managerClose() 80 81 writerDump := ` 82 { 83 "console": { 84 "BufferLen": 10000, 85 "Colorize": false, 86 "Expression": "", 87 "Flags": "stdflags", 88 "Level": "info", 89 "Prefix": "", 90 "StacktraceLevel": "none", 91 "WriterOption": { 92 "Stderr": false 93 }, 94 "WriterType": "console" 95 } 96 } 97 ` 98 99 dump := manager.GetLogger(log.DEFAULT).DumpWriters() 100 require.JSONEq(t, writerDump, toJSON(dump)) 101 102 dump = manager.GetLogger("access").DumpWriters() 103 require.JSONEq(t, "{}", toJSON(dump)) 104 105 dump = manager.GetLogger("router").DumpWriters() 106 require.JSONEq(t, "{}", toJSON(dump)) 107 108 dump = manager.GetLogger("xorm").DumpWriters() 109 require.JSONEq(t, "{}", toJSON(dump)) 110 } 111 112 func TestLogConfigLegacyDefault(t *testing.T) { 113 manager, managerClose := initLoggersByConfig(t, ` 114 [log] 115 MODE = console 116 `) 117 defer managerClose() 118 119 writerDump := ` 120 { 121 "console": { 122 "BufferLen": 10000, 123 "Colorize": false, 124 "Expression": "", 125 "Flags": "stdflags", 126 "Level": "info", 127 "Prefix": "", 128 "StacktraceLevel": "none", 129 "WriterOption": { 130 "Stderr": false 131 }, 132 "WriterType": "console" 133 } 134 } 135 ` 136 137 dump := manager.GetLogger(log.DEFAULT).DumpWriters() 138 require.JSONEq(t, writerDump, toJSON(dump)) 139 140 dump = manager.GetLogger("access").DumpWriters() 141 require.JSONEq(t, "{}", toJSON(dump)) 142 143 dump = manager.GetLogger("router").DumpWriters() 144 require.JSONEq(t, writerDump, toJSON(dump)) 145 146 dump = manager.GetLogger("xorm").DumpWriters() 147 require.JSONEq(t, writerDump, toJSON(dump)) 148 } 149 150 func TestLogConfigLegacyMode(t *testing.T) { 151 tempDir := t.TempDir() 152 153 tempPath := func(file string) string { 154 return filepath.Join(tempDir, file) 155 } 156 157 manager, managerClose := initLoggersByConfig(t, ` 158 [log] 159 ROOT_PATH = `+tempDir+` 160 MODE = file 161 ROUTER = file 162 ACCESS = file 163 `) 164 defer managerClose() 165 166 writerDump := ` 167 { 168 "file": { 169 "BufferLen": 10000, 170 "Colorize": false, 171 "Expression": "", 172 "Flags": "stdflags", 173 "Level": "info", 174 "Prefix": "", 175 "StacktraceLevel": "none", 176 "WriterOption": { 177 "Compress": true, 178 "CompressionLevel": -1, 179 "DailyRotate": true, 180 "FileName": "$FILENAME", 181 "LogRotate": true, 182 "MaxDays": 7, 183 "MaxSize": 268435456 184 }, 185 "WriterType": "file" 186 } 187 } 188 ` 189 writerDumpAccess := ` 190 { 191 "file.access": { 192 "BufferLen": 10000, 193 "Colorize": false, 194 "Expression": "", 195 "Flags": "none", 196 "Level": "info", 197 "Prefix": "", 198 "StacktraceLevel": "none", 199 "WriterOption": { 200 "Compress": true, 201 "CompressionLevel": -1, 202 "DailyRotate": true, 203 "FileName": "$FILENAME", 204 "LogRotate": true, 205 "MaxDays": 7, 206 "MaxSize": 268435456 207 }, 208 "WriterType": "file" 209 } 210 } 211 ` 212 dump := manager.GetLogger(log.DEFAULT).DumpWriters() 213 require.JSONEq(t, strings.ReplaceAll(writerDump, "$FILENAME", tempPath("gitea.log")), toJSON(dump)) 214 215 dump = manager.GetLogger("access").DumpWriters() 216 require.JSONEq(t, strings.ReplaceAll(writerDumpAccess, "$FILENAME", tempPath("access.log")), toJSON(dump)) 217 218 dump = manager.GetLogger("router").DumpWriters() 219 require.JSONEq(t, strings.ReplaceAll(writerDump, "$FILENAME", tempPath("gitea.log")), toJSON(dump)) 220 } 221 222 func TestLogConfigLegacyModeDisable(t *testing.T) { 223 manager, managerClose := initLoggersByConfig(t, ` 224 [log] 225 ROUTER = file 226 ACCESS = file 227 DISABLE_ROUTER_LOG = true 228 ENABLE_ACCESS_LOG = false 229 `) 230 defer managerClose() 231 232 dump := manager.GetLogger("access").DumpWriters() 233 require.JSONEq(t, "{}", toJSON(dump)) 234 235 dump = manager.GetLogger("router").DumpWriters() 236 require.JSONEq(t, "{}", toJSON(dump)) 237 } 238 239 func TestLogConfigNewConfig(t *testing.T) { 240 manager, managerClose := initLoggersByConfig(t, ` 241 [log] 242 logger.access.MODE = console 243 logger.xorm.MODE = console, console-1 244 245 [log.console] 246 LEVEL = warn 247 248 [log.console-1] 249 MODE = console 250 LEVEL = error 251 STDERR = true 252 `) 253 defer managerClose() 254 255 writerDump := ` 256 { 257 "console": { 258 "BufferLen": 10000, 259 "Colorize": false, 260 "Expression": "", 261 "Flags": "stdflags", 262 "Level": "warn", 263 "Prefix": "", 264 "StacktraceLevel": "none", 265 "WriterOption": { 266 "Stderr": false 267 }, 268 "WriterType": "console" 269 }, 270 "console-1": { 271 "BufferLen": 10000, 272 "Colorize": false, 273 "Expression": "", 274 "Flags": "stdflags", 275 "Level": "error", 276 "Prefix": "", 277 "StacktraceLevel": "none", 278 "WriterOption": { 279 "Stderr": true 280 }, 281 "WriterType": "console" 282 } 283 } 284 ` 285 writerDumpAccess := ` 286 { 287 "console.access": { 288 "BufferLen": 10000, 289 "Colorize": false, 290 "Expression": "", 291 "Flags": "none", 292 "Level": "warn", 293 "Prefix": "", 294 "StacktraceLevel": "none", 295 "WriterOption": { 296 "Stderr": false 297 }, 298 "WriterType": "console" 299 } 300 } 301 ` 302 dump := manager.GetLogger("xorm").DumpWriters() 303 require.JSONEq(t, writerDump, toJSON(dump)) 304 305 dump = manager.GetLogger("access").DumpWriters() 306 require.JSONEq(t, writerDumpAccess, toJSON(dump)) 307 } 308 309 func TestLogConfigModeFile(t *testing.T) { 310 tempDir := t.TempDir() 311 312 tempPath := func(file string) string { 313 return filepath.Join(tempDir, file) 314 } 315 316 manager, managerClose := initLoggersByConfig(t, ` 317 [log] 318 ROOT_PATH = `+tempDir+` 319 BUFFER_LEN = 10 320 MODE = file, file1 321 322 [log.file1] 323 MODE = file 324 LEVEL = error 325 STACKTRACE_LEVEL = fatal 326 EXPRESSION = filter 327 FLAGS = medfile 328 PREFIX = "[Prefix] " 329 FILE_NAME = file-xxx.log 330 LOG_ROTATE = false 331 MAX_SIZE_SHIFT = 1 332 DAILY_ROTATE = false 333 MAX_DAYS = 90 334 COMPRESS = false 335 COMPRESSION_LEVEL = 4 336 `) 337 defer managerClose() 338 339 writerDump := ` 340 { 341 "file": { 342 "BufferLen": 10, 343 "Colorize": false, 344 "Expression": "", 345 "Flags": "stdflags", 346 "Level": "info", 347 "Prefix": "", 348 "StacktraceLevel": "none", 349 "WriterOption": { 350 "Compress": true, 351 "CompressionLevel": -1, 352 "DailyRotate": true, 353 "FileName": "$FILENAME-0", 354 "LogRotate": true, 355 "MaxDays": 7, 356 "MaxSize": 268435456 357 }, 358 "WriterType": "file" 359 }, 360 "file1": { 361 "BufferLen": 10, 362 "Colorize": false, 363 "Expression": "filter", 364 "Flags": "medfile", 365 "Level": "error", 366 "Prefix": "[Prefix] ", 367 "StacktraceLevel": "fatal", 368 "WriterOption": { 369 "Compress": false, 370 "CompressionLevel": 4, 371 "DailyRotate": false, 372 "FileName": "$FILENAME-1", 373 "LogRotate": false, 374 "MaxDays": 90, 375 "MaxSize": 2 376 }, 377 "WriterType": "file" 378 } 379 } 380 ` 381 382 dump := manager.GetLogger(log.DEFAULT).DumpWriters() 383 expected := writerDump 384 expected = strings.ReplaceAll(expected, "$FILENAME-0", tempPath("gitea.log")) 385 expected = strings.ReplaceAll(expected, "$FILENAME-1", tempPath("file-xxx.log")) 386 require.JSONEq(t, expected, toJSON(dump)) 387 }