code.gitea.io/gitea@v1.19.3/modules/log/console.go (about) 1 // Copyright 2014 The Gogs Authors. All rights reserved. 2 // Copyright 2019 The Gitea Authors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 5 package log 6 7 import ( 8 "fmt" 9 "io" 10 "os" 11 12 "code.gitea.io/gitea/modules/json" 13 ) 14 15 // CanColorStdout reports if we can color the Stdout 16 // Although we could do terminal sniffing and the like - in reality 17 // most tools on *nix are happy to display ansi colors. 18 // We will terminal sniff on Windows in console_windows.go 19 var CanColorStdout = true 20 21 // CanColorStderr reports if we can color the Stderr 22 var CanColorStderr = true 23 24 type nopWriteCloser struct { 25 w io.WriteCloser 26 } 27 28 func (n *nopWriteCloser) Write(p []byte) (int, error) { 29 return n.w.Write(p) 30 } 31 32 func (n *nopWriteCloser) Close() error { 33 return nil 34 } 35 36 // ConsoleLogger implements LoggerProvider and writes messages to terminal. 37 type ConsoleLogger struct { 38 WriterLogger 39 Stderr bool `json:"stderr"` 40 } 41 42 // NewConsoleLogger create ConsoleLogger returning as LoggerProvider. 43 func NewConsoleLogger() LoggerProvider { 44 log := &ConsoleLogger{} 45 log.NewWriterLogger(&nopWriteCloser{ 46 w: os.Stdout, 47 }) 48 return log 49 } 50 51 // Init inits connection writer with json config. 52 // json config only need key "level". 53 func (log *ConsoleLogger) Init(config string) error { 54 err := json.Unmarshal([]byte(config), log) 55 if err != nil { 56 return fmt.Errorf("Unable to parse JSON: %w", err) 57 } 58 if log.Stderr { 59 log.NewWriterLogger(&nopWriteCloser{ 60 w: os.Stderr, 61 }) 62 } else { 63 log.NewWriterLogger(log.out) 64 } 65 return nil 66 } 67 68 // Content returns the content accumulated in the content provider 69 func (log *ConsoleLogger) Content() (string, error) { 70 return "", fmt.Errorf("not supported") 71 } 72 73 // Flush when log should be flushed 74 func (log *ConsoleLogger) Flush() { 75 } 76 77 // ReleaseReopen causes the console logger to reconnect to os.Stdout 78 func (log *ConsoleLogger) ReleaseReopen() error { 79 if log.Stderr { 80 log.NewWriterLogger(&nopWriteCloser{ 81 w: os.Stderr, 82 }) 83 } else { 84 log.NewWriterLogger(&nopWriteCloser{ 85 w: os.Stdout, 86 }) 87 } 88 return nil 89 } 90 91 // GetName returns the default name for this implementation 92 func (log *ConsoleLogger) GetName() string { 93 return "console" 94 } 95 96 func init() { 97 Register("console", NewConsoleLogger) 98 }