Trace2 config settings are only read from the system and global
config files; repository local and worktree config files and `-c`
command line arguments are not respected.

trace2.normalTarget::
	This variable controls the normal target destination.
	It may be overridden by the `GIT_TRACE2` environment variable.
	The following table shows possible values.

trace2.perfTarget::
	This variable controls the performance target destination.
	It may be overridden by the `GIT_TRACE2_PERF` environment variable.
	The following table shows possible values.

trace2.eventTarget::
	This variable controls the event target destination.
	It may be overridden by the `GIT_TRACE2_EVENT` environment variable.
	The following table shows possible values.
+
include::../trace2-target-values.adoc[]

trace2.normalBrief::
	Boolean.  When true `time`, `filename`, and `line` fields are
	omitted from normal output.  May be overridden by the
	`GIT_TRACE2_BRIEF` environment variable.  Defaults to false.

trace2.perfBrief::
	Boolean.  When true `time`, `filename`, and `line` fields are
	omitted from PERF output.  May be overridden by the
	`GIT_TRACE2_PERF_BRIEF` environment variable.  Defaults to false.

trace2.eventBrief::
	Boolean.  When true `time`, `filename`, and `line` fields are
	omitted from event output.  May be overridden by the
	`GIT_TRACE2_EVENT_BRIEF` environment variable.  Defaults to false.

trace2.eventNesting::
	Integer.  Specifies desired depth of nested regions in the
	event output.  Regions deeper than this value will be
	omitted.  May be overridden by the `GIT_TRACE2_EVENT_NESTING`
	environment variable.  Defaults to 2.

trace2.configParams::
	A comma-separated list of patterns of "important" config
	settings that should be recorded in the trace2 output.
	For example, `core.*,remote.*.url` would cause the trace2
	output to contain events listing each configured remote.
	May be overridden by the `GIT_TRACE2_CONFIG_PARAMS` environment
	variable.  Unset by default.

trace2.envVars::
	A comma-separated list of "important" environment variables that should
	be recorded in the trace2 output.  For example,
	`GIT_HTTP_USER_AGENT,GIT_CONFIG` would cause the trace2 output to
	contain events listing the overrides for HTTP user agent and the
	location of the Git configuration file (assuming any are set).  May be
	overridden by the `GIT_TRACE2_ENV_VARS` environment variable.  Unset by
	default.

trace2.destinationDebug::
	Boolean.  When true Git will print error messages when a
	trace target destination cannot be opened for writing.
	By default, these errors are suppressed and tracing is
	silently disabled.  May be overridden by the
	`GIT_TRACE2_DST_DEBUG` environment variable.

trace2.maxFiles::
	Integer.  When writing trace files to a target directory, do not
	write additional traces if doing so would exceed this many files. Instead,
	write a sentinel file that will block further tracing to this
	directory. Defaults to 0, which disables this check.
