| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.logger; |
| |
| using zx; |
| |
| enum LogLevelFilter : int8 { |
| NONE = -1; |
| INFO = 0; |
| WARN = 1; |
| ERROR = 2; |
| FATAL = 3; |
| }; |
| |
| /// Max number of tags that can be passed to filter by listener. |
| const uint8 MAX_TAGS = 5; |
| |
| /// Max tag length that can be passed to filter by listener. |
| const uint8 MAX_TAG_LEN_BYTES = 63; |
| |
| struct LogFilterOptions { |
| bool filter_by_pid; |
| uint64 pid; |
| |
| bool filter_by_tid; |
| uint64 tid; |
| |
| /// If more than zero, logs would be filtered based on verbosity and |
| /// `min_severity` would be ignored. |
| uint8 verbosity; |
| |
| LogLevelFilter min_severity; |
| |
| /// If non-empty, return all messages which contain at least one specified |
| /// tag. If empty, messages will not be filtered by tag. |
| /// Passed tags should not be more than `MAX_TAG_LEN_BYTES` bytes in length |
| /// and max tags can be `MAX_TAGS`. |
| /// Listener would be discarded if the limit is not followed. |
| vector<string:MAX_TAG_LEN_BYTES>:MAX_TAGS tags; |
| }; |
| |
| /// Max tags that will be attached to a LogMessage. |
| const uint8 MAX_TAGS_PER_LOG_MESSAGE = 5; |
| |
| /// Max byte size for message payload. |
| const uint32 MAX_DATAGRAM_LEN_BYTES = 2032; |
| |
| struct LogMessage { |
| uint64 pid; |
| uint64 tid; |
| /// https://fuchsia.dev/fuchsia-src/reference/syscalls/clock_get_monotonic.md |
| zx.time time; |
| int32 severity; |
| |
| /// See //zircon/system/ulib/syslog/include/syslog/wire_format.h. As messages |
| /// can be served out of order, this should only be logged if more than last |
| /// count. |
| uint32 dropped_logs; |
| vector<string:MAX_TAG_LEN_BYTES>:MAX_TAGS_PER_LOG_MESSAGE tags; |
| string:MAX_DATAGRAM_LEN_BYTES msg; |
| }; |
| |
| /// Interface for LogListenerSafe to register to listen to logs. |
| [Discoverable] |
| protocol Log { |
| [Deprecated] |
| Listen(LogListener log_listener, LogFilterOptions? options); |
| |
| [Deprecated] |
| DumpLogs(LogListener log_listener, LogFilterOptions? options); |
| |
| /// Listens to new log entries by calling Log() on `log_listener`. A null `options` indicates no |
| /// filtering is requested. |
| [Transitional] |
| ListenSafe(LogListenerSafe log_listener, LogFilterOptions? options); |
| |
| /// Dumps all cached logs by calling LogMany() followed by Done() on `log_listener`. |
| /// A null `options` indicates no filtering is requested. |
| [Transitional] |
| DumpLogsSafe(LogListenerSafe log_listener, LogFilterOptions? options); |
| }; |
| |
| /// Drains a program's logs. |
| [Discoverable] |
| protocol LogSink { |
| /// Send this socket to be drained. |
| /// |
| /// See //zircon/system/ulib/syslog/include/syslog/wire_format.h for what is expected to be |
| /// received over the socket. |
| Connect(handle<socket> socket); |
| }; |
| |
| /// Max log bytes per call to a listener. |
| const uint64 MAX_LOG_MANY_SIZE_BYTES = 16384; |
| |
| /// Included temporarily for backwards compatiblity. Use `LogListenerSafe`. |
| [Deprecated] |
| protocol LogListener { |
| Log(LogMessage log); |
| LogMany(vector<LogMessage>:MAX log); |
| Done(); |
| }; |
| |
| /// A listener who will notify the `Log` of the receipt of each message. |
| protocol LogListenerSafe { |
| /// Called for single messages. |
| /// |
| /// The return value is used for flow control, and implementers should acknowledge receipt of |
| /// each message in order to continue receiving future messages. |
| Log(LogMessage log) -> (); |
| |
| /// Called when serving cached logs. |
| /// |
| /// Max logs size per call is `MAX_LOG_MANY_SIZE_BYTES` bytes. |
| /// |
| /// The return value is used for flow control, and implementers should acknowledge receipt of |
| /// each batch in order to continue receiving future messages. |
| LogMany(vector<LogMessage>:MAX log) -> (); |
| |
| /// Called when this listener was passed to `DumpLogsSafe()` and all cached logs have been sent. |
| Done(); |
| }; |