|
|
package main
//import "time"
import "os" import "github.com/romana/rlog"
func someRecursiveFunction(x int) { // The Trace log functions allow you to set a log level with a numeric
// level, which could be determined at run time. Here, we are tracing or
// logging the first few levels of the recursive function (to whatever
// levels was determined via the RLOG_TRACE_LEVEL variable), but after that
// will stop logging, even though the function itself may decend further.
rlog.Tracef(x, "We're %d levels down now...", x) if x < 10 { someRecursiveFunction(x + 1) } else { rlog.Infof("Reached end of recursion at level %d", x) } }
func main() { // Show different log levels
rlog.Info("Start of program") rlog.Info("rlog is controlled via environment variables.") rlog.Info("Try the following settings:") rlog.Info(" export RLOG_LOG_LEVEL=DEBUG") rlog.Info(" export RLOG_TRACE_LEVEL=5") rlog.Info(" export RLOG_CALLER_INFO=yes") rlog.Debug("You only see this if you did 'export RLOG_LOG_LEVEL=DEBUG'") rlog.Infof("Format %s are possible %d", "strings", 123) rlog.Warn("Warning level log message") rlog.Error("Error level log message") rlog.Critical("Critical level log message")
// Example of how to change settings programmatically from within
// the running program: Modify your own environment variables.
// Note that if the config file specifies the value with a '!' then
// this value cannot be changed by modifying the environment variable.
rlog.Debug("You can't see this if the log level is higher than DEBUG.") os.Setenv("RLOG_LOG_LEVEL", "DEBUG") rlog.UpdateEnv() rlog.Debug("You can see this message, because we changed level to DEBUG.")
// Example of selective trace logging
rlog.Trace(1, "Trace messages have their own numeric levels") rlog.Trace(1, "To see them set RLOG_TRACE_LEVEL to the cut-off number") someRecursiveFunction(1)
// Example of redirecting log output to a new file at runtime
newLogFile, err := os.OpenFile("/tmp/rlog-output.log", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777) if err == nil { rlog.Info("About to change log output. Check /tmp/rlog-output.log...") rlog.SetOutput(newLogFile) rlog.Info("This should go to the new logfile") }
// Now redirecting it back to stderr. Any additional file logging will be
// closed with this call.
rlog.SetOutput(os.Stderr)
rlog.Info("Back to stderr")
// To test out changing the log configuration of a running process, set the
// RLOG_CONF_FILE environment variable to an absolute path for a
// configuration file that you can create and edit. Also, you might want to
// set RLOG_CONF_CHECK_INTERVAL to a smaller number, so you don't have to
// wait 15 seconds every time you change a setting.
// Then uncomment the loop below (and the 'time' import at the top) and run
// the example program.
/* rlog.SetConfFile("some-other-rlog.conf")
for { time.Sleep(time.Second * 1) rlog.Debug("A debug log message") rlog.Info("An info log message") } */ }
|