Defines core debug logging functions.

## Enums

### SbLogPriority

The priority at which a message should be logged. The platform may be configured
to filter logs by priority, or render them differently.

#### Values

- `kSbLogPriorityUnknown`
- `kSbLogPriorityInfo`
- `kSbLogPriorityWarning`
- `kSbLogPriorityError`
- `kSbLogPriorityFatal`

## Functions

### SbLog

Writes `message` to the platform's debug output log. This method is thread-safe,
and responsible for ensuring that the output from multiple threads is not mixed.

`priority`: The SbLogPriority at which the message should be logged. Note that
passing `kSbLogPriorityFatal` does not terminate the program. Such a policy must
be enforced at the application level. In fact, `priority` may be completely
ignored on many platforms. `message`: The message to be logged. Must not be
NULL. No formatting is required to be done on the value, including newline
termination. That said, platforms can adjust the message to be more suitable for
their output method by wrapping the text, stripping unprintable characters, etc.

#### Declaration

    void SbLog(SbLogPriority priority, const char *message)

### SbLogFlush

Flushes the log buffer on some platforms. This method is safe to call from
multiple threads.

#### Declaration

    void SbLogFlush()

### SbLogFormat

A log output method that additionally performs a string format on the data being
logged.

#### Declaration

    void SbLogFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1

### SbLogFormatF

Inline wrapper of SbLogFormat that converts from ellipsis to va_args.

#### Declaration

    void static void static void SbLogFormatF(const char *format,...) SB_PRINTF_FORMAT(1

### SbLogIsTty

Indicates whether the log output goes to a TTY or is being redirected.

#### Declaration

    bool SbLogIsTty()

### SbLogRaw

A bare-bones log output method that is async-signal-safe, i.e. safe to call from
an asynchronous signal handler (e.g. a `SIGSEGV` handler). It should not do any
additional formatting.

`message`: The message to be logged. Must not be NULL.

#### Declaration

    void SbLogRaw(const char *message)

### SbLogRawDumpStack

Dumps the stack of the current thread to the log in an async-signal-safe manner,
i.e. safe to call from an asynchronous signal handler (e.g. a `SIGSEGV`
handler). Does not include SbLogRawDumpStack itself.

`frames_to_skip`: The number of frames to skip from the top of the stack when
dumping the current thread to the log. This parameter lets you remove noise from
helper functions that might end up on top of every stack dump so that the stack
dump is just the relevant function stack where the problem occurred.

#### Declaration

    void SbLogRawDumpStack(int frames_to_skip)

### SbLogRawFormat

A formatted log output method that is async-signal-safe, i.e. safe to call from
an asynchronous signal handler (e.g. a `SIGSEGV` handler).

#### Declaration

    void SbLogRawFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1

### SbLogRawFormatF

Inline wrapper of SbLogFormat to convert from ellipsis to va_args.

#### Declaration

    void static void static void SbLogRawFormatF(const char *format,...) SB_PRINTF_FORMAT(1