M cli/cli.go => cli/cli.go +4 -0
@@ 78,6 78,10 @@ func Parse() {
return
}
+ if config.Opts.LogDateTime() {
+ logger.EnableDateTime()
+ }
+
if flagDebugMode || config.Opts.HasDebugMode() {
logger.EnableDebug()
}
M config/options.go => config/options.go +9 -0
@@ 11,6 11,7 @@ import (
const (
defaultHTTPS = false
+ defaultLogDateTime = false
defaultHSTS = true
defaultHTTPService = true
defaultSchedulerService = true
@@ 47,6 48,7 @@ const (
// Options contains configuration options.
type Options struct {
HTTPS bool
+ logDateTime bool
hsts bool
httpService bool
schedulerService bool
@@ 84,6 86,7 @@ type Options struct {
func NewOptions() *Options {
return &Options{
HTTPS: defaultHTTPS,
+ logDateTime: defaultLogDateTime,
hsts: defaultHSTS,
httpService: defaultHTTPService,
schedulerService: defaultSchedulerService,
@@ 118,6 121,11 @@ func NewOptions() *Options {
}
}
+// LogDateTime returns true if the date/time should be displayed in log messages.
+func (o *Options) LogDateTime() bool {
+ return o.logDateTime
+}
+
// HasDebugMode returns true if debug mode is enabled.
func (o *Options) HasDebugMode() bool {
return o.debug
@@ 283,6 291,7 @@ func (o *Options) HTTPClientMaxBodySize() int64 {
func (o *Options) String() string {
var builder strings.Builder
+ builder.WriteString(fmt.Sprintf("LOG_DATE_TIME: %v\n", o.logDateTime))
builder.WriteString(fmt.Sprintf("DEBUG: %v\n", o.debug))
builder.WriteString(fmt.Sprintf("HTTP_SERVICE: %v\n", o.httpService))
builder.WriteString(fmt.Sprintf("SCHEDULER_SERVICE: %v\n", o.schedulerService))
M config/parser.go => config/parser.go +2 -0
@@ 71,6 71,8 @@ func (p *Parser) parseLines(lines []string) (err error) {
value := strings.TrimSpace(fields[1])
switch key {
+ case "LOG_DATE_TIME":
+ p.opts.logDateTime = parseBool(value, defaultLogDateTime)
case "DEBUG":
p.opts.debug = parseBool(value, defaultDebug)
case "BASE_URL":
M logger/logger.go => logger/logger.go +15 -1
@@ 7,9 7,11 @@ package logger // import "miniflux.app/logger"
import (
"fmt"
"os"
+ "time"
)
var requestedLevel = InfoLevel
+var displayDateTime = false
// LogLevel type.
type LogLevel uint32
@@ 43,6 45,11 @@ func (level LogLevel) String() string {
}
}
+// EnableDateTime enables date time in log messages.
+func EnableDateTime() {
+ displayDateTime = true
+}
+
// EnableDebug increases logging, more verbose (debug)
func EnableDebug() {
requestedLevel = DebugLevel
@@ 79,6 86,13 @@ func Fatal(format string, v ...interface{}) {
}
func formatMessage(level LogLevel, format string, v ...interface{}) {
- prefix := fmt.Sprintf("[%s] ", level.String())
+ var prefix string
+
+ if displayDateTime {
+ prefix = fmt.Sprintf("[%s] [%s] ", time.Now().Format("2006-01-02T15:04:05"), level)
+ } else {
+ prefix = fmt.Sprintf("[%s] ", level)
+ }
+
fmt.Fprintf(os.Stderr, prefix+format+"\n", v...)
}
M miniflux.1 => miniflux.1 +19 -0
@@ 78,11 78,30 @@ Show application version\&.
Show application version\&.
.RE
+.SH CONFIGURATION FILE
+The configuration file is a text file that follow these rules:
+.LP
+- Miniflux expects each line to be in KEY=VALUE format.
+.br
+- Lines beginning with # are processed as comments and ignored.
+.br
+- Blank lines are ignored.
+.br
+- There is no variable interpolation.
+.PP
+Keys are the same as the environment variables described below.
+.br
+Environment variables override the values defined in the config file.
+
.SH ENVIRONMENT
.TP
.B DEBUG
Set the value to 1 to enable debug logs\&.
.TP
+.TP
+.B LOG_DATE_TIME
+Display the date and time in log messages\&.
+.TP
.B WORKER_POOL_SIZE
Number of background workers (default is 5)\&.
.TP