This adds command-line arguments, disables it by default on interface,
adds target logging, and can deal with variable numbers of fields.
It also adds some documentation.
This helps with log flooding. Successive repeated log messages will be skipped and counted,
the count will be output when a different message is logged.
A new option of 'keep_repeats' has been added to VIRCADIA_LOG_OPTIONS to disable this.
Set VIRCADIA_LOG_OPTIONS to a string containing these keywords:
color
milliseconds
process_id
thread_id
The separator doesn't matter. Example:
$ export VIRCADIA_LOG_OPTIONS="color milliseconds"
Not all uses of repeated log messages include NetworkLogging.h,
but if they use addRepeatedMessageRegex() they must include
LogHandler.h. Also add second macro for client-supplied
message ID.
This can happen when LogHandler::flushRepetedMessages is called on
the main thread, while the application is printing messages on
a separate thread. The access to the _lastRepeatedMessage QHash was
not guarded.
I've added two mutexes to guard access to both the repeatedMessage
hashes/regexes and the onlyOnceMessages/regexes. This will unfortunately
incur a performance hit for frequent debug logging, but that's better
then crashing.
Also, I've added the ability to print threadIDs as well as Process ids.
This is helpful when debugging multi-threaded access to shared variables.