You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

console.go 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Copyright 2014 The Gogs Authors. All rights reserved.
  2. // Copyright 2019 The Gitea Authors. All rights reserved.
  3. // Use of this source code is governed by a MIT-style
  4. // license that can be found in the LICENSE file.
  5. package log
  6. import (
  7. "encoding/json"
  8. "io"
  9. "os"
  10. )
  11. // CanColorStdout reports if we can color the Stdout
  12. // Although we could do terminal sniffing and the like - in reality
  13. // most tools on *nix are happy to display ansi colors.
  14. // We will terminal sniff on Windows in console_windows.go
  15. var CanColorStdout = true
  16. // CanColorStderr reports if we can color the Stderr
  17. var CanColorStderr = true
  18. type nopWriteCloser struct {
  19. w io.WriteCloser
  20. }
  21. func (n *nopWriteCloser) Write(p []byte) (int, error) {
  22. return n.w.Write(p)
  23. }
  24. func (n *nopWriteCloser) Close() error {
  25. return nil
  26. }
  27. // ConsoleLogger implements LoggerProvider and writes messages to terminal.
  28. type ConsoleLogger struct {
  29. WriterLogger
  30. Stderr bool `json:"stderr"`
  31. }
  32. // NewConsoleLogger create ConsoleLogger returning as LoggerProvider.
  33. func NewConsoleLogger() LoggerProvider {
  34. log := &ConsoleLogger{}
  35. log.NewWriterLogger(&nopWriteCloser{
  36. w: os.Stdout,
  37. })
  38. return log
  39. }
  40. // Init inits connection writer with json config.
  41. // json config only need key "level".
  42. func (log *ConsoleLogger) Init(config string) error {
  43. err := json.Unmarshal([]byte(config), log)
  44. if err != nil {
  45. return err
  46. }
  47. if log.Stderr {
  48. log.NewWriterLogger(&nopWriteCloser{
  49. w: os.Stderr,
  50. })
  51. } else {
  52. log.NewWriterLogger(log.out)
  53. }
  54. return nil
  55. }
  56. // Flush when log should be flushed
  57. func (log *ConsoleLogger) Flush() {
  58. }
  59. // ReleaseReopen causes the console logger to reconnect to os.Stdout
  60. func (log *ConsoleLogger) ReleaseReopen() error {
  61. if log.Stderr {
  62. log.NewWriterLogger(&nopWriteCloser{
  63. w: os.Stderr,
  64. })
  65. } else {
  66. log.NewWriterLogger(&nopWriteCloser{
  67. w: os.Stdout,
  68. })
  69. }
  70. return nil
  71. }
  72. // GetName returns the default name for this implementation
  73. func (log *ConsoleLogger) GetName() string {
  74. return "console"
  75. }
  76. func init() {
  77. Register("console", NewConsoleLogger)
  78. }