| <!-- Generated by zircon/scripts/update-docs-from-fidl, do not edit! --> | 
 | # zx_debuglog_read | 
 |  | 
 | ## Summary | 
 |  | 
 | Read a single log record from the kernel debuglog. | 
 |  | 
 | ## Declaration | 
 |  | 
 | ```c | 
 | #include <zircon/syscalls.h> | 
 |  | 
 | zx_status_t zx_debuglog_read(zx_handle_t handle, | 
 |                              uint32_t options, | 
 |                              void* buffer, | 
 |                              size_t buffer_size); | 
 | ``` | 
 |  | 
 | ## Description | 
 |  | 
 | `zx_debuglog_read()` attempts to read a single record from the kernel debug | 
 | log into the given *buffer* of size *buffer_size* bytes. | 
 |  | 
 | *options* must be set to `0`. | 
 |  | 
 | On success, a single record of type **zx_log_record_t** is written into | 
 | *buffer*. The length of the record in bytes is given in the syscall's | 
 | return value. | 
 |  | 
 | The returned record will have the following format: | 
 |  | 
 | ```c | 
 | typedef struct zx_log_record { | 
 |   uint64_t sequence; | 
 |   uint32_t unused; | 
 |   uint16_t datalen; | 
 |   uint8_t severity; | 
 |   uint8_t flags; | 
 |   zx_time_t timestamp; | 
 |   uint64_t pid; | 
 |   uint64_t tid; | 
 |   char data[]; | 
 | } zx_log_record_t; | 
 | ``` | 
 |  | 
 | The fields are defined as follows: | 
 |  | 
 | | Field       | Description                                                    | | 
 | | ----------- | -------------------------------------------------------------- | | 
 | | *sequence*  | The sequence number of this record. Each record's sequence     : | 
 | :             : number is 1 greater than the preceding records's. The sequence : | 
 | :             : starts with 0. Gaps in the sequence indidate dropped log       : | 
 | :             : records.                                                       : | 
 | | *datalen*   | Number of bytes of data in the *data* field.                   | | 
 | | *severity*  | Severity of this log message. Standard severity levels are     | | 
 | :             : defined in the header `zircon/syscalls/log.h`.                 : | 
 | | *flags*     | Extra flags associated with this message. Flags are defined in | | 
 | :             : the header `zircon/syscalls/log.h`.                            : | 
 | | *timestamp* | Timestamp describing when this record was first written.       | | 
 | | *pid*       | Koid of the process that wrote this log record, or             | | 
 | :             : **ZX_KOID_INVALID** if the record was generated by the kernel. : | 
 | | *tid*       | Koid of the thread that wrote this log record, or              | | 
 | :             : **ZX_KOID_INVALID** if the record was generated by the kernel. : | 
 | | *data*      | The log message, consisting of *datalen* bytes. The log        | | 
 | :             : message may contain embedded NUL characters, and is not        : | 
 | :             : guaranteed to be NUL-terminated.                               : | 
 |  | 
 | If *buffer_size* is smaller than the size of the log record, the first | 
 | *buffer_size* bytes of the record will be written to the buffer, and the rest | 
 | discarded. Callers should ensure that their input buffer is at least | 
 | **ZX_LOG_RECORD_MAX** bytes to avoid log records from being truncated. | 
 |  | 
 | ## Rights | 
 |  | 
 | *handle* must be of type **ZX_OBJ_TYPE_LOG** and have **ZX_RIGHT_READ**. | 
 |  | 
 | ## Return value | 
 |  | 
 | `zx_debuglog_read()` returns a non-negative value on success, indicating | 
 | the number of bytes written into *buffer*. On failure, a negative error value | 
 | is returned. | 
 |  | 
 | ## Errors | 
 |  | 
 | **ZX_ERR_ACCESS_DENIED**  *handle* does not have **ZX_RIGHT_READ**. | 
 |  | 
 | **ZX_ERR_BAD_HANDLE**  *handle* is not a valid handle. | 
 |  | 
 | **ZX_ERR_INVALID_ARGS**  An invalid value to *options* was given, or *buffer* | 
 | was an invalid pointer. | 
 |  | 
 | **ZX_ERR_SHOULD_WAIT**  The debuglog contained no records to read. | 
 |  | 
 | **ZX_ERR_WRONG_TYPE**  *handle* is not a debuglog handle. | 
 |  | 
 | ## See also | 
 |  | 
 |  - [`fuchsia.boot.ReadOnlyLog`](https://fuchsia.dev/reference/fidl/fuchsia.boot#ReadOnlyLog) | 
 |  | 
 |  - [`zx_debuglog_create()`] | 
 |  - [`zx_debuglog_write()`] | 
 |  | 
 | [`zx_debuglog_create()`]: debuglog_create.md | 
 | [`zx_debuglog_write()`]: debuglog_write.md | 
 |  |