Tizen_4.0 base
[platform/upstream/docker-engine.git] / vendor / github.com / coreos / pkg / capnslog / pkg_logger.go
1 // Copyright 2015 CoreOS, Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package capnslog
16
17 import (
18         "fmt"
19         "os"
20 )
21
22 type PackageLogger struct {
23         pkg   string
24         level LogLevel
25 }
26
27 const calldepth = 2
28
29 func (p *PackageLogger) internalLog(depth int, inLevel LogLevel, entries ...interface{}) {
30         logger.Lock()
31         defer logger.Unlock()
32         if inLevel != CRITICAL && p.level < inLevel {
33                 return
34         }
35         if logger.formatter != nil {
36                 logger.formatter.Format(p.pkg, inLevel, depth+1, entries...)
37         }
38 }
39
40 func (p *PackageLogger) LevelAt(l LogLevel) bool {
41         logger.Lock()
42         defer logger.Unlock()
43         return p.level >= l
44 }
45
46 // Log a formatted string at any level between ERROR and TRACE
47 func (p *PackageLogger) Logf(l LogLevel, format string, args ...interface{}) {
48         p.internalLog(calldepth, l, fmt.Sprintf(format, args...))
49 }
50
51 // Log a message at any level between ERROR and TRACE
52 func (p *PackageLogger) Log(l LogLevel, args ...interface{}) {
53         p.internalLog(calldepth, l, fmt.Sprint(args...))
54 }
55
56 // log stdlib compatibility
57
58 func (p *PackageLogger) Println(args ...interface{}) {
59         p.internalLog(calldepth, INFO, fmt.Sprintln(args...))
60 }
61
62 func (p *PackageLogger) Printf(format string, args ...interface{}) {
63         p.Logf(INFO, format, args...)
64 }
65
66 func (p *PackageLogger) Print(args ...interface{}) {
67         p.internalLog(calldepth, INFO, fmt.Sprint(args...))
68 }
69
70 // Panic and fatal
71
72 func (p *PackageLogger) Panicf(format string, args ...interface{}) {
73         s := fmt.Sprintf(format, args...)
74         p.internalLog(calldepth, CRITICAL, s)
75         panic(s)
76 }
77
78 func (p *PackageLogger) Panic(args ...interface{}) {
79         s := fmt.Sprint(args...)
80         p.internalLog(calldepth, CRITICAL, s)
81         panic(s)
82 }
83
84 func (p *PackageLogger) Fatalf(format string, args ...interface{}) {
85         p.Logf(CRITICAL, format, args...)
86         os.Exit(1)
87 }
88
89 func (p *PackageLogger) Fatal(args ...interface{}) {
90         s := fmt.Sprint(args...)
91         p.internalLog(calldepth, CRITICAL, s)
92         os.Exit(1)
93 }
94
95 func (p *PackageLogger) Fatalln(args ...interface{}) {
96         s := fmt.Sprintln(args...)
97         p.internalLog(calldepth, CRITICAL, s)
98         os.Exit(1)
99 }
100
101 // Error Functions
102
103 func (p *PackageLogger) Errorf(format string, args ...interface{}) {
104         p.Logf(ERROR, format, args...)
105 }
106
107 func (p *PackageLogger) Error(entries ...interface{}) {
108         p.internalLog(calldepth, ERROR, entries...)
109 }
110
111 // Warning Functions
112
113 func (p *PackageLogger) Warningf(format string, args ...interface{}) {
114         p.Logf(WARNING, format, args...)
115 }
116
117 func (p *PackageLogger) Warning(entries ...interface{}) {
118         p.internalLog(calldepth, WARNING, entries...)
119 }
120
121 // Notice Functions
122
123 func (p *PackageLogger) Noticef(format string, args ...interface{}) {
124         p.Logf(NOTICE, format, args...)
125 }
126
127 func (p *PackageLogger) Notice(entries ...interface{}) {
128         p.internalLog(calldepth, NOTICE, entries...)
129 }
130
131 // Info Functions
132
133 func (p *PackageLogger) Infof(format string, args ...interface{}) {
134         p.Logf(INFO, format, args...)
135 }
136
137 func (p *PackageLogger) Info(entries ...interface{}) {
138         p.internalLog(calldepth, INFO, entries...)
139 }
140
141 // Debug Functions
142
143 func (p *PackageLogger) Debugf(format string, args ...interface{}) {
144         if p.level < DEBUG {
145                 return
146         }
147         p.Logf(DEBUG, format, args...)
148 }
149
150 func (p *PackageLogger) Debug(entries ...interface{}) {
151         if p.level < DEBUG {
152                 return
153         }
154         p.internalLog(calldepth, DEBUG, entries...)
155 }
156
157 // Trace Functions
158
159 func (p *PackageLogger) Tracef(format string, args ...interface{}) {
160         if p.level < TRACE {
161                 return
162         }
163         p.Logf(TRACE, format, args...)
164 }
165
166 func (p *PackageLogger) Trace(entries ...interface{}) {
167         if p.level < TRACE {
168                 return
169         }
170         p.internalLog(calldepth, TRACE, entries...)
171 }
172
173 func (p *PackageLogger) Flush() {
174         logger.Lock()
175         defer logger.Unlock()
176         logger.formatter.Flush()
177 }