diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index 8bc4a2c204..cec7e4255a 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -863,8 +863,6 @@ ROOT_PATH = MODE = console ; Buffer length of the channel, keep it as it is if you don't know what it is. BUFFER_LEN = 10000 -REDIRECT_MACARON_LOG = false -MACARON = file ; Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Info" ROUTER_LOG_LEVEL = Info ROUTER = console diff --git a/docker/root/etc/templates/app.ini b/docker/root/etc/templates/app.ini index 1a831a6d10..c8a8cdc5f3 100644 --- a/docker/root/etc/templates/app.ini +++ b/docker/root/etc/templates/app.ini @@ -47,8 +47,6 @@ PATH = /data/gitea/attachments [log] MODE = console LEVEL = info -REDIRECT_MACARON_LOG = true -MACARON = console ROUTER = console ROOT_PATH = /data/gitea/log diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index 1d9326ad6e..9b5c4cbf2d 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -611,7 +611,7 @@ Default templates for project boards: - `STACKTRACE_LEVEL`: **None**: Default log level at which to log create stack traces. \[Trace, Debug, Info, Warn, Error, Critical, Fatal, None\] - `ROUTER_LOG_LEVEL`: **Info**: The log level that the router should log at. (If you are setting the access log, its recommended to place this at Debug.) - `ROUTER`: **console**: The mode or name of the log the router should log to. (If you set this to `,` it will log to default gitea logger.) -NB: You must `REDIRECT_MACARON_LOG` and have `DISABLE_ROUTER_LOG` set to `false` for this option to take effect. Configure each mode in per mode log subsections `\[log.modename.router\]`. +NB: You must have `DISABLE_ROUTER_LOG` set to `false` for this option to take effect. Configure each mode in per mode log subsections `\[log.modename.router\]`. - `ENABLE_ACCESS_LOG`: **false**: Creates an access.log in NCSA common log format, or as per the following template - `ACCESS`: **file**: Logging mode for the access logger, use a comma to separate values. Configure each mode in per mode log subsections `\[log.modename.access\]`. By default the file mode will log to `$ROOT_PATH/access.log`. (If you set this to `,` it will log to the default gitea logger.) - `ACCESS_LOG_TEMPLATE`: **`{{.Ctx.RemoteAddr}} - {{.Identity}} {{.Start.Format "[02/Jan/2006:15:04:05 -0700]" }} "{{.Ctx.Req.Method}} {{.Ctx.Req.URL.RequestURI}} {{.Ctx.Req.Proto}}" {{.ResponseWriter.Status}} {{.ResponseWriter.Size}} "{{.Ctx.Req.Referer}}\" \"{{.Ctx.Req.UserAgent}}"`**: Sets the template used to create the access log. diff --git a/docs/content/doc/advanced/environment-variables.en-us.md b/docs/content/doc/advanced/environment-variables.en-us.md index deb195aeb8..288358f69d 100644 --- a/docs/content/doc/advanced/environment-variables.en-us.md +++ b/docs/content/doc/advanced/environment-variables.en-us.md @@ -58,15 +58,6 @@ For documentation about each of the variables available, refer to the - `HOMEDRIVE`: Main drive path used to access the home directory (C:) - `HOMEPATH`: Home relative path in the given home drive path -## Macaron (framework used by Gitea) - -- `HOST`: Host Macaron will listen on -- `PORT`: Port Macaron will listen on -- `MACARON_ENV`: global variable to provide special functionality for development environments - vs. production environments. If MACARON_ENV is set to "" or "development", then templates will - be recompiled on every request. For more performance, set the MACARON_ENV environment variable - to "production". - ## Miscellaneous - `SKIP_MINWINSVC`: If set to 1, do not run as a service on Windows. diff --git a/docs/content/doc/advanced/environment-variables.zh-cn.md b/docs/content/doc/advanced/environment-variables.zh-cn.md index 4b936a53fa..63ee4c6935 100644 --- a/docs/content/doc/advanced/environment-variables.zh-cn.md +++ b/docs/content/doc/advanced/environment-variables.zh-cn.md @@ -50,13 +50,6 @@ GITEA_CUSTOM=/home/gitea/custom ./gitea web * `HOMEDRIVE`: 用于访问 home 目录的主驱动器路径(C盘) * `HOMEPATH`:在指定主驱动器下的 home 目录相对路径 -## Macaron(Gitea 使用的 web 框架) - - * `HOST`:Macaron 监听的主机地址 - * `PORT`:Macaron 监听的端口地址 - * `MACARON_ENV`:为开发环境和生产环境提供特殊功能性配置的全局变量,当 MACARON_ENV 设置为 "" 或 "development" - 时,每次请求都会重编译页面模板。为了提高性能表现,可将它设置为 "production"。 - ## Miscellaneous * `SKIP_MINWINSVC`:如果设置为 1,在 Windows 上不会以 service 的形式运行。 diff --git a/docs/content/doc/advanced/logging-documentation.en-us.md b/docs/content/doc/advanced/logging-documentation.en-us.md index 195820329d..73a5e0eae1 100644 --- a/docs/content/doc/advanced/logging-documentation.en-us.md +++ b/docs/content/doc/advanced/logging-documentation.en-us.md @@ -27,7 +27,6 @@ The fundamental thing to be aware of in Gitea is that there are several log groups: - The "Default" logger -- The Macaron logger - The Router logger - The Access logger - The XORM logger @@ -74,8 +73,7 @@ You can disable Router log by setting `DISABLE_ROUTER_LOG`. You can configure the outputs of this router log by setting the `ROUTER` value in the `[log]` section of the configuration. `ROUTER` will default to `console` if unset. The Gitea -Router logs the same data as the Macaron log but has slightly different -coloring. It logs at the `Info` level by default, but this can be +Router logs at the `Info` level by default, but this can be changed if desired by setting the `ROUTER_LOG_LEVEL` value. Please note, setting the `LEVEL` of this logger to a level above @@ -182,7 +180,7 @@ Certain configuration is common to all modes of log output: - `STACKTRACE_LEVEL` is the lowest level that this output will print a stacktrace. This value is inherited. - `MODE` is the mode of the log output. It will default to the sublogger - name. Thus `[log.console.macaron]` will default to `MODE = console`. + name. Thus `[log.console.router]` will default to `MODE = console`. - `COLORIZE` will default to `true` for `console` as described, otherwise it will default to `false`. @@ -280,8 +278,6 @@ LOG_SQL = false ; SQL logs are rarely helpful unless we specifically ask for the [log] MODE = console LEVEL = debug ; please set the level to debug when we are debugging a problem -REDIRECT_MACARON_LOG = true -MACARON = console ROUTER = console COLORIZE = false ; this can be true if you can strip out the ansi coloring ``` @@ -314,7 +310,6 @@ ROOT_PATH = %(GITEA_WORK_DIR)/log MODE = console LEVEL = Info STACKTRACE_LEVEL = None -REDIRECT_MACARON_LOG = false ENABLE_ACCESS_LOG = false ENABLE_XORM_LOG = true XORM = , @@ -345,7 +340,7 @@ recommended that pausing only done for a very short period of time. ## Adding and removing logging whilst Gitea is running It is possible to add and remove logging whilst Gitea is running using the `gitea manager logging add` and `remove` subcommands. -This functionality can only adjust running log systems and cannot be used to start the access, macaron or router loggers if they +This functionality can only adjust running log systems and cannot be used to start the access or router loggers if they were not already initialised. If you wish to start these systems you are advised to adjust the app.ini and (gracefully) restart the Gitea service. diff --git a/integrations/mssql.ini.tmpl b/integrations/mssql.ini.tmpl index 44c0a7eed9..a9a934c568 100644 --- a/integrations/mssql.ini.tmpl +++ b/integrations/mssql.ini.tmpl @@ -78,9 +78,7 @@ PROVIDER_CONFIG = integrations/gitea-integration-mssql/data/sessions [log] MODE = test,file ROOT_PATH = mssql-log -REDIRECT_MACARON_LOG = true ROUTER = , -MACARON = , XORM = file [log.test] diff --git a/integrations/mysql.ini.tmpl b/integrations/mysql.ini.tmpl index 2b044498eb..f8abd3ffeb 100644 --- a/integrations/mysql.ini.tmpl +++ b/integrations/mysql.ini.tmpl @@ -97,9 +97,7 @@ PROVIDER_CONFIG = integrations/gitea-integration-mysql/data/sessions [log] MODE = test,file ROOT_PATH = mysql-log -REDIRECT_MACARON_LOG = true ROUTER = , -MACARON = , XORM = file [log.test] diff --git a/integrations/mysql8.ini.tmpl b/integrations/mysql8.ini.tmpl index 798ab7852a..cccede5b20 100644 --- a/integrations/mysql8.ini.tmpl +++ b/integrations/mysql8.ini.tmpl @@ -70,9 +70,7 @@ PROVIDER_CONFIG = data/sessions-mysql8 [log] MODE = test,file ROOT_PATH = mysql8-log -REDIRECT_MACARON_LOG = true ROUTER = , -MACARON = , XORM = file [log.test] diff --git a/integrations/oauth_test.go b/integrations/oauth_test.go index a9e48b061f..e74ff28cad 100644 --- a/integrations/oauth_test.go +++ b/integrations/oauth_test.go @@ -235,7 +235,7 @@ func TestRefreshTokenInvalidation(t *testing.T) { "redirect_uri": "a", "refresh_token": parsed.RefreshToken, }) - // tip: Why this changed, because macaron will set req.Body back when consume the req but chi will not. + bs, err := ioutil.ReadAll(refreshReq.Body) assert.NoError(t, err) diff --git a/integrations/pgsql.ini.tmpl b/integrations/pgsql.ini.tmpl index 5f082f04e1..a8742268db 100644 --- a/integrations/pgsql.ini.tmpl +++ b/integrations/pgsql.ini.tmpl @@ -79,9 +79,7 @@ PROVIDER_CONFIG = integrations/gitea-integration-pgsql/data/sessions [log] MODE = test,file ROOT_PATH = pgsql-log -REDIRECT_MACARON_LOG = true ROUTER = , -MACARON = , XORM = file [log.test] diff --git a/integrations/sqlite.ini.tmpl b/integrations/sqlite.ini.tmpl index 5ed096b0a3..9d78d0c56b 100644 --- a/integrations/sqlite.ini.tmpl +++ b/integrations/sqlite.ini.tmpl @@ -75,9 +75,7 @@ PROVIDER_CONFIG = integrations/gitea-integration-sqlite/data/sessions [log] MODE = test,file ROOT_PATH = sqlite-log -REDIRECT_MACARON_LOG = true ROUTER = , -MACARON = , XORM = file [log.test] diff --git a/modules/context/api.go b/modules/context/api.go index cf6dc265cd..aab6905fd1 100644 --- a/modules/context/api.go +++ b/modules/context/api.go @@ -23,7 +23,7 @@ import ( "gitea.com/go-chi/session" ) -// APIContext is a specific macaron context for API service +// APIContext is a specific context for API service type APIContext struct { *Context Org *APIOrganization @@ -217,7 +217,7 @@ func (ctx *APIContext) CheckForOTP() { } } -// APIContexter returns apicontext as macaron middleware +// APIContexter returns apicontext as middleware func APIContexter() func(http.Handler) http.Handler { var csrfOpts = getCsrfOpts() diff --git a/modules/context/org.go b/modules/context/org.go index 83d385a1e9..5148cc4a6c 100644 --- a/modules/context/org.go +++ b/modules/context/org.go @@ -170,7 +170,7 @@ func HandleOrgAssignment(ctx *Context, args ...bool) { } } -// OrgAssignment returns a macaron middleware to handle organization assignment +// OrgAssignment returns a middleware to handle organization assignment func OrgAssignment(args ...bool) func(ctx *Context) { return func(ctx *Context) { HandleOrgAssignment(ctx, args...) diff --git a/modules/context/permission.go b/modules/context/permission.go index 6fb8237e22..b9cdf93de2 100644 --- a/modules/context/permission.go +++ b/modules/context/permission.go @@ -9,7 +9,7 @@ import ( "code.gitea.io/gitea/modules/log" ) -// RequireRepoAdmin returns a macaron middleware for requiring repository admin permission +// RequireRepoAdmin returns a middleware for requiring repository admin permission func RequireRepoAdmin() func(ctx *Context) { return func(ctx *Context) { if !ctx.IsSigned || !ctx.Repo.IsAdmin() { @@ -19,7 +19,7 @@ func RequireRepoAdmin() func(ctx *Context) { } } -// RequireRepoWriter returns a macaron middleware for requiring repository write to the specify unitType +// RequireRepoWriter returns a middleware for requiring repository write to the specify unitType func RequireRepoWriter(unitType models.UnitType) func(ctx *Context) { return func(ctx *Context) { if !ctx.Repo.CanWrite(unitType) { @@ -29,7 +29,7 @@ func RequireRepoWriter(unitType models.UnitType) func(ctx *Context) { } } -// RequireRepoWriterOr returns a macaron middleware for requiring repository write to one of the unit permission +// RequireRepoWriterOr returns a middleware for requiring repository write to one of the unit permission func RequireRepoWriterOr(unitTypes ...models.UnitType) func(ctx *Context) { return func(ctx *Context) { for _, unitType := range unitTypes { @@ -41,7 +41,7 @@ func RequireRepoWriterOr(unitTypes ...models.UnitType) func(ctx *Context) { } } -// RequireRepoReader returns a macaron middleware for requiring repository read to the specify unitType +// RequireRepoReader returns a middleware for requiring repository read to the specify unitType func RequireRepoReader(unitType models.UnitType) func(ctx *Context) { return func(ctx *Context) { if !ctx.Repo.CanRead(unitType) { @@ -67,7 +67,7 @@ func RequireRepoReader(unitType models.UnitType) func(ctx *Context) { } } -// RequireRepoReaderOr returns a macaron middleware for requiring repository write to one of the unit permission +// RequireRepoReaderOr returns a middleware for requiring repository write to one of the unit permission func RequireRepoReaderOr(unitTypes ...models.UnitType) func(ctx *Context) { return func(ctx *Context) { for _, unitType := range unitTypes { diff --git a/modules/context/private.go b/modules/context/private.go index a246100050..dfefa1d2f0 100644 --- a/modules/context/private.go +++ b/modules/context/private.go @@ -28,7 +28,7 @@ func GetPrivateContext(req *http.Request) *PrivateContext { return req.Context().Value(privateContextKey).(*PrivateContext) } -// PrivateContexter returns apicontext as macaron middleware +// PrivateContexter returns apicontext as middleware func PrivateContexter() func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { diff --git a/modules/context/repo.go b/modules/context/repo.go index 79192267fb..13037f4625 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -373,7 +373,7 @@ func repoAssignment(ctx *Context, repo *models.Repository) { ctx.Data["IsEmptyRepo"] = ctx.Repo.Repository.IsEmpty } -// RepoIDAssignment returns a macaron handler which assigns the repo to the context. +// RepoIDAssignment returns a handler which assigns the repo to the context. func RepoIDAssignment() func(ctx *Context) { return func(ctx *Context) { repoID := ctx.ParamsInt64(":repoid") @@ -393,7 +393,7 @@ func RepoIDAssignment() func(ctx *Context) { } } -// RepoAssignment returns a macaron to handle repository assignment +// RepoAssignment returns a middleware to handle repository assignment func RepoAssignment() func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { @@ -849,7 +849,7 @@ func GitHookService() func(ctx *Context) { } } -// UnitTypes returns a macaron middleware to set unit types to context variables. +// UnitTypes returns a middleware to set unit types to context variables. func UnitTypes() func(ctx *Context) { return func(ctx *Context) { ctx.Data["UnitTypeCode"] = models.UnitTypeCode diff --git a/modules/log/log.go b/modules/log/log.go index 16a6efb75b..cae24f53d8 100644 --- a/modules/log/log.go +++ b/modules/log/log.go @@ -267,7 +267,7 @@ func NewLoggerAsWriter(level string, ourLoggers ...*MultiChannelledLogger) *Logg return l } -// Write implements the io.Writer interface to allow spoofing of macaron +// Write implements the io.Writer interface to allow spoofing of chi func (l *LoggerAsWriter) Write(p []byte) (int, error) { for _, logger := range l.ourLoggers { // Skip = 3 because this presumes that we have been called by log.Println() diff --git a/modules/public/dynamic.go b/modules/public/dynamic.go index f634c598a3..a57b636369 100644 --- a/modules/public/dynamic.go +++ b/modules/public/dynamic.go @@ -13,7 +13,7 @@ import ( "time" ) -// Static implements the macaron static handler for serving assets. +// Static implements the static handler for serving assets. func Static(opts *Options) func(next http.Handler) http.Handler { return opts.staticHandler(opts.Directory) } diff --git a/modules/public/public.go b/modules/public/public.go index 6417c91f1a..6695944bd6 100644 --- a/modules/public/public.go +++ b/modules/public/public.go @@ -15,7 +15,7 @@ import ( "code.gitea.io/gitea/modules/setting" ) -// Options represents the available options to configure the macaron handler. +// Options represents the available options to configure the handler. type Options struct { Directory string IndexFile string @@ -34,7 +34,7 @@ var KnownPublicEntries = []string{ "favicon.ico", } -// Custom implements the macaron static handler for serving custom assets. +// Custom implements the static handler for serving custom assets. func Custom(opts *Options) func(next http.Handler) http.Handler { return opts.staticHandler(path.Join(setting.CustomPath, "public")) } diff --git a/modules/public/static.go b/modules/public/static.go index c4dd7a1eca..36cfdbe44f 100644 --- a/modules/public/static.go +++ b/modules/public/static.go @@ -20,7 +20,7 @@ import ( "code.gitea.io/gitea/modules/log" ) -// Static implements the macaron static handler for serving assets. +// Static implements the static handler for serving assets. func Static(opts *Options) func(next http.Handler) http.Handler { opts.FileSystem = Assets // we don't need to pass the directory, because the directory var is only diff --git a/modules/setting/log.go b/modules/setting/log.go index daa449a5ca..9fe2d5bda3 100644 --- a/modules/setting/log.go +++ b/modules/setting/log.go @@ -273,7 +273,7 @@ func newRouterLogService() { // Allow [log] DISABLE_ROUTER_LOG to override [server] DISABLE_ROUTER_LOG DisableRouterLog = Cfg.Section("log").Key("DISABLE_ROUTER_LOG").MustBool(DisableRouterLog) - if !DisableRouterLog && RedirectMacaronLog { + if !DisableRouterLog { options := newDefaultLogOptions() options.filename = filepath.Join(LogRootPath, "router.log") options.flags = "date,time" // For the router we don't want any prefixed flags diff --git a/modules/setting/setting.go b/modules/setting/setting.go index f69dd11ceb..dd38f5be45 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -288,7 +288,6 @@ var ( LogLevel string StacktraceLogLevel string LogRootPath string - RedirectMacaronLog bool DisableRouterLog bool RouterLogLevel log.Level RouterLogMode string @@ -539,7 +538,6 @@ func NewContext() { StacktraceLogLevel = getStacktraceLogLevel(Cfg.Section("log"), "STACKTRACE_LEVEL", "None") LogRootPath = Cfg.Section("log").Key("ROOT_PATH").MustString(path.Join(AppWorkPath, "log")) forcePathSeparator(LogRootPath) - RedirectMacaronLog = Cfg.Section("log").Key("REDIRECT_MACARON_LOG").MustBool(false) RouterLogLevel = log.FromString(Cfg.Section("log").Key("ROUTER_LOG_LEVEL").MustString("Info")) sec := Cfg.Section("server") diff --git a/modules/translation/translation.go b/modules/translation/translation.go index 94a93a40ae..28ff6a5db1 100644 --- a/modules/translation/translation.go +++ b/modules/translation/translation.go @@ -49,7 +49,6 @@ func InitLocales() { } } - // These codes will be used once macaron removed tags := make([]language.Tag, len(setting.Langs)) for i, lang := range setting.Langs { tags[i] = language.Raw.Make(lang) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index a7dae87cd8..a4b677e43b 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2402,7 +2402,6 @@ config.git_gc_timeout = GC Operation Timeout config.log_config = Log Configuration config.log_mode = Log Mode -config.macaron_log_mode = Macaron Log Mode config.own_named_logger = Named Logger config.routes_to_default_logger = Routes To Default Logger config.go_log = Uses Go Log (redirected to default) diff --git a/routers/admin/admin.go b/routers/admin/admin.go index 250bc5da5e..c8f9d8b35b 100644 --- a/routers/admin/admin.go +++ b/routers/admin/admin.go @@ -308,7 +308,6 @@ func Config(ctx *context.Context) { ctx.Data["EnvVars"] = envVars ctx.Data["Loggers"] = setting.GetLogDescriptions() - ctx.Data["RedirectMacaronLog"] = setting.RedirectMacaronLog ctx.Data["EnableAccessLog"] = setting.EnableAccessLog ctx.Data["AccessLogTemplate"] = setting.AccessLogTemplate ctx.Data["DisableRouterLog"] = setting.DisableRouterLog diff --git a/routers/install.go b/routers/install.go index 5dcd1d48a3..da2631931e 100644 --- a/routers/install.go +++ b/routers/install.go @@ -371,8 +371,6 @@ func InstallPost(ctx *context.Context) { cfg.Section("log").Key("MODE").SetValue("console") cfg.Section("log").Key("LEVEL").SetValue(setting.LogLevel) cfg.Section("log").Key("ROOT_PATH").SetValue(form.LogRootPath) - cfg.Section("log").Key("REDIRECT_MACARON_LOG").SetValue("true") - cfg.Section("log").Key("MACARON").SetValue("console") cfg.Section("log").Key("ROUTER").SetValue("console") cfg.Section("security").Key("INSTALL_LOCK").SetValue("true") diff --git a/routers/routes/web.go b/routers/routes/web.go index 3fecb4dbbe..03555e3d54 100644 --- a/routers/routes/web.go +++ b/routers/routes/web.go @@ -215,7 +215,7 @@ func WebRoutes() *web.Route { return r } -// RegisterRoutes routes routes to Macaron +// RegisterRoutes register routes func RegisterRoutes(m *web.Route) { reqSignIn := context.Toggle(&context.ToggleOptions{SignInRequired: true}) ignSignIn := context.Toggle(&context.ToggleOptions{SignInRequired: setting.Service.RequireSignInView}) diff --git a/templates/admin/config.tmpl b/templates/admin/config.tmpl index aa6a9b793b..a3c55b2b18 100644 --- a/templates/admin/config.tmpl +++ b/templates/admin/config.tmpl @@ -344,20 +344,16 @@ {{if .DisableRouterLog}}
{{$.i18n.Tr "admin.config.disabled_logger"}}
{{else}} - {{if .RedirectMacaronLog}} - {{if .Loggers.router.SubLogDescriptions}} -
{{$.i18n.Tr "admin.config.own_named_logger"}}
- {{range .Loggers.router.SubLogDescriptions}} -
{{$.i18n.Tr "admin.config.log_mode"}}
-
{{.Name}} ({{.Provider}})
-
{{$.i18n.Tr "admin.config.log_config"}}
-
{{.Config | JsonPrettyPrint}}
- {{end}} - {{else}} -
{{$.i18n.Tr "admin.config.routes_to_default_logger"}}
+ {{if .Loggers.router.SubLogDescriptions}} +
{{$.i18n.Tr "admin.config.own_named_logger"}}
+ {{range .Loggers.router.SubLogDescriptions}} +
{{$.i18n.Tr "admin.config.log_mode"}}
+
{{.Name}} ({{.Provider}})
+
{{$.i18n.Tr "admin.config.log_config"}}
+
{{.Config | JsonPrettyPrint}}
{{end}} {{else}} -
{{$.i18n.Tr "admin.config.go_log"}}
+
{{$.i18n.Tr "admin.config.routes_to_default_logger"}}
{{end}} {{end}}