vendor: revendor
This commit is contained in:
60
vendor/k8s.io/klog/klog.go
generated
vendored
60
vendor/k8s.io/klog/klog.go
generated
vendored
@@ -78,6 +78,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
stdLog "log"
|
||||
"math"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
@@ -410,10 +411,14 @@ func InitFlags(flagset *flag.FlagSet) {
|
||||
}
|
||||
flagset.StringVar(&logging.logDir, "log_dir", "", "If non-empty, write log files in this directory")
|
||||
flagset.StringVar(&logging.logFile, "log_file", "", "If non-empty, use this log file")
|
||||
flagset.BoolVar(&logging.toStderr, "logtostderr", false, "log to standard error instead of files")
|
||||
flagset.Uint64Var(&logging.logFileMaxSizeMB, "log_file_max_size", 1800,
|
||||
"Defines the maximum size a log file can grow to. Unit is megabytes. "+
|
||||
"If the value is 0, the maximum file size is unlimited.")
|
||||
flagset.BoolVar(&logging.toStderr, "logtostderr", true, "log to standard error instead of files")
|
||||
flagset.BoolVar(&logging.alsoToStderr, "alsologtostderr", false, "log to standard error as well as files")
|
||||
flagset.Var(&logging.verbosity, "v", "log level for V logs")
|
||||
flagset.Var(&logging.verbosity, "v", "number for the log level verbosity")
|
||||
flagset.BoolVar(&logging.skipHeaders, "skip_headers", false, "If true, avoid header prefixes in the log messages")
|
||||
flagset.BoolVar(&logging.skipLogHeaders, "skip_log_headers", false, "If true, avoid headers when openning log files")
|
||||
flagset.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr")
|
||||
flagset.Var(&logging.vmodule, "vmodule", "comma-separated list of pattern=N settings for file-filtered logging")
|
||||
flagset.Var(&logging.traceLocation, "log_backtrace_at", "when logging hits line file:N, emit a stack trace")
|
||||
@@ -471,8 +476,15 @@ type loggingT struct {
|
||||
// with the log-dir option.
|
||||
logFile string
|
||||
|
||||
// When logFile is specified, this limiter makes sure the logFile won't exceeds a certain size. When exceeds, the
|
||||
// logFile will be cleaned up. If this value is 0, no size limitation will be applied to logFile.
|
||||
logFileMaxSizeMB uint64
|
||||
|
||||
// If true, do not add the prefix headers, useful when used with SetOutput
|
||||
skipHeaders bool
|
||||
|
||||
// If true, do not add the headers to log files
|
||||
skipLogHeaders bool
|
||||
}
|
||||
|
||||
// buffer holds a byte Buffer for reuse. The zero value is ready for use.
|
||||
@@ -861,18 +873,33 @@ func (l *loggingT) exit(err error) {
|
||||
type syncBuffer struct {
|
||||
logger *loggingT
|
||||
*bufio.Writer
|
||||
file *os.File
|
||||
sev severity
|
||||
nbytes uint64 // The number of bytes written to this file
|
||||
file *os.File
|
||||
sev severity
|
||||
nbytes uint64 // The number of bytes written to this file
|
||||
maxbytes uint64 // The max number of bytes this syncBuffer.file can hold before cleaning up.
|
||||
}
|
||||
|
||||
func (sb *syncBuffer) Sync() error {
|
||||
return sb.file.Sync()
|
||||
}
|
||||
|
||||
// CalculateMaxSize returns the real max size in bytes after considering the default max size and the flag options.
|
||||
func CalculateMaxSize() uint64 {
|
||||
if logging.logFile != "" {
|
||||
if logging.logFileMaxSizeMB == 0 {
|
||||
// If logFileMaxSizeMB is zero, we don't have limitations on the log size.
|
||||
return math.MaxUint64
|
||||
}
|
||||
// Flag logFileMaxSizeMB is in MB for user convenience.
|
||||
return logging.logFileMaxSizeMB * 1024 * 1024
|
||||
}
|
||||
// If "log_file" flag is not specified, the target file (sb.file) will be cleaned up when reaches a fixed size.
|
||||
return MaxSize
|
||||
}
|
||||
|
||||
func (sb *syncBuffer) Write(p []byte) (n int, err error) {
|
||||
if sb.nbytes+uint64(len(p)) >= MaxSize {
|
||||
if err := sb.rotateFile(time.Now()); err != nil {
|
||||
if sb.nbytes+uint64(len(p)) >= sb.maxbytes {
|
||||
if err := sb.rotateFile(time.Now(), false); err != nil {
|
||||
sb.logger.exit(err)
|
||||
}
|
||||
}
|
||||
@@ -885,13 +912,15 @@ func (sb *syncBuffer) Write(p []byte) (n int, err error) {
|
||||
}
|
||||
|
||||
// rotateFile closes the syncBuffer's file and starts a new one.
|
||||
func (sb *syncBuffer) rotateFile(now time.Time) error {
|
||||
// The startup argument indicates whether this is the initial startup of klog.
|
||||
// If startup is true, existing files are opened for appending instead of truncated.
|
||||
func (sb *syncBuffer) rotateFile(now time.Time, startup bool) error {
|
||||
if sb.file != nil {
|
||||
sb.Flush()
|
||||
sb.file.Close()
|
||||
}
|
||||
var err error
|
||||
sb.file, _, err = create(severityName[sb.sev], now)
|
||||
sb.file, _, err = create(severityName[sb.sev], now, startup)
|
||||
sb.nbytes = 0
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -899,6 +928,10 @@ func (sb *syncBuffer) rotateFile(now time.Time) error {
|
||||
|
||||
sb.Writer = bufio.NewWriterSize(sb.file, bufferSize)
|
||||
|
||||
if sb.logger.skipLogHeaders {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Write header.
|
||||
var buf bytes.Buffer
|
||||
fmt.Fprintf(&buf, "Log file created at: %s\n", now.Format("2006/01/02 15:04:05"))
|
||||
@@ -923,10 +956,11 @@ func (l *loggingT) createFiles(sev severity) error {
|
||||
// has already been created, we can stop.
|
||||
for s := sev; s >= infoLog && l.file[s] == nil; s-- {
|
||||
sb := &syncBuffer{
|
||||
logger: l,
|
||||
sev: s,
|
||||
logger: l,
|
||||
sev: s,
|
||||
maxbytes: CalculateMaxSize(),
|
||||
}
|
||||
if err := sb.rotateFile(now); err != nil {
|
||||
if err := sb.rotateFile(now, true); err != nil {
|
||||
return err
|
||||
}
|
||||
l.file[s] = sb
|
||||
@@ -934,7 +968,7 @@ func (l *loggingT) createFiles(sev severity) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
const flushInterval = 30 * time.Second
|
||||
const flushInterval = 5 * time.Second
|
||||
|
||||
// flushDaemon periodically flushes the log file buffers.
|
||||
func (l *loggingT) flushDaemon() {
|
||||
|
||||
Reference in New Issue
Block a user