MCPcopy
hub / github.com/kopia/kopia / setupLogFileBasedLogger

Method setupLogFileBasedLogger

internal/logfile/logfile.go:198–255  ·  view source on GitHub ↗
(now time.Time, subdir, suffix, logFileOverride string, maxFiles int, maxSizeMB float64, maxAge time.Duration)

Source from the content-addressed store, hash-verified

196}
197
198func (c *loggingFlags) setupLogFileBasedLogger(now time.Time, subdir, suffix, logFileOverride string, maxFiles int, maxSizeMB float64, maxAge time.Duration) zapcore.WriteSyncer {
199 var logFileName, symlinkName string
200
201 if logFileOverride != "" {
202 var err error
203
204 logFileName, err = filepath.Abs(logFileOverride)
205 if err != nil {
206 fmt.Fprintln(os.Stderr, "Unable to resolve logs path", err)
207 }
208 }
209
210 if logFileName == "" {
211 logBaseName := fmt.Sprintf("%v%v-%v-%v%v", logFileNamePrefix, now.Format("20060102-150405"), os.Getpid(), suffix, logFileNameSuffix)
212 logFileName = filepath.Join(c.logDir, subdir, logBaseName)
213 symlinkName = "latest.log"
214 }
215
216 logDir := filepath.Dir(logFileName)
217 logFileBaseName := filepath.Base(logFileName)
218
219 if err := os.MkdirAll(logDir, logsDirMode); err != nil {
220 fmt.Fprintln(os.Stderr, "Unable to create logs directory:", err)
221 }
222
223 if err := cachedir.WriteCacheMarker(logDir); err != nil {
224 fmt.Fprintf(os.Stderr, "Unable to create cache marker in log directory %q: %s", logDir, err)
225 }
226
227 sweepLogWG := &sync.WaitGroup{}
228 doSweep := func() {}
229
230 // do not scrub directory if custom log file has been provided.
231 if logFileOverride == "" && shouldSweepLog(maxFiles, maxAge) {
232 doSweep = func() {
233 sweepLogDir(context.TODO(), logDir, maxFiles, maxSizeMB, maxAge)
234 }
235 }
236
237 odf := &onDemandFile{
238 logDir: logDir,
239 logFileBaseName: logFileBaseName,
240 symlinkName: symlinkName,
241 maxSegmentSize: c.logFileMaxSegmentSize,
242 startSweep: func() { sweepLogWG.Go(doSweep) },
243 }
244
245 if c.waitForLogSweep {
246 // wait for log sweep at the end
247 c.cliApp.RegisterOnExit(odf.closeSegmentAndSweep)
248 c.cliApp.RegisterOnExit(sweepLogWG.Wait)
249 } else {
250 // old behavior: start log sweep in parallel to program but don't wait at the end.
251 odf.startSweep()
252 }
253
254 return odf
255}

Callers 2

initializeMethod · 0.95
setupLogFileCoreMethod · 0.95

Calls 6

WriteCacheMarkerFunction · 0.92
shouldSweepLogFunction · 0.85
sweepLogDirFunction · 0.85
RegisterOnExitMethod · 0.80
FormatMethod · 0.65
MkdirAllMethod · 0.65

Tested by

no test coverage detected