github.com/pdfcpu/pdfcpu@v0.11.1/pkg/log/log.go (about)

     1  /*
     2  Copyright 2018 The pdfcpu Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8  	http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  // Package log provides a logging abstraction.
    18  package log
    19  
    20  import (
    21  	"log"
    22  	"os"
    23  )
    24  
    25  // Logger defines an interface for logging messages.
    26  type Logger interface {
    27  
    28  	// Printf logs a formatted string.
    29  	Printf(format string, args ...interface{})
    30  
    31  	// Println logs a line.
    32  	Println(args ...interface{})
    33  
    34  	// Fatalf is equivalent to Printf() followed by a program abort.
    35  	Fatalf(format string, args ...interface{})
    36  
    37  	// Fatalln is equivalent to Println() followed by a progam abort.
    38  	Fatalln(args ...interface{})
    39  }
    40  
    41  type logger struct {
    42  	log Logger
    43  }
    44  
    45  // pdfcpu's loggers.
    46  var (
    47  
    48  	// Horizontal loggers
    49  	Debug = &logger{}
    50  	Info  = &logger{}
    51  	Stats = &logger{}
    52  	Trace = &logger{}
    53  
    54  	// Vertical loggers
    55  	Parse    = &logger{}
    56  	Read     = &logger{}
    57  	Validate = &logger{}
    58  	Optimize = &logger{}
    59  	Write    = &logger{}
    60  	CLI      = &logger{}
    61  )
    62  
    63  // SetDebugLogger sets the debug logger.
    64  func SetDebugLogger(log Logger) {
    65  	Debug.log = log
    66  }
    67  
    68  // SetInfoLogger sets the info logger.
    69  func SetInfoLogger(log Logger) {
    70  	Info.log = log
    71  }
    72  
    73  // SetStatsLogger sets the stats logger.
    74  func SetStatsLogger(log Logger) {
    75  	Stats.log = log
    76  }
    77  
    78  // SetTraceLogger sets the trace logger.
    79  func SetTraceLogger(log Logger) {
    80  	Trace.log = log
    81  }
    82  
    83  // SetParseLogger sets the parse logger.
    84  func SetParseLogger(log Logger) {
    85  	Parse.log = log
    86  }
    87  
    88  // SetReadLogger sets the read logger.
    89  func SetReadLogger(log Logger) {
    90  	Read.log = log
    91  }
    92  
    93  // SetValidateLogger sets the validate logger.
    94  func SetValidateLogger(log Logger) {
    95  	Validate.log = log
    96  }
    97  
    98  // SetOptimizeLogger sets the optimize logger.
    99  func SetOptimizeLogger(log Logger) {
   100  	Optimize.log = log
   101  }
   102  
   103  // SetWriteLogger sets the write logger.
   104  func SetWriteLogger(log Logger) {
   105  	Write.log = log
   106  }
   107  
   108  // SetCLILogger sets the api logger.
   109  func SetCLILogger(log Logger) {
   110  	CLI.log = log
   111  }
   112  
   113  // SetDefaultDebugLogger sets the default debug logger.
   114  func SetDefaultDebugLogger() {
   115  	SetDebugLogger(log.New(os.Stderr, "DEBUG: ", log.Ldate|log.Ltime))
   116  }
   117  
   118  // SetDefaultInfoLogger sets the default info logger.
   119  func SetDefaultInfoLogger() {
   120  	SetInfoLogger(log.New(os.Stderr, " INFO: ", log.Ldate|log.Ltime))
   121  }
   122  
   123  // SetDefaultStatsLogger sets the default stats logger.
   124  func SetDefaultStatsLogger() {
   125  	SetStatsLogger(log.New(os.Stderr, "STATS: ", log.Ldate|log.Ltime))
   126  }
   127  
   128  // SetDefaultTraceLogger sets the default trace logger.
   129  func SetDefaultTraceLogger() {
   130  	SetTraceLogger(log.New(os.Stderr, "TRACE: ", log.Ldate|log.Ltime))
   131  }
   132  
   133  // SetDefaultParseLogger sets the default parse logger.
   134  func SetDefaultParseLogger() {
   135  	SetParseLogger(log.New(os.Stderr, "PARSE: ", log.Ldate|log.Ltime))
   136  }
   137  
   138  // SetDefaultReadLogger sets the default read logger.
   139  func SetDefaultReadLogger() {
   140  	SetReadLogger(log.New(os.Stderr, " READ: ", log.Ldate|log.Ltime))
   141  }
   142  
   143  // SetDefaultValidateLogger sets the default validate logger.
   144  func SetDefaultValidateLogger() {
   145  	SetValidateLogger(log.New(os.Stderr, "VALID: ", log.Ldate|log.Ltime))
   146  }
   147  
   148  // SetDefaultOptimizeLogger sets the default optimize logger.
   149  func SetDefaultOptimizeLogger() {
   150  	SetOptimizeLogger(log.New(os.Stderr, "  OPT: ", log.Ldate|log.Ltime))
   151  }
   152  
   153  // SetDefaultWriteLogger sets the default write logger.
   154  func SetDefaultWriteLogger() {
   155  	SetWriteLogger(log.New(os.Stderr, "WRITE: ", log.Ldate|log.Ltime))
   156  }
   157  
   158  // SetDefaultCLILogger sets the default cli logger.
   159  func SetDefaultCLILogger() {
   160  	SetCLILogger(log.New(os.Stdout, "", 0))
   161  }
   162  
   163  // SetDefaultLoggers sets all loggers to their default logger.
   164  func SetDefaultLoggers() {
   165  	SetDefaultDebugLogger()
   166  	SetDefaultInfoLogger()
   167  	SetDefaultStatsLogger()
   168  	SetDefaultTraceLogger()
   169  	SetDefaultParseLogger()
   170  	SetDefaultReadLogger()
   171  	SetDefaultValidateLogger()
   172  	SetDefaultOptimizeLogger()
   173  	SetDefaultWriteLogger()
   174  	SetDefaultCLILogger()
   175  }
   176  
   177  // DisableLoggers turns off all logging.
   178  func DisableLoggers() {
   179  	SetDebugLogger(nil)
   180  	SetInfoLogger(nil)
   181  	SetStatsLogger(nil)
   182  	SetTraceLogger(nil)
   183  	SetParseLogger(nil)
   184  	SetReadLogger(nil)
   185  	SetValidateLogger(nil)
   186  	SetOptimizeLogger(nil)
   187  	SetWriteLogger(nil)
   188  	SetCLILogger(nil)
   189  }
   190  
   191  // CLIEnabled returns true if the CLI Logger is enabled.
   192  func CLIEnabled() bool {
   193  	return CLI.log != nil
   194  }
   195  
   196  // DebugEnabled returns true if the Debug Logger is enabled.
   197  func DebugEnabled() bool {
   198  	return Debug.log != nil
   199  }
   200  
   201  // InfoEnabled returns true if the Info Logger is enabled.
   202  func InfoEnabled() bool {
   203  	return Info.log != nil
   204  }
   205  
   206  // OptimizeEnabled returns true if the Optimize Logger is enabled.
   207  func OptimizeEnabled() bool {
   208  	return Optimize.log != nil
   209  }
   210  
   211  // ParseEnabled returns true if the Parse Logger is enabled.
   212  func ParseEnabled() bool {
   213  	return Parse.log != nil
   214  }
   215  
   216  // ReadEnabled returns true if the Read Logger is enabled.
   217  func ReadEnabled() bool {
   218  	return Read.log != nil
   219  }
   220  
   221  // StatsEnabled returns true if the Read Logger is enabled.
   222  func StatsEnabled() bool {
   223  	return Stats.log != nil
   224  }
   225  
   226  // TraceEnabled returns true if the Trace Logger is enabled.
   227  func TraceEnabled() bool {
   228  	return Trace.log != nil
   229  }
   230  
   231  // ValidateEnabled returns true if the Validate Logger is enabled.
   232  func ValidateEnabled() bool {
   233  	return Validate.log != nil
   234  }
   235  
   236  // WriteEnabled returns true if the Write Logger is enabled.
   237  func WriteEnabled() bool {
   238  	return Write.log != nil
   239  }
   240  
   241  // Printf writes a formatted message to the log.
   242  func (l *logger) Printf(format string, args ...interface{}) {
   243  
   244  	if l.log == nil {
   245  		return
   246  	}
   247  
   248  	l.log.Printf(format, args...)
   249  }
   250  
   251  // Println writes a line to the log.
   252  func (l *logger) Println(args ...interface{}) {
   253  
   254  	if l.log == nil {
   255  		return
   256  	}
   257  
   258  	l.log.Println(args...)
   259  }
   260  
   261  // Fatalf is equivalent to Printf() followed by a program abort.
   262  func (l *logger) Fatalf(format string, args ...interface{}) {
   263  
   264  	if l.log == nil {
   265  		return
   266  	}
   267  
   268  	l.log.Fatalf(format, args...)
   269  }
   270  
   271  // Fatalf is equivalent to Println() followed by a program abort.
   272  func (l *logger) Fatalln(args ...interface{}) {
   273  
   274  	if l.log == nil {
   275  		return
   276  	}
   277  
   278  	l.log.Fatalln(args...)
   279  }