// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package vlog implements a general-purpose logging system.  It is modeled on
// glog; the differences from glog are:
//
// - interfaces are used to allow for multiple implementations and instances.
//   In particular, application and runtime logging can be separated.
//   We also expect to stream log messages to external log collectors rather
//   to local storage.
// - the Warn family of methods are not provided; their main use
//   is to avoid the flush that's implicit in the Error routines
//   rather than any semantic difference between warnings and errors.
// - Info logging and Event logging is separated with the former expected
//   to be somewhat spammy and the latter to be used sparingly.
// - Event logging includes methods for unconditionally (i.e. regardless
//   of any command line options) logging the current goroutine's stack
//   or the stacks of all goroutines.
// - The use of interfaces and encapsulated state means that a single
//   function (V) can no longer be used for 'if guarded' and 'chained' logging.
//   That is:
//     if vlog.V(1) { ... } and vlog.V(1).Infof( ... )
//   become
//     if logger.V(1) { ... }  and logger.VI(1).Infof( ... )
//
// vlog also creates a global instance of the Logger (vlog.Log) and
// provides command line flags (see flags.go). Parsing of these flags is
// performed by calling one of ConfigureLibraryLoggerFromFlags or
// ConfigureLoggerFromFlags .
//
// The supported flags are:
//
//	-logtostderr=false
//		Logs are written to standard error instead of to files.
//	-alsologtostderr=false
//		Logs are written to standard error as well as to files.
//	-stderrthreshold=ERROR
//		Log events at or above this severity are logged to standard
//		error as well as to files.
//	-log_dir=""
//		Log files will be written to this directory instead of the
//		default temporary directory.
//
//	Other flags provide aids to debugging.
//
//	-log_backtrace_at=""
//		When set to a file and line number holding a logging statement,
//		such as
//			-log_backtrace_at=gopherflakes.go:234
//		a stack trace will be written to the Info log whenever execution
//		hits that statement. (Unlike with -vmodule, the ".go" must be
//		present.)
//	-v=0
//		Enable V-leveled logging at the specified level.
//	-vmodule=""
//		The syntax of the argument is a comma-separated list of pattern=N,
//		where pattern is a literal file name (minus the ".go" suffix) or
//		"glob" pattern and N is a V level. For instance,
//			-vmodule=gopher*=3
//		sets the V level to 3 in all Go files whose names begin "gopher".
//      -max_stack_buf_size=<size in bytes>
//		Set the max size (bytes) of the byte buffer to use for stack
//		traces. The default max is 4M; use powers of 2 since the
//		stack size will be grown exponentially until it exceeds the max.
//		A min of 128K is enforced and any attempts to reduce this will
//		be silently ignored.
//
package vlog
