github.com/gogf/gf@v1.16.9/os/glog/glog_logger_chaining.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/gogf/gf.
     6  
     7  package glog
     8  
     9  import (
    10  	"context"
    11  	"github.com/gogf/gf/internal/intlog"
    12  	"io"
    13  
    14  	"github.com/gogf/gf/os/gfile"
    15  )
    16  
    17  // Ctx is a chaining function,
    18  // which sets the context for current logging.
    19  func (l *Logger) Ctx(ctx context.Context, keys ...interface{}) *Logger {
    20  	if ctx == nil {
    21  		return l
    22  	}
    23  	logger := (*Logger)(nil)
    24  	if l.parent == nil {
    25  		logger = l.Clone()
    26  	} else {
    27  		logger = l
    28  	}
    29  	logger.ctx = ctx
    30  	if len(keys) > 0 {
    31  		logger.SetCtxKeys(keys...)
    32  	}
    33  	return logger
    34  }
    35  
    36  // To is a chaining function,
    37  // which redirects current logging content output to the specified `writer`.
    38  func (l *Logger) To(writer io.Writer) *Logger {
    39  	logger := (*Logger)(nil)
    40  	if l.parent == nil {
    41  		logger = l.Clone()
    42  	} else {
    43  		logger = l
    44  	}
    45  	logger.SetWriter(writer)
    46  	return logger
    47  }
    48  
    49  // Path is a chaining function,
    50  // which sets the directory path to `path` for current logging content output.
    51  //
    52  // Note that the parameter `path` is a directory path, not a file path.
    53  func (l *Logger) Path(path string) *Logger {
    54  	logger := (*Logger)(nil)
    55  	if l.parent == nil {
    56  		logger = l.Clone()
    57  	} else {
    58  		logger = l
    59  	}
    60  	if path != "" {
    61  		if err := logger.SetPath(path); err != nil {
    62  			// panic(err)
    63  			intlog.Error(l.getCtx(), err)
    64  		}
    65  	}
    66  	return logger
    67  }
    68  
    69  // Cat is a chaining function,
    70  // which sets the category to `category` for current logging content output.
    71  // Param `category` can be hierarchical, eg: module/user.
    72  func (l *Logger) Cat(category string) *Logger {
    73  	logger := (*Logger)(nil)
    74  	if l.parent == nil {
    75  		logger = l.Clone()
    76  	} else {
    77  		logger = l
    78  	}
    79  	if logger.config.Path != "" {
    80  		if err := logger.SetPath(gfile.Join(logger.config.Path, category)); err != nil {
    81  			// panic(err)
    82  			intlog.Error(l.getCtx(), err)
    83  		}
    84  	}
    85  	return logger
    86  }
    87  
    88  // File is a chaining function,
    89  // which sets file name `pattern` for the current logging content output.
    90  func (l *Logger) File(file string) *Logger {
    91  	logger := (*Logger)(nil)
    92  	if l.parent == nil {
    93  		logger = l.Clone()
    94  	} else {
    95  		logger = l
    96  	}
    97  	logger.SetFile(file)
    98  	return logger
    99  }
   100  
   101  // Level is a chaining function,
   102  // which sets logging level for the current logging content output.
   103  func (l *Logger) Level(level int) *Logger {
   104  	logger := (*Logger)(nil)
   105  	if l.parent == nil {
   106  		logger = l.Clone()
   107  	} else {
   108  		logger = l
   109  	}
   110  	logger.SetLevel(level)
   111  	return logger
   112  }
   113  
   114  // LevelStr is a chaining function,
   115  // which sets logging level for the current logging content output using level string.
   116  func (l *Logger) LevelStr(levelStr string) *Logger {
   117  	logger := (*Logger)(nil)
   118  	if l.parent == nil {
   119  		logger = l.Clone()
   120  	} else {
   121  		logger = l
   122  	}
   123  	if err := logger.SetLevelStr(levelStr); err != nil {
   124  		// panic(err)
   125  		intlog.Error(l.getCtx(), err)
   126  	}
   127  	return logger
   128  }
   129  
   130  // Skip is a chaining function,
   131  // which sets stack skip for the current logging content output.
   132  // It also affects the caller file path checks when line number printing enabled.
   133  func (l *Logger) Skip(skip int) *Logger {
   134  	logger := (*Logger)(nil)
   135  	if l.parent == nil {
   136  		logger = l.Clone()
   137  	} else {
   138  		logger = l
   139  	}
   140  	logger.SetStackSkip(skip)
   141  	return logger
   142  }
   143  
   144  // Stack is a chaining function,
   145  // which sets stack options for the current logging content output .
   146  func (l *Logger) Stack(enabled bool, skip ...int) *Logger {
   147  	logger := (*Logger)(nil)
   148  	if l.parent == nil {
   149  		logger = l.Clone()
   150  	} else {
   151  		logger = l
   152  	}
   153  	logger.SetStack(enabled)
   154  	if len(skip) > 0 {
   155  		logger.SetStackSkip(skip[0])
   156  	}
   157  	return logger
   158  }
   159  
   160  // StackWithFilter is a chaining function,
   161  // which sets stack filter for the current logging content output .
   162  func (l *Logger) StackWithFilter(filter string) *Logger {
   163  	logger := (*Logger)(nil)
   164  	if l.parent == nil {
   165  		logger = l.Clone()
   166  	} else {
   167  		logger = l
   168  	}
   169  	logger.SetStack(true)
   170  	logger.SetStackFilter(filter)
   171  	return logger
   172  }
   173  
   174  // Stdout is a chaining function,
   175  // which enables/disables stdout for the current logging content output.
   176  // It's enabled in default.
   177  func (l *Logger) Stdout(enabled ...bool) *Logger {
   178  	logger := (*Logger)(nil)
   179  	if l.parent == nil {
   180  		logger = l.Clone()
   181  	} else {
   182  		logger = l
   183  	}
   184  	// stdout printing is enabled if `enabled` is not passed.
   185  	if len(enabled) > 0 && !enabled[0] {
   186  		logger.config.StdoutPrint = false
   187  	} else {
   188  		logger.config.StdoutPrint = true
   189  	}
   190  	return logger
   191  }
   192  
   193  // Header is a chaining function,
   194  // which enables/disables log header for the current logging content output.
   195  // It's enabled in default.
   196  func (l *Logger) Header(enabled ...bool) *Logger {
   197  	logger := (*Logger)(nil)
   198  	if l.parent == nil {
   199  		logger = l.Clone()
   200  	} else {
   201  		logger = l
   202  	}
   203  	// header is enabled if `enabled` is not passed.
   204  	if len(enabled) > 0 && !enabled[0] {
   205  		logger.SetHeaderPrint(false)
   206  	} else {
   207  		logger.SetHeaderPrint(true)
   208  	}
   209  	return logger
   210  }
   211  
   212  // Line is a chaining function,
   213  // which enables/disables printing its caller file path along with its line number.
   214  // The parameter `long` specified whether print the long absolute file path, eg: /a/b/c/d.go:23,
   215  // or else short one: d.go:23.
   216  func (l *Logger) Line(long ...bool) *Logger {
   217  	logger := (*Logger)(nil)
   218  	if l.parent == nil {
   219  		logger = l.Clone()
   220  	} else {
   221  		logger = l
   222  	}
   223  	if len(long) > 0 && long[0] {
   224  		logger.config.Flags |= F_FILE_LONG
   225  	} else {
   226  		logger.config.Flags |= F_FILE_SHORT
   227  	}
   228  	return logger
   229  }
   230  
   231  // Async is a chaining function,
   232  // which enables/disables async logging output feature.
   233  func (l *Logger) Async(enabled ...bool) *Logger {
   234  	logger := (*Logger)(nil)
   235  	if l.parent == nil {
   236  		logger = l.Clone()
   237  	} else {
   238  		logger = l
   239  	}
   240  	// async feature is enabled if `enabled` is not passed.
   241  	if len(enabled) > 0 && !enabled[0] {
   242  		logger.SetAsync(false)
   243  	} else {
   244  		logger.SetAsync(true)
   245  	}
   246  	return logger
   247  }