aboutsummaryrefslogtreecommitdiff
path: root/log/logger.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2021-02-16 23:25:44 +0900
committerRyo Nihei <nihei.dev@gmail.com>2021-02-16 23:43:51 +0900
commit8dd5eb69380a19a9df7534c1660d1a1ba2091c83 (patch)
treeb2f7ea742734ea4f6c7da8ab69ad41ef5b95b429 /log/logger.go
parentAdd CLI (diff)
downloadtre-8dd5eb69380a19a9df7534c1660d1a1ba2091c83.tar.gz
tre-8dd5eb69380a19a9df7534c1660d1a1ba2091c83.tar.xz
Add logging to lex command
lex command writes logs out to the maleeni-lex.log file. When you generate a lexer using driver.NewLexer(), you can choose whether the lexer writes logs or not.
Diffstat (limited to 'log/logger.go')
-rw-r--r--log/logger.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/log/logger.go b/log/logger.go
new file mode 100644
index 0000000..770f1c1
--- /dev/null
+++ b/log/logger.go
@@ -0,0 +1,42 @@
+package log
+
+import (
+ "fmt"
+ "io"
+)
+
+type Logger interface {
+ Log(format string, a ...interface{})
+}
+
+var (
+ _ Logger = &logger{}
+ _ Logger = &nopLogger{}
+)
+
+type logger struct {
+ w io.Writer
+}
+
+func NewLogger(w io.Writer) (*logger, error) {
+ if w == nil {
+ return nil, fmt.Errorf("w is nil; NewLogger() needs a writer")
+ }
+ return &logger{
+ w: w,
+ }, nil
+}
+
+func (l *logger) Log(format string, a ...interface{}) {
+ fmt.Fprintf(l.w, format+"\n", a...)
+}
+
+type nopLogger struct {
+}
+
+func NewNopLogger() *nopLogger {
+ return &nopLogger{}
+}
+
+func (l *nopLogger) Log(format string, a ...interface{}) {
+}