Name

log — Access system wide log messages created by os_log, os_trace and other logging systems.

Synopsis

log [command [options]]

log help [command]

log collect [−-output path] [−-start date/time] [−-size num [k|m]] [−-last num [m|h|d]]

log config [−-reset −-status] [−-mode mode(s)] [−-subsystem name [−-category name]] [−-process pid]

log erase [−-all] [−-ttl]

log show [−-archive archive −-file file] [−-predicate filter] [−-source] [−-style json syslog compact] [−-color auto always none] [−-start date/time] [−-end date/time] [−-info] [−-debug] [−-last time [m|h|d]] [−-timezone local timezone]

log stats [−-archive archive] [−-sort events bytes] [−-count count all] [−-overview −-per-book −-per-file −-sender sender −-process process −-predicate predicate]

log stream [−-level default info debug] [−-process pid process] [−-predicate filter] [−-source] [−-style json syslog compact] [−-color auto always none] [−-timeout time [m|h|d]] [−-type activity log trace]

Description

log is used to access system wide log messages created by os_log, os_trace and other logging systems. Some commands require root privileges.

Available commands and their options:

help [command]

General help or help specific to command argument

collect

Collect the system logs into a .logarchive that can be viewed later with tools such as log or Console. If an output path is not specified, system_logs.logarchive will be created in the current directory.

−-output path

Save the archive to the specified path or file. If the path is a directory, a file named system_logs.logarchive will be created in the specified directory. If the path contains the extension .logarchive, a new logarchive will be created with that name at the specified path.

−-start date/time

Limits the content capture to the date and time forward to now. The following date/time formats are accepted: "YYYY-MM-DD", "YYYY-MM-DD HH:MM:SS", "YYYY-MM-DD HH:MM:SSZZZZZ"

−-last num [m|h|d]

Limits the captured events to the period starting at the given interval ago from the current time. Time is assumed in seconds unless specified. Example: "--last 2m" or "--last 3h"

−-size num [k|m]

The amount of data to be captured in kilobytes or megabytes. This is an approximation, as the actual size may be more than requested. Example: "--size 100k" or "--size 20m"

config

Configure, reset or read settings for the logging system. config commands can act system-wide or on a subsystem. If not specified, system-wide is assumed. If subsystem is specified, category is optional. Requires root access.

−-reset | −-status

Option to show or reset the current settings for the system or a specific subsystem. If reset or status is not specified, a change to the configuration is assumed. For example, "log config --reset --subsystem com.mycompany.mysubsystem" will reset the subsystem to its default settings. "log config --status" will show the current system-wide logging settings. "log config --mode "level: default"" will set the system log level to default.

−-subsystem name

Set or get mode for a specified subsystem.

−-category name

Set or get mode for a specified category. If category is supplied, subsystem is required.

−-process pid

Set mode for a specified pid.

−-mode mode(s)

Will enable given mode. Modes include:

level: {off | default | info | debug} The level is a hierarchy, e.g. debug implies debug, info, and default.

persist: {off | default | info | debug} The persist mode is a hierarchy, e.g. debug implies debug, info, and default.

erase

Delete selected log data from the system. If no arguments are specified, the main log datastore and inflight log data will be deleted.

−-all

Deletes main log datastore, and inflight log data as well as time-to-live data (TTL), and the fault and error content.

−-ttl

Deletes time-to-live log content.

show

Shows contents of the system log datastore, archive or a specific tracev3 file. If a file or archive is not specified, the system datastore will be shown. If it is from a future system version that log cannot understand, it exists with EX_DATAERR (65) and an error message. The output contains only default level messages unless --info and/or --debug are specified.

−-archive archive

Display events stored in the given archive. The archive must be a valid log archive bundle with the suffix .logarchive.

−-file file

Display events stored in the given .tracev3 file. In order to be decoded, the file must be contained within a valid .logarchive bundle, or part of the system logs directory.

−-predicate filter

Filters messages based on the provided predicate, based on NSPredicate. A compound predicate or multiple predicates can be provided. See section "PREDICATE-BASED FILTERING" below.

−-source

Include symbol names and source line numbers for messages, if available.

−-style json | syslog | compact

Output the content as a different style.

−-color auto | always | none

Highlight certain types of log messages. In auto, highlighting will be disabled if the output is detected to be non-TTY.

−-start date/time

Shows content starting from the provided date. The following date/time formats are accepted: "YYYY-MM-DD", "YYYY-MM-DD HH:MM:SS", "YYYY-MM-DD HH:MM:SSZZZZZ"

−-end date/time

Shows content up to the provided date. The following date/time formats are accepted: "YYYY-MM-DD", "YYYY-MM-DD HH:MM:SS", "YYYY-MM-DD HH:MM:SSZZZZZ"

−-last time[
m|h|d] | boot

Shows events that occurred within the given time relative to the end of the log archive, or beginning at the last boot contained within the log archive. Time may be specified as minutes, hours or days. Time is assumed in seconds unless specified. Example: "--last 2m" or "--last 3h"

−-timezone local | timezone

Displays content in the local timezone, or a specified timezone (see tzset(3)). If not specified, the output is displayed in the timezone at the time the entry was written to source archive or file.

−-info

Shows info level messages in the output.

−-debug

Shows debug level messages in the output.

stats

Shows a breakdown of the events contained within a log datastore or archive. The following options can be supplied to all modes of log stats:

−-archive archive

Display statistics for events stored in the given archive. The archive must be a valid log archive bundle with the suffix .logarchive.

−-sort events | bytes

Sort tabulated data output by number of events, or number of bytes.

−-count count | all

Limit tabulated data to the given number of lines, or all displays all entries in tables.

−-style human | json

Control the format style of the requested output mode.

In addition, one of the following output modes can be supplied:

−-overview

Displays statistics for the entire archive.

−-per-book

Displays statistics per log book, the subsections of a log archive.

−-per-file

Displays statistics per file in the archive.

−-sender sender

Displays statistics for a given sender image name.

−-process process

Displays statistics for a given originating process.

−-predicate predicate

Displays statistics for all events matching the given predicate.

stream

Stream activities, log data or trace messages for the system or from a given process. By default, the command assumes system-wide streaming. Specifying a process id with the --process option will narrow the results.

−-level default | info | debug

Shows messages at specified level and below. The level is a hierarchy. Specifying debug implies debug, info and default.

−-predicate filter

Filters messages using the provided predicate based on NSPredicate. A compound predicate or multiple predicates can be provided. See section "PREDICATE-BASED FILTERING" below.

−-process pid | process

The process on which to operate. This option can be passed more than once to operate on multiple processes.

−-style json | syslog | compact

Output the content as a different style.

−-color auto | always | none

Highlight certain types of log messages. In auto, highlighting will be disabled if the output is detected to be non-TTY.

−-source

Include symbol names and source line numbers for messages, if available.

−-timeout time [m|h|d]

Timeout the stream operation after a specified time, e.g. "--timeout 5m", "--timeout 1h" If minutes, hours, days not specified, seconds will be used.

−-type activity | log | trace

Dictates the type of events to stream from a process. By default all types are streamed unless otherwise specified. Pass an appropriate −-type for each requested type of event.

PREDICATE-BASED FILTERING

Using predicate-based filters via the −-predicate option allows users to focus on messages based on the provided filter criteria. For detailed information on the use of predicate based filtering, please refer to the Predicate Programming Guide:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html

The filter argument defines one or more pattern clauses following NSPredicate rules. Supported keys include:

eventType

The type of event: activityCreateEvent, activityTransitionEvent, logEvent, signpostEvent, stateEvent, timesyncEvent, traceEvent and userActionEvent.

eventMessage

The pattern within the message text, or activity name of a log/trace entry.

messageType

For logEvent and traceEvent, the type of the message itself: default, info, debug, error or fault.

process

The name of the process the originated the event.

processImagePath

The full path of the process that originated the event.

sender

The name of the library, framework, kernel extension, or mach-o image, that originated the event.

senderImagePath

The full path of the library, framework, kernel extension, or mach-o image, that originated the event.

subsystem

The subsystem used to log an event. Only works with log messages generated with os_log(3) APIs.

category

The category used to log an event. Only works with log messages generated with os_log(3) APIs. When category is used, the subsystem filter should also be provided.

PREDICATE-BASED FILTERING EXAMPLES

Filter for specific subsystem:
log show --predicate ’subsystem == "com.example.my_subsystem"’

Filter for specific subsystem and category:
log show --predicate ’(subsystem == "com.example.my_subsystem") && (category == "desired_category")’

Filter for specific subsystem and categories:
log show --predicate ’(subsystem == "com.example.my_subsystem") && (category IN { "category1", "category2" })’

Filter for a specific subsystem and sender(s):
log show --predicate ’(subsystem == "com.example.my_subsystem") && ((senderImagePath ENDSWITH "mybinary") || (senderImagePath ENDSWITH "myframework"))’

PREDICATE-BASED FILTERING EXAMPLES WITH LOG LINE

log show system_logs.logarchive --predicate ’subsystem == "com.example.subsystem" and category contains "CHECK"’

Timestamp Thread Type Activity PID
2016-06-13 11:46:37.248693-0700 0x7c393 Default 0x0 10371 timestamp: [com.example.subsystem.CHECKTIME] Time is 06/13/2016 11:46:37

log show --predicate ’processImagePath endswith "hidd" and senderImagePath contains[cd] "IOKit"’ --info

Timestamp Thread Type Activity PID
2016-06-10 13:54:34.593220-0700 0x250 Info 0x0 113 hidd: (IOKit) [com.apple.iohid.default] Loaded 6 HID plugins

Environment

There are various environment variables that can be used to control logging, activity flow, and other things.

OS_ACTIVITY_MODE <m>

Change the mode of launched processes to:

info

Enables info level messages. Does not override logging Preferences that have info level disabled.

debug

Enables debug level messages which includes info level messages. Does not override logging Preferences that have info level or debug level disabled.

OS_ACTIVITY_STREAM <m>

Change the type of streaming enabled.

live

Live streaming from the process using IPC.

OS_ACTIVITY_PROPAGATE_MODE

If set, will propagate the mode settings via activities.

See Also

os_log(3), os_trace(3)

Darwin May 10, 2016 Darwin