diff options
author | Ian Cottrell <iancottrell@google.com> | 2015-06-10 13:44:31 +0100 |
---|---|---|
committer | Ian Cottrell <iancottrell@google.com> | 2015-06-10 13:45:56 +0100 |
commit | 98e11f1397fb6563c633c99a1415bafefdb7c615 (patch) | |
tree | ea7069ec8c76b5ea5a7184850b60041d180a76d6 /log | |
parent | 975715e93453e56dd6c321b2d6fa8a5b1a70041e (diff) | |
download | gpu-98e11f1397fb6563c633c99a1415bafefdb7c615.tar.gz |
Add general Writer logger, and use it for Std and File loggersgradle_1.3.1gradle_1.3.0-beta4gradle_1.3.0-beta3studio-1.3-releasestudio-1.3-dev
Change-Id: I6a14112c8e4e3875897c16b9518a81bcccc9a985
Diffstat (limited to 'log')
-rw-r--r-- | log/std.go | 48 | ||||
-rw-r--r-- | log/writer.go (renamed from log/file.go) | 59 |
2 files changed, 47 insertions, 60 deletions
diff --git a/log/std.go b/log/std.go deleted file mode 100644 index d7cb4feb0..000000000 --- a/log/std.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2015 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package log - -import ( - "os" -) - -// Std returns a Logger that writes to stdout and stderr. -func Std() Logger { - out := make(chan interface{}, 64) - go func() { - for t := range out { - switch t := t.(type) { - case Entry: - if t.Kind == Error { - os.Stderr.WriteString(t.String()) - } else { - os.Stdout.WriteString(t.String()) - } - - case FlushRequest: - os.Stderr.Sync() - os.Stdout.Sync() - close(t) - } - } - }() - nextUid := uint32(1) - return &channel{ - uid: 0, - nextUid: &nextUid, - scope: "", - out: out, - } -} diff --git a/log/file.go b/log/writer.go index 001eaac52..8615004e4 100644 --- a/log/file.go +++ b/log/writer.go @@ -15,28 +15,47 @@ package log import ( + "io" "os" "path/filepath" ) -// File creates a new Logger that will write messages to the specified file path. -// If a file exists at the specified path, then this file will be overwritten. -func File(path string) (Logger, error) { - os.MkdirAll(filepath.Dir(path), 0755) - file, err := os.Create(path) - if err != nil { - return nil, err +type syncer interface { + Sync() error +} + +func doSync(w io.Writer) { + if w != nil { + if s, ok := w.(syncer); ok { + s.Sync() + } } +} + +// Writer returns a Logger that writes to the supplied streams. +func Writer(info, warn, err io.Writer, done func()) Logger { out := make(chan interface{}, 64) go func() { - defer file.Close() + if done != nil { + defer done() + } for t := range out { switch t := t.(type) { case Entry: - file.WriteString(t.String()) - + switch t.Kind { + case Info: + io.WriteString(info, t.String()) + case Warning: + io.WriteString(warn, t.String()) + case Error: + io.WriteString(err, t.String()) + default: + io.WriteString(info, t.String()) + } case FlushRequest: - file.Sync() + doSync(info) + doSync(warn) + doSync(err) close(t) } } @@ -47,5 +66,21 @@ func File(path string) (Logger, error) { nextUid: &nextUid, scope: "", out: out, - }, nil + } +} + +// File creates a new Logger that will write messages to the specified file path. +// If a file exists at the specified path, then this file will be overwritten. +func File(path string) (Logger, error) { + os.MkdirAll(filepath.Dir(path), 0755) + file, err := os.Create(path) + if err != nil { + return nil, err + } + return Writer(file, file, file, func() { file.Close() }), nil +} + +// Std returns a Logger that writes to stdout and stderr. +func Std() Logger { + return Writer(os.Stdout, os.Stdout, os.Stderr, nil) } |