123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- // Copyright 2019 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package setting
-
- import (
- "path/filepath"
- "strings"
- "testing"
-
- "code.gitea.io/gitea/modules/json"
- "code.gitea.io/gitea/modules/log"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
-
- func initLoggersByConfig(t *testing.T, config string) (*log.LoggerManager, func()) {
- oldLogConfig := Log
- Log = LogGlobalConfig{}
- defer func() {
- Log = oldLogConfig
- }()
-
- cfg, err := NewConfigProviderFromData(config)
- assert.NoError(t, err)
-
- manager := log.NewManager()
- initManagedLoggers(manager, cfg)
- return manager, manager.Close
- }
-
- func toJSON(v any) string {
- b, _ := json.MarshalIndent(v, "", "\t")
- return string(b)
- }
-
- func TestLogConfigDefault(t *testing.T) {
- manager, managerClose := initLoggersByConfig(t, ``)
- defer managerClose()
-
- writerDump := `
- {
- "console": {
- "BufferLen": 10000,
- "Colorize": false,
- "Expression": "",
- "Flags": "stdflags",
- "Level": "info",
- "Prefix": "",
- "StacktraceLevel": "none",
- "WriterOption": {
- "Stderr": false
- },
- "WriterType": "console"
- }
- }
- `
-
- dump := manager.GetLogger(log.DEFAULT).DumpWriters()
- require.JSONEq(t, writerDump, toJSON(dump))
-
- dump = manager.GetLogger("access").DumpWriters()
- require.JSONEq(t, "{}", toJSON(dump))
-
- dump = manager.GetLogger("router").DumpWriters()
- require.JSONEq(t, writerDump, toJSON(dump))
-
- dump = manager.GetLogger("xorm").DumpWriters()
- require.JSONEq(t, writerDump, toJSON(dump))
- }
-
- func TestLogConfigDisable(t *testing.T) {
- manager, managerClose := initLoggersByConfig(t, `
- [log]
- logger.router.MODE =
- logger.xorm.MODE =
- `)
- defer managerClose()
-
- writerDump := `
- {
- "console": {
- "BufferLen": 10000,
- "Colorize": false,
- "Expression": "",
- "Flags": "stdflags",
- "Level": "info",
- "Prefix": "",
- "StacktraceLevel": "none",
- "WriterOption": {
- "Stderr": false
- },
- "WriterType": "console"
- }
- }
- `
-
- dump := manager.GetLogger(log.DEFAULT).DumpWriters()
- require.JSONEq(t, writerDump, toJSON(dump))
-
- dump = manager.GetLogger("access").DumpWriters()
- require.JSONEq(t, "{}", toJSON(dump))
-
- dump = manager.GetLogger("router").DumpWriters()
- require.JSONEq(t, "{}", toJSON(dump))
-
- dump = manager.GetLogger("xorm").DumpWriters()
- require.JSONEq(t, "{}", toJSON(dump))
- }
-
- func TestLogConfigLegacyDefault(t *testing.T) {
- manager, managerClose := initLoggersByConfig(t, `
- [log]
- MODE = console
- `)
- defer managerClose()
-
- writerDump := `
- {
- "console": {
- "BufferLen": 10000,
- "Colorize": false,
- "Expression": "",
- "Flags": "stdflags",
- "Level": "info",
- "Prefix": "",
- "StacktraceLevel": "none",
- "WriterOption": {
- "Stderr": false
- },
- "WriterType": "console"
- }
- }
- `
-
- dump := manager.GetLogger(log.DEFAULT).DumpWriters()
- require.JSONEq(t, writerDump, toJSON(dump))
-
- dump = manager.GetLogger("access").DumpWriters()
- require.JSONEq(t, "{}", toJSON(dump))
-
- dump = manager.GetLogger("router").DumpWriters()
- require.JSONEq(t, writerDump, toJSON(dump))
-
- dump = manager.GetLogger("xorm").DumpWriters()
- require.JSONEq(t, writerDump, toJSON(dump))
- }
-
- func TestLogConfigLegacyMode(t *testing.T) {
- tempDir := t.TempDir()
-
- tempPath := func(file string) string {
- return filepath.Join(tempDir, file)
- }
-
- manager, managerClose := initLoggersByConfig(t, `
- [log]
- ROOT_PATH = `+tempDir+`
- MODE = file
- ROUTER = file
- ACCESS = file
- `)
- defer managerClose()
-
- writerDump := `
- {
- "file": {
- "BufferLen": 10000,
- "Colorize": false,
- "Expression": "",
- "Flags": "stdflags",
- "Level": "info",
- "Prefix": "",
- "StacktraceLevel": "none",
- "WriterOption": {
- "Compress": true,
- "CompressionLevel": -1,
- "DailyRotate": true,
- "FileName": "$FILENAME",
- "LogRotate": true,
- "MaxDays": 7,
- "MaxSize": 268435456
- },
- "WriterType": "file"
- }
- }
- `
- writerDumpAccess := `
- {
- "file.access": {
- "BufferLen": 10000,
- "Colorize": false,
- "Expression": "",
- "Flags": "none",
- "Level": "info",
- "Prefix": "",
- "StacktraceLevel": "none",
- "WriterOption": {
- "Compress": true,
- "CompressionLevel": -1,
- "DailyRotate": true,
- "FileName": "$FILENAME",
- "LogRotate": true,
- "MaxDays": 7,
- "MaxSize": 268435456
- },
- "WriterType": "file"
- }
- }
- `
- dump := manager.GetLogger(log.DEFAULT).DumpWriters()
- require.JSONEq(t, strings.ReplaceAll(writerDump, "$FILENAME", tempPath("gitea.log")), toJSON(dump))
-
- dump = manager.GetLogger("access").DumpWriters()
- require.JSONEq(t, strings.ReplaceAll(writerDumpAccess, "$FILENAME", tempPath("access.log")), toJSON(dump))
-
- dump = manager.GetLogger("router").DumpWriters()
- require.JSONEq(t, strings.ReplaceAll(writerDump, "$FILENAME", tempPath("gitea.log")), toJSON(dump))
- }
-
- func TestLogConfigLegacyModeDisable(t *testing.T) {
- manager, managerClose := initLoggersByConfig(t, `
- [log]
- ROUTER = file
- ACCESS = file
- DISABLE_ROUTER_LOG = true
- ENABLE_ACCESS_LOG = false
- `)
- defer managerClose()
-
- dump := manager.GetLogger("access").DumpWriters()
- require.JSONEq(t, "{}", toJSON(dump))
-
- dump = manager.GetLogger("router").DumpWriters()
- require.JSONEq(t, "{}", toJSON(dump))
- }
-
- func TestLogConfigNewConfig(t *testing.T) {
- manager, managerClose := initLoggersByConfig(t, `
- [log]
- logger.access.MODE = console
- logger.xorm.MODE = console, console-1
-
- [log.console]
- LEVEL = warn
-
- [log.console-1]
- MODE = console
- LEVEL = error
- STDERR = true
- `)
- defer managerClose()
-
- writerDump := `
- {
- "console": {
- "BufferLen": 10000,
- "Colorize": false,
- "Expression": "",
- "Flags": "stdflags",
- "Level": "warn",
- "Prefix": "",
- "StacktraceLevel": "none",
- "WriterOption": {
- "Stderr": false
- },
- "WriterType": "console"
- },
- "console-1": {
- "BufferLen": 10000,
- "Colorize": false,
- "Expression": "",
- "Flags": "stdflags",
- "Level": "error",
- "Prefix": "",
- "StacktraceLevel": "none",
- "WriterOption": {
- "Stderr": true
- },
- "WriterType": "console"
- }
- }
- `
- writerDumpAccess := `
- {
- "console.access": {
- "BufferLen": 10000,
- "Colorize": false,
- "Expression": "",
- "Flags": "none",
- "Level": "warn",
- "Prefix": "",
- "StacktraceLevel": "none",
- "WriterOption": {
- "Stderr": false
- },
- "WriterType": "console"
- }
- }
- `
- dump := manager.GetLogger("xorm").DumpWriters()
- require.JSONEq(t, writerDump, toJSON(dump))
-
- dump = manager.GetLogger("access").DumpWriters()
- require.JSONEq(t, writerDumpAccess, toJSON(dump))
- }
-
- func TestLogConfigModeFile(t *testing.T) {
- tempDir := t.TempDir()
-
- tempPath := func(file string) string {
- return filepath.Join(tempDir, file)
- }
-
- manager, managerClose := initLoggersByConfig(t, `
- [log]
- ROOT_PATH = `+tempDir+`
- BUFFER_LEN = 10
- MODE = file, file1
-
- [log.file1]
- MODE = file
- LEVEL = error
- STACKTRACE_LEVEL = fatal
- EXPRESSION = filter
- FLAGS = medfile
- PREFIX = "[Prefix] "
- FILE_NAME = file-xxx.log
- LOG_ROTATE = false
- MAX_SIZE_SHIFT = 1
- DAILY_ROTATE = false
- MAX_DAYS = 90
- COMPRESS = false
- COMPRESSION_LEVEL = 4
- `)
- defer managerClose()
-
- writerDump := `
- {
- "file": {
- "BufferLen": 10,
- "Colorize": false,
- "Expression": "",
- "Flags": "stdflags",
- "Level": "info",
- "Prefix": "",
- "StacktraceLevel": "none",
- "WriterOption": {
- "Compress": true,
- "CompressionLevel": -1,
- "DailyRotate": true,
- "FileName": "$FILENAME-0",
- "LogRotate": true,
- "MaxDays": 7,
- "MaxSize": 268435456
- },
- "WriterType": "file"
- },
- "file1": {
- "BufferLen": 10,
- "Colorize": false,
- "Expression": "filter",
- "Flags": "medfile",
- "Level": "error",
- "Prefix": "[Prefix] ",
- "StacktraceLevel": "fatal",
- "WriterOption": {
- "Compress": false,
- "CompressionLevel": 4,
- "DailyRotate": false,
- "FileName": "$FILENAME-1",
- "LogRotate": false,
- "MaxDays": 90,
- "MaxSize": 2
- },
- "WriterType": "file"
- }
- }
- `
-
- dump := manager.GetLogger(log.DEFAULT).DumpWriters()
- expected := writerDump
- expected = strings.ReplaceAll(expected, "$FILENAME-0", tempPath("gitea.log"))
- expected = strings.ReplaceAll(expected, "$FILENAME-1", tempPath("file-xxx.log"))
- require.JSONEq(t, expected, toJSON(dump))
- }
|