package log
import "github.com/Diarkis/diarkis/log"
Package log ▷
Log
Diarkis logger.
Log Configurations
Log configurations are explained below.
{
"level": "verbose",
"levels": {
"$(logger_name)": "verbose",
},
"timeZone": "local",
"color": true,
"flat": false,
"filePath": "path/to/log/file",
"unsafeLogging": false
}
Configuration Values
level - Default is "verbose" levels - You may configure log level per logger name.
Controls logger level: verbose < network < sys < debug(trace) < info < notice < warn < error < fatal.
Log Level Name | Description | |
---|---|---|
verbose | Lowest logging level to see what is taking place under the hood. Must never be used in production. | Default |
network | Lower than sys log level to output UDP/TCP network related logs. | |
sys | Second lowest logging level to log more detailed information. | |
debug | Logging debug purpose information usually expected to be used in application level of the code. | |
info | Logging starting and shutting down log as well as other must see information. | |
notice | Should be used to log information that is important for the application, but not as critical. | |
warn | Warning information that is not errors, but should be logged and reviewed later. | |
error | Errors that may be caused by either the user or the application. | |
fatal | Logging of unrecoverable problems. |
We suggest using log level info for production.
timeZone - Default is "utc"
Valid configuration value are "utc" or "local". Default is UTC.
Time Zone Name | Description | |
---|---|---|
utc | UTC Time zone | Default |
local | Local time zone |
We suggest using UTC time zone for multiple cluster environment.
color - Default is true
If false, the output log has no color. The default is true.
flat - Default is false
If set to true, logging data will not contain line breaks. This configuration is recommended to be paired to env DIARKIS_JSON_LOG=true.
filePath - Default is ""
File path to output log data to (absolute path).
unsafeLogging - Default is false
If set to true, the contents of map and struct are output.
The absolute file path to write the logging data to. This configuration should be used if you need to leave log files somewhere on disk. Leave this empty to disable it.
Environment Variable Used By Log Module
DIARKIS_JSON_LOG=true
This converts all output log into JSON.
Change Log Level For A Specific Logger Name at Runtime
Diarkis logger allows you to change a specific logger's log level in runtime as well.
Logger name is the string output that is wrapped in < and >. If you see <SERVER>, then logger name is SERVER.
Below is the step by step operation to change log level by logger name in runtime.
1. Create a signal command file named DIARKIS_SIGUSR1 under /tmp/ directory. It should look like this: /tmp/DIARKIS_SIGUSR1
▶︎ Enable runtime log level change by logger name
DIARKIS_SIGUSR1 file must contain the following to enable runtime log level change:
LogLevelChangeByName Enable $(logger_name) $(log_level)
Example:
The example below will enable verbose level of logging just for "ROOM" logs.
LogLevelChangeByName Enable ROOM Verbose
▶︎ Disable runtime log level change by logger name
DIARKIS_SIGUSR1 file must contain the following to disable runtime log level change:
LogLevelChangeByName Disable
Change Log Level Globally At Runtime
You may change log level for all logging at runtime.
Important
If LogLevelChangeByName is enabled, it takes the highest priority for the specified log name.
▶︎ TaskName: LogLevel:Verbose
This operation will change Diarkis logger's log level at runtime to verbose.
▶︎ TaskName: LogLevel:Network
This operation will change Diarkis logger's log level at runtime to network.
▶︎ TaskName: LogLevel:Sys
This operation will change Diarkis logger's log level at runtime to sys.
▶︎ TaskName: LogLevel:Debug
This operation will change Diarkis logger's log level at runtime to debug.
▶︎ TaskName: LogLevel:Info
This operation will change Diarkis logger's log level at runtime to info.
▶︎ TaskName: LogLevel:Error
This operation will change Diarkis logger's log level at runtime to error.
▶︎ TaskName: LogLevel:Fatal
This operation will change Diarkis logger's log level at runtime to fatal.
Rotate Log Level Globally
▶︎ TaskName: LogLevelChange
This operation will change Diarkis logger's log level at runtime. Every time this operation is called the log level changes.
Important
If LogLevelChangeByName is enabled, it takes the highest priority for the specified log name.
Below is the order of log level change:
╭─────────╮ ╭─────────╮ ╭─────────╮ ╭─────────╮ ╭─────────╮ ╔═▶︎│ Verbose │▶︎│ Network │▶︎│ Sys │▶︎│ Debug │▶︎│ Info │══╗ ║ ╰─────────╯ ╰─────────╯ ╰─────────╯ ╰─────────╯ ╰─────────╯ ║ ╚═══════════════════════════════════════════════════════════════╝
Formatted Logging
Log module lets you format logging outputs and it supports JSON format as well.
unsafe logging
Log module In the log module, by default, if you try to output map and struct directly, they are not output to prevent panic by concurrent access. If you want to output for debugging, etc., you can do so by setting "unsafeLogging": true.
Index
- func AddFormat(name string, cb func(v interface{}) interface{}) bool
- func ChangeLogLevelByName(params []string)
- func DisableUnsafeLogging()
- func EnableUnsafeLogging()
- func Fmt(vals ...interface{}) string
- func FmtBlue(msg string) string
- func FmtDBlue(msg string) string
- func FmtGreen(msg string) string
- func FmtGrey(msg string) string
- func FmtLBlue(msg string) string
- func FmtPurple(msg string) string
- func FmtRed(msg string) string
- func FmtRedBg(msg string) string
- func FmtYellow(msg string) string
- func IsDebug() bool
- func IsError() bool
- func IsFatal() bool
- func IsInfo() bool
- func IsNetwork() bool
- func IsNotice() bool
- func IsSys() bool
- func IsVerbose() bool
- func IsWarn() bool
- func JSONFormat(enable bool)
- func Level(_level int)
- func SetCustomOutput(...)
- func SetDebugLevel()
- func SetErrorLevel()
- func SetFatalLevel()
- func SetInfoLevel()
- func SetNetworkLevel()
- func SetNoticeLevel()
- func SetPrefix(prefix string)
- func SetSysLevel()
- func SetVerboseLevel()
- func SetWarnLevel()
- func Setup(confpath string)
- func UpdateConfigs(configs map[string]interface{})
- func UseCustomOutput()
- func UseJSONFormat() deprecated
- type FormatTypeFunc
-
type Logger
- func New(name string) *Logger
- func (logger *Logger) Debug(vals ...interface{})
- func (logger *Logger) Debugf(vals ...interface{})
- func (logger *Logger) DisableCustom()
- func (logger *Logger) EnableCustom()
- func (logger *Logger) Error(vals ...interface{})
- func (logger *Logger) Errorf(vals ...interface{})
- func (logger *Logger) Fatal(vals ...interface{})
- func (logger *Logger) Fatalf(vals ...interface{})
- func (logger *Logger) FmtDebug(vals ...interface{}) string
- func (logger *Logger) FmtError(vals ...interface{}) string
- func (logger *Logger) FmtFatal(vals ...interface{}) string
- func (logger *Logger) FmtInfo(vals ...interface{}) string
- func (logger *Logger) FmtNetwork(vals ...interface{}) string
- func (logger *Logger) FmtNotice(vals ...interface{}) string
- func (logger *Logger) FmtSys(vals ...interface{}) string
- func (logger *Logger) FmtVerbose(vals ...interface{}) string
- func (logger *Logger) FmtWarn(vals ...interface{}) string
- func (logger *Logger) Info(vals ...interface{})
- func (logger *Logger) Infof(vals ...interface{})
- func (logger *Logger) Network(vals ...interface{})
- func (logger *Logger) Networkf(vals ...interface{})
- func (logger *Logger) Notice(vals ...interface{})
- func (logger *Logger) Noticef(vals ...interface{})
- func (logger *Logger) Sys(vals ...interface{})
- func (logger *Logger) Sysf(vals ...interface{})
- func (logger *Logger) Trace(vals ...interface{})
- func (logger *Logger) Verbose(vals ...interface{})
- func (logger *Logger) Verbosef(vals ...interface{})
- func (logger *Logger) Warn(vals ...interface{})
- func (logger *Logger) Warnf(vals ...interface{})
- func (logger *Logger) Write(vals ...interface{})
- type SafeArg
Functions
func AddFormat
func AddFormat(name string, cb func(v interface{}) interface{}) bool
AddFormat assigns a formatting function to the given name.
Caution
You must NOT read from a map directly in the callback because of possible concurrent map access panic.
When formatted logging is used (Verbosef, Networkf, Sysf, Debugf, Infof, Warnf, Errorf, Fatalf), with the given name, it will execute the assigned callback.
func ChangeLogLevelByName
func ChangeLogLevelByName(params []string)
ChangeLogLevelByName is automatically called when the server receives SIGUSR1 signal and when there is /tmp/DIARKIS_SIGUSR1.
This function acts as a toggle.
DIARKIS_SIGUSR1 File Format
The first line must be ChangeLogLevelByName and the rest will be parameters.
Note
line breaks will be the delimiter.
How To Disable Runtime Log Level Change
params[0] = "disable"
How To Enable Runtime Log For Specific Log By Name
params[0] = "enable" params[1] = "$(log_name)" // e.i. MESH, SERVER etc. params[2] = "$(log_level)" // e.i. verbose, network etc.
func DisableUnsafeLogging
func DisableUnsafeLogging()
DisableUnsafeLogging disables map and pointer to struct logging
func EnableUnsafeLogging
func EnableUnsafeLogging()
EnableUnsafeLogging enables map and pointer to struct logging.
func Fmt
func Fmt(vals ...interface{}) string
Fmt alias of fmt.Sprint
func FmtBlue
func FmtBlue(msg string) string
FmtBlue Colorize the given string
func FmtDBlue
func FmtDBlue(msg string) string
FmtDBlue Colorize the given string
func FmtGreen
func FmtGreen(msg string) string
FmtGreen Colorize the given string
func FmtGrey
func FmtGrey(msg string) string
FmtGrey Colorize the given string
func FmtLBlue
func FmtLBlue(msg string) string
FmtLBlue Colorize the given string
func FmtPurple
func FmtPurple(msg string) string
FmtPurple Colorize the given string
func FmtRed
func FmtRed(msg string) string
FmtRed Colorize the given string
func FmtRedBg
func FmtRedBg(msg string) string
FmtRedBg Colorize the given string
func FmtYellow
func FmtYellow(msg string) string
FmtYellow Colorize the given string
func IsDebug
func IsDebug() bool
IsDebug returns true if the log level is debug
func IsError
func IsError() bool
IsError returns true if the log level is error
func IsFatal
func IsFatal() bool
IsFatal returns true if the log level is fatal
func IsInfo
func IsInfo() bool
IsInfo returns true if the log level is info
func IsNetwork
func IsNetwork() bool
IsNetwork returns true if the log level is network
func IsNotice
func IsNotice() bool
IsNotice returns true if the log level is notice
func IsSys
func IsSys() bool
IsSys returns true if the log level is sys
func IsVerbose
func IsVerbose() bool
IsVerbose returns true if the log level is verbose
func IsWarn
func IsWarn() bool
IsWarn returns true if the log level is warn
func JSONFormat
func JSONFormat(enable bool)
JSONFormat Toggles the use of JSON to format the log.
func Level
func Level(_level int)
Level Sets logging level
func SetCustomOutput
func SetCustomOutput(custom func(formatted bool, name string, prefix string, level string, vals []interface{}) string)
SetCustomOutput Registers a custom function to create a log output string
func SetDebugLevel
func SetDebugLevel()
SetDebugLevel set log level to debug
func SetErrorLevel
func SetErrorLevel()
SetErrorLevel set log level to error
func SetFatalLevel
func SetFatalLevel()
SetFatalLevel set log level to fatal
func SetInfoLevel
func SetInfoLevel()
SetInfoLevel set log level to info
func SetNetworkLevel
func SetNetworkLevel()
SetNetworkLevel set log level to sys
func SetNoticeLevel
func SetNoticeLevel()
SetNoticeLevel set log level to notice
func SetPrefix
func SetPrefix(prefix string)
SetPrefix Sets a prefix for every log
func SetSysLevel
func SetSysLevel()
SetSysLevel set log level to sys
func SetVerboseLevel
func SetVerboseLevel()
SetVerboseLevel set log level to verbose
func SetWarnLevel
func SetWarnLevel()
SetWarnLevel set log level to warn
func Setup
func Setup(confpath string)
Setup Load a configuration file into memory - pass an empty string to load nothing
func UpdateConfigs
func UpdateConfigs(configs map[string]interface{})
UpdateConfigs Apply configurations It can be executed in runtime to update the configurations also
func UseCustomOutput
func UseCustomOutput()
UseCustomOutput Enables custom output for all log data.
func UseJSONFormat deprecated
func UseJSONFormat()
UseJSONFormat formats the log with JSON format.
Deprecated: Please use JSONFormat instead.
Types
type FormatTypeFunc
type FormatTypeFunc func(v interface{}) interface{}
FormatTypeFunc Represents a function that formats an interface.
type Logger
type Logger struct { Name string }
Logger Logger data structure
func New
func New(name string) *Logger
New Creates a new logger
func (*Logger) Debug
func (logger *Logger) Debug(vals ...interface{})
Debug Outputs a log to stdout stream
func (*Logger) Debugf
func (logger *Logger) Debugf(vals ...interface{})
Debugf outputs formatted logging.
This is useful when you need to format the logging message.
Important
FormattedText supports JSON format log output as well.
func (*Logger) DisableCustom
func (logger *Logger) DisableCustom()
DisableCustom blocks logger.Write()
func (*Logger) EnableCustom
func (logger *Logger) EnableCustom()
EnableCustom allows logger.Write()
func (*Logger) Error
func (logger *Logger) Error(vals ...interface{})
Error Outputs a log to stdout stream
func (*Logger) Errorf
func (logger *Logger) Errorf(vals ...interface{})
Errorf outputs formatted logging.
This is useful when you need to format the logging message.
Important
FormattedText supports JSON format log output as well.
func (*Logger) Fatal
func (logger *Logger) Fatal(vals ...interface{})
Fatal Outputs a log to stdout stream
func (*Logger) Fatalf
func (logger *Logger) Fatalf(vals ...interface{})
Fatalf outputs formatted logging.
This is useful when you need to format the logging message.
Important
FormattedText supports JSON format log output as well.
func (*Logger) FmtDebug
func (logger *Logger) FmtDebug(vals ...interface{}) string
FmtDebug Formats given strings and returns it for logging purpose
func (*Logger) FmtError
func (logger *Logger) FmtError(vals ...interface{}) string
FmtError Formats given strings and returns it for logging purpose
func (*Logger) FmtFatal
func (logger *Logger) FmtFatal(vals ...interface{}) string
FmtFatal Formats given strings and returns it for logging purpose
func (*Logger) FmtInfo
func (logger *Logger) FmtInfo(vals ...interface{}) string
FmtInfo Formats given strings and returns it for logging purpose
func (*Logger) FmtNetwork
func (logger *Logger) FmtNetwork(vals ...interface{}) string
FmtNetwork Formats given strings and returns it for logging purpose
func (*Logger) FmtNotice
func (logger *Logger) FmtNotice(vals ...interface{}) string
FmtNotice Formats given strings and returns it for logging purpose
func (*Logger) FmtSys
func (logger *Logger) FmtSys(vals ...interface{}) string
FmtSys Formats given strings and returns it for logging purpose
func (*Logger) FmtVerbose
func (logger *Logger) FmtVerbose(vals ...interface{}) string
FmtVerbose Formats given strings and returns it for logging purpose
func (*Logger) FmtWarn
func (logger *Logger) FmtWarn(vals ...interface{}) string
FmtWarn Formats given strings and returns it for logging purpose
func (*Logger) Info
func (logger *Logger) Info(vals ...interface{})
Info Outputs a log to stdout stream
func (*Logger) Infof
func (logger *Logger) Infof(vals ...interface{})
Infof outputs formatted logging.
This is useful when you need to format the logging message.
Important
FormattedText supports JSON format log output as well.
func (*Logger) Network
func (logger *Logger) Network(vals ...interface{})
Network Outputs a log to stdout stream
func (*Logger) Networkf
func (logger *Logger) Networkf(vals ...interface{})
Networkf outputs formatted logging.
This is useful when you need to format the logging message.
Important
FormattedText supports JSON format log output as well.
func (*Logger) Notice
func (logger *Logger) Notice(vals ...interface{})
Notice Outputs a log to stdout stream
func (*Logger) Noticef
func (logger *Logger) Noticef(vals ...interface{})
Noticef outputs formatted logging.
This is useful when you need to format the logging message.
Important
FormattedText supports JSON format log output as well.
func (*Logger) Sys
func (logger *Logger) Sys(vals ...interface{})
Sys Outputs a log to stdout stream
func (*Logger) Sysf
func (logger *Logger) Sysf(vals ...interface{})
Sysf outputs formatted logging.
This is useful when you need to format the logging message.
Important
FormattedText supports JSON format log output as well.
func (*Logger) Trace
func (logger *Logger) Trace(vals ...interface{})
Trace Outputs a log to stdout stream as Sys level log with stack trace. Useful for debugging
func (*Logger) Verbose
func (logger *Logger) Verbose(vals ...interface{})
Verbose Outputs a log to stdout stream
func (*Logger) Verbosef
func (logger *Logger) Verbosef(vals ...interface{})
Verbosef outputs formatted logging.
This is useful when you need to format the logging message.
Important
FormattedText supports JSON format log output as well.
func (*Logger) Warn
func (logger *Logger) Warn(vals ...interface{})
Warn Outputs a log to stdout stream
func (*Logger) Warnf
func (logger *Logger) Warnf(vals ...interface{})
Warnf outputs formatted logging.
This is useful when you need to format the logging message.
Important
FormattedText supports JSON format log output as well.
func (*Logger) Write
func (logger *Logger) Write(vals ...interface{})
Write outputs a log to stdout stream
type SafeArg
type SafeArg struct { }
SafeArg sentinel that tells the logger it is safe to log the value.
One positive feature of using SafeArg compared to using fmt.Sprintf is the formatting is lazy and will be executed only and only if the value is logged.
func AsSafeArg
func AsSafeArg(a ...any) *SafeArg
AsSafeArg return a SafeArg wrapping the value a. This is the same as using fmt.Sprint(a).
func AsSafeArgf
func AsSafeArgf(format string, a ...any) *SafeArg
AsSafeArgf return a SafeArg wrapping the value a using the format format. This is the same as using fmt.Sprintf(format, a).
func (*SafeArg) String
func (s *SafeArg) String() string
String implements fmt.Stringer.
Directories
lib/colorize | |
lib/msg | |
lib/std |