1// Copyright © 2016 Steve Francia <spf@spf13.com>.
2//
3// Use of this source code is governed by an MIT-style
4// license that can be found in the LICENSE file.
5
6package jwalterweatherman
7
8import (
9	"io"
10	"io/ioutil"
11	"log"
12	"os"
13)
14
15var (
16	TRACE    *log.Logger
17	DEBUG    *log.Logger
18	INFO     *log.Logger
19	WARN     *log.Logger
20	ERROR    *log.Logger
21	CRITICAL *log.Logger
22	FATAL    *log.Logger
23
24	LOG      *log.Logger
25	FEEDBACK *Feedback
26
27	defaultNotepad *Notepad
28)
29
30func reloadDefaultNotepad() {
31	TRACE = defaultNotepad.TRACE
32	DEBUG = defaultNotepad.DEBUG
33	INFO = defaultNotepad.INFO
34	WARN = defaultNotepad.WARN
35	ERROR = defaultNotepad.ERROR
36	CRITICAL = defaultNotepad.CRITICAL
37	FATAL = defaultNotepad.FATAL
38
39	LOG = defaultNotepad.LOG
40	FEEDBACK = defaultNotepad.FEEDBACK
41}
42
43func init() {
44	defaultNotepad = NewNotepad(LevelError, LevelWarn, os.Stdout, ioutil.Discard, "", log.Ldate|log.Ltime)
45	reloadDefaultNotepad()
46}
47
48// SetLogThreshold set the log threshold for the default notepad. Trace by default.
49func SetLogThreshold(threshold Threshold) {
50	defaultNotepad.SetLogThreshold(threshold)
51	reloadDefaultNotepad()
52}
53
54// SetLogOutput set the log output for the default notepad. Discarded by default.
55func SetLogOutput(handle io.Writer) {
56	defaultNotepad.SetLogOutput(handle)
57	reloadDefaultNotepad()
58}
59
60// SetStdoutThreshold set the standard output threshold for the default notepad.
61// Info by default.
62func SetStdoutThreshold(threshold Threshold) {
63	defaultNotepad.SetStdoutThreshold(threshold)
64	reloadDefaultNotepad()
65}
66
67// SetPrefix set the prefix for the default logger. Empty by default.
68func SetPrefix(prefix string) {
69	defaultNotepad.SetPrefix(prefix)
70	reloadDefaultNotepad()
71}
72
73// SetFlags set the flags for the default logger. "log.Ldate | log.Ltime" by default.
74func SetFlags(flags int) {
75	defaultNotepad.SetFlags(flags)
76	reloadDefaultNotepad()
77}
78
79// Level returns the current global log threshold.
80func LogThreshold() Threshold {
81	return defaultNotepad.logThreshold
82}
83
84// Level returns the current global output threshold.
85func StdoutThreshold() Threshold {
86	return defaultNotepad.stdoutThreshold
87}
88
89// GetStdoutThreshold returns the defined Treshold for the log logger.
90func GetLogThreshold() Threshold {
91	return defaultNotepad.GetLogThreshold()
92}
93
94// GetStdoutThreshold returns the Treshold for the stdout logger.
95func GetStdoutThreshold() Threshold {
96	return defaultNotepad.GetStdoutThreshold()
97}
98
99// LogCountForLevel returns the number of log invocations for a given threshold.
100func LogCountForLevel(l Threshold) uint64 {
101	return defaultNotepad.LogCountForLevel(l)
102}
103
104// LogCountForLevelsGreaterThanorEqualTo returns the number of log invocations
105// greater than or equal to a given threshold.
106func LogCountForLevelsGreaterThanorEqualTo(threshold Threshold) uint64 {
107	return defaultNotepad.LogCountForLevelsGreaterThanorEqualTo(threshold)
108}
109
110// ResetLogCounters resets the invocation counters for all levels.
111func ResetLogCounters() {
112	defaultNotepad.ResetLogCounters()
113}
114