<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="logging_v2.html">Cloud Logging API</a> . <a href="logging_v2.entries.html">entries</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists log entries. Use this method to retrieve log entries that originated from a project/folder/organization/billing account. For ways to export log entries, see Exporting Logs (https://cloud.google.com/logging/docs/export).</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#write">write(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Writes log entries to Logging. This API method is the only way to send log entries to Logging. This method is used, directly or indirectly, by the Logging agent (fluentd) and all logging libraries configured to use Logging. A single request may contain log entries for a maximum of 1000 different resources (projects, organizations, billing accounts or folders)</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(body=None, x__xgafv=None)</code>
  <pre>Lists log entries. Use this method to retrieve log entries that originated from a project/folder/organization/billing account. For ways to export log entries, see Exporting Logs (https://cloud.google.com/logging/docs/export).

Args:
  body: object, The request body.
    The object takes the form of:

{ # The parameters to ListLogEntries.
    &quot;pageToken&quot;: &quot;A String&quot;, # Optional. If present, then retrieve the next batch of results from the preceding call to this method. page_token must be the value of next_page_token from the previous response. The values of other method parameters should be identical to those in the previous call.
    &quot;filter&quot;: &quot;A String&quot;, # Optional. A filter that chooses which log entries to return. See Advanced Logs Queries (https://cloud.google.com/logging/docs/view/advanced-queries). Only log entries that match the filter are returned. An empty filter matches all log entries in the resources listed in resource_names. Referencing a parent resource that is not listed in resource_names will cause the filter to return no results. The maximum length of the filter is 20000 characters.
    &quot;resourceNames&quot;: [ # Required. Names of one or more parent resources from which to retrieve log entries:
        # &quot;projects/[PROJECT_ID]&quot;
        # &quot;organizations/[ORGANIZATION_ID]&quot;
        # &quot;billingAccounts/[BILLING_ACCOUNT_ID]&quot;
        # &quot;folders/[FOLDER_ID]&quot;
        # Projects listed in the project_ids field are added to this list.
      &quot;A String&quot;,
    ],
    &quot;pageSize&quot;: 42, # Optional. The maximum number of results to return from this request. Default is 50. If the value is negative or exceeds 1000, the request is rejected. The presence of next_page_token in the response indicates that more results might be available.
    &quot;projectIds&quot;: [ # Optional. Deprecated. Use resource_names instead. One or more project identifiers or project numbers from which to retrieve log entries. Example: &quot;my-project-1A&quot;.
      &quot;A String&quot;,
    ],
    &quot;orderBy&quot;: &quot;A String&quot;, # Optional. How the results should be sorted. Presently, the only permitted values are &quot;timestamp asc&quot; (default) and &quot;timestamp desc&quot;. The first option returns entries in order of increasing values of LogEntry.timestamp (oldest first), and the second option returns entries in order of decreasing timestamps (newest first). Entries with equal timestamps are returned in order of their insert_id values.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Result returned from ListLogEntries.
    &quot;entries&quot;: [ # A list of log entries. If entries is empty, nextPageToken may still be returned, indicating that more entries may exist. See nextPageToken for more information.
      { # An individual entry in a log.
        &quot;sourceLocation&quot;: { # Additional information about the source code location that produced the log entry. # Optional. Source code location information associated with the log entry, if any.
          &quot;function&quot;: &quot;A String&quot;, # Optional. Human-readable name of the function or method being invoked, with optional context such as the class or package name. This information may be used in contexts such as the logs viewer, where a file and line number are less meaningful. The format can vary by language. For example: qual.if.ied.Class.method (Java), dir/package.func (Go), function (Python).
          &quot;line&quot;: &quot;A String&quot;, # Optional. Line within the source file. 1-based; 0 indicates no line number available.
          &quot;file&quot;: &quot;A String&quot;, # Optional. Source file name. Depending on the runtime environment, this might be a simple name or a fully-qualified name.
        },
        &quot;resource&quot;: { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The type field identifies a MonitoredResourceDescriptor object that describes the resource&#x27;s schema. Information in the labels field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for &quot;gce_instance&quot; has labels &quot;instance_id&quot; and &quot;zone&quot;: # Required. The monitored resource that produced this log entry.Example: a log entry that reports a database error would be associated with the monitored resource designating the particular database that reported the error.
            # { &quot;type&quot;: &quot;gce_instance&quot;,
            #   &quot;labels&quot;: { &quot;instance_id&quot;: &quot;12345678901234&quot;,
            #               &quot;zone&quot;: &quot;us-central1-a&quot; }}
          &quot;labels&quot;: { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels &quot;project_id&quot;, &quot;instance_id&quot;, and &quot;zone&quot;.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;type&quot;: &quot;A String&quot;, # Required. The monitored resource type. This field must match the type field of a MonitoredResourceDescriptor object. For example, the type of a Compute Engine VM instance is gce_instance.
        },
        &quot;spanId&quot;: &quot;A String&quot;, # Optional. The span ID within the trace associated with the log entry.For Trace spans, this is the same format that the Trace API v2 uses: a 16-character hexadecimal encoding of an 8-byte array, such as 000000000000004a.
        &quot;insertId&quot;: &quot;A String&quot;, # Optional. A unique identifier for the log entry. If you provide a value, then Logging considers other log entries in the same project, with the same timestamp, and with the same insert_id to be duplicates which are removed in a single query result. However, there are no guarantees of de-duplication in the export of logs.If the insert_id is omitted when writing a log entry, the Logging API  assigns its own unique identifier in this field.In queries, the insert_id is also used to order log entries that have the same log_name and timestamp values.
        &quot;operation&quot;: { # Additional information about a potentially long-running operation with which a log entry is associated. # Optional. Information about an operation associated with the log entry, if applicable.
          &quot;producer&quot;: &quot;A String&quot;, # Optional. An arbitrary producer identifier. The combination of id and producer must be globally unique. Examples for producer: &quot;MyDivision.MyBigCompany.com&quot;, &quot;github.com/MyProject/MyApplication&quot;.
          &quot;last&quot;: True or False, # Optional. Set this to True if this is the last log entry in the operation.
          &quot;id&quot;: &quot;A String&quot;, # Optional. An arbitrary operation identifier. Log entries with the same identifier are assumed to be part of the same operation.
          &quot;first&quot;: True or False, # Optional. Set this to True if this is the first log entry in the operation.
        },
        &quot;textPayload&quot;: &quot;A String&quot;, # The log entry payload, represented as a Unicode string (UTF-8).
        &quot;metadata&quot;: { # Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message. # Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the LogEntry.
          &quot;systemLabels&quot;: { # Output only. Values for predefined system metadata labels. System labels are a kind of metadata extracted by Google, including &quot;machine_image&quot;, &quot;vpc&quot;, &quot;subnet_id&quot;, &quot;security_group&quot;, &quot;name&quot;, etc. System label values can be only strings, Boolean values, or a list of strings. For example:
              # { &quot;name&quot;: &quot;my-test-instance&quot;,
              #   &quot;security_group&quot;: [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;],
              #   &quot;spot_instance&quot;: false }
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
          },
          &quot;userLabels&quot;: { # Output only. A map of user-defined metadata labels.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
        &quot;logName&quot;: &quot;A String&quot;, # Required. The resource name of the log to which this log entry belongs:
            # &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot;
            # &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot;
            # &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot;
            # &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot;
            # A project number may be used in place of PROJECT_ID. The project number is translated to its corresponding PROJECT_ID internally and the log_name field will contain PROJECT_ID in queries and exports.[LOG_ID] must be URL-encoded within log_name. Example: &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. [LOG_ID] must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters, forward-slash, underscore, hyphen, and period.For backward compatibility, if log_name begins with a forward-slash, such as /projects/..., then the log entry is ingested as usual but the forward-slash is removed. Listing the log entry will not show the leading slash and filtering for a log name with a leading slash will never return any results.
        &quot;timestamp&quot;: &quot;A String&quot;, # Optional. The time the event described by the log entry occurred. This time is used to compute the log entry&#x27;s age and to enforce the logs retention period. If this field is omitted in a new log entry, then Logging assigns it the current time. Timestamps have nanosecond accuracy, but trailing zeros in the fractional seconds might be omitted when the timestamp is displayed.Incoming log entries must have timestamps that don&#x27;t exceed the logs retention period (https://cloud.google.com/logging/quotas#logs_retention_periods) in the past, and that don&#x27;t exceed 24 hours in the future. Log entries outside those time boundaries aren&#x27;t ingested by Logging.
        &quot;httpRequest&quot;: { # A common proto for logging HTTP requests. Only contains semantics defined by the HTTP specification. Product-specific logging information MUST be defined in a separate message. # Optional. Information about the HTTP request associated with this log entry, if applicable.
          &quot;requestSize&quot;: &quot;A String&quot;, # The size of the HTTP request message in bytes, including the request headers and the request body.
          &quot;remoteIp&quot;: &quot;A String&quot;, # The IP address (IPv4 or IPv6) of the client that issued the HTTP request. Examples: &quot;192.168.1.1&quot;, &quot;FE80::0202:B3FF:FE1E:8329&quot;.
          &quot;serverIp&quot;: &quot;A String&quot;, # The IP address (IPv4 or IPv6) of the origin server that the request was sent to.
          &quot;latency&quot;: &quot;A String&quot;, # The request processing latency on the server, from the time the request was received until the response was sent.
          &quot;cacheHit&quot;: True or False, # Whether or not an entity was served from cache (with or without validation).
          &quot;cacheLookup&quot;: True or False, # Whether or not a cache lookup was attempted.
          &quot;status&quot;: 42, # The response code indicating the status of response. Examples: 200, 404.
          &quot;protocol&quot;: &quot;A String&quot;, # Protocol used for the request. Examples: &quot;HTTP/1.1&quot;, &quot;HTTP/2&quot;, &quot;websocket&quot;
          &quot;cacheFillBytes&quot;: &quot;A String&quot;, # The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.
          &quot;requestMethod&quot;: &quot;A String&quot;, # The request method. Examples: &quot;GET&quot;, &quot;HEAD&quot;, &quot;PUT&quot;, &quot;POST&quot;.
          &quot;requestUrl&quot;: &quot;A String&quot;, # The scheme (http, https), the host name, the path and the query portion of the URL that was requested. Example: &quot;http://example.com/some/info?color=red&quot;.
          &quot;userAgent&quot;: &quot;A String&quot;, # The user agent sent by the client. Example: &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET
              # CLR 1.0.3705)&quot;.
          &quot;referer&quot;: &quot;A String&quot;, # The referer URL of the request, as defined in HTTP/1.1 Header Field Definitions (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
          &quot;cacheValidatedWithOriginServer&quot;: True or False, # Whether or not the response was validated with the origin server before being served from cache. This field is only meaningful if cache_hit is True.
          &quot;responseSize&quot;: &quot;A String&quot;, # The size of the HTTP response message sent back to the client, in bytes, including the response headers and the response body.
        },
        &quot;traceSampled&quot;: True or False, # Optional. The sampling decision of the trace associated with the log entry.True means that the trace resource name in the trace field was sampled for storage in a trace backend. False means that the trace was not sampled for storage when this log entry was written, or the sampling decision was unknown at the time. A non-sampled trace value is still useful as a request correlation identifier. The default is False.
        &quot;jsonPayload&quot;: { # The log entry payload, represented as a structure that is expressed as a JSON object.
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
        },
        &quot;severity&quot;: &quot;A String&quot;, # Optional. The severity of the log entry. The default value is LogSeverity.DEFAULT.
        &quot;receiveTimestamp&quot;: &quot;A String&quot;, # Output only. The time the log entry was received by Logging.
        &quot;labels&quot;: { # Optional. A set of user-defined (key, value) data that provides additional information about the log entry.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;protoPayload&quot;: { # The log entry payload, represented as a protocol buffer. Some Google Cloud Platform services use this field for their log entry payloads.The following protocol buffer types are supported; user-defined types are not supported:&quot;type.googleapis.com/google.cloud.audit.AuditLog&quot;  &quot;type.googleapis.com/google.appengine.logging.v1.RequestLog&quot;
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
        &quot;trace&quot;: &quot;A String&quot;, # Optional. Resource name of the trace associated with the log entry, if any. If it contains a relative resource name, the name is assumed to be relative to //tracing.googleapis.com. Example: projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If there might be more results than those appearing in this response, then nextPageToken is included. To get the next set of results, call this method again using the value of nextPageToken as pageToken.If a value for next_page_token appears and the entries field is empty, it means that the search found no log entries so far but it did not have time to search all the possible log entries. Retry the method with this value for page_token to continue the search. Alternatively, consider speeding up the search by changing your filter to specify a single log name or resource type, or to narrow the time range of the search.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="write">write(body=None, x__xgafv=None)</code>
  <pre>Writes log entries to Logging. This API method is the only way to send log entries to Logging. This method is used, directly or indirectly, by the Logging agent (fluentd) and all logging libraries configured to use Logging. A single request may contain log entries for a maximum of 1000 different resources (projects, organizations, billing accounts or folders)

Args:
  body: object, The request body.
    The object takes the form of:

{ # The parameters to WriteLogEntries.
    &quot;logName&quot;: &quot;A String&quot;, # Optional. A default log resource name that is assigned to all log entries in entries that do not specify a value for log_name:
        # &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot;
        # &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot;
        # &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot;
        # &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot;
        # [LOG_ID] must be URL-encoded. For example:
        # &quot;projects/my-project-id/logs/syslog&quot;
        # &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;
        # The permission logging.logEntries.create is needed on each project, organization, billing account, or folder that is receiving new log entries, whether the resource is specified in logName or in an individual log entry.
    &quot;labels&quot;: { # Optional. Default labels that are added to the labels field of all log entries in entries. If a log entry already has a label with the same key as a label in this parameter, then the log entry&#x27;s label is not changed. See LogEntry.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;resource&quot;: { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The type field identifies a MonitoredResourceDescriptor object that describes the resource&#x27;s schema. Information in the labels field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for &quot;gce_instance&quot; has labels &quot;instance_id&quot; and &quot;zone&quot;: # Optional. A default monitored resource object that is assigned to all log entries in entries that do not specify a value for resource. Example:
        # { &quot;type&quot;: &quot;gce_instance&quot;,
        #   &quot;labels&quot;: {
        #     &quot;zone&quot;: &quot;us-central1-a&quot;, &quot;instance_id&quot;: &quot;00000000000000000000&quot; }}
        # See LogEntry.
        # { &quot;type&quot;: &quot;gce_instance&quot;,
        #   &quot;labels&quot;: { &quot;instance_id&quot;: &quot;12345678901234&quot;,
        #               &quot;zone&quot;: &quot;us-central1-a&quot; }}
      &quot;labels&quot;: { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels &quot;project_id&quot;, &quot;instance_id&quot;, and &quot;zone&quot;.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;type&quot;: &quot;A String&quot;, # Required. The monitored resource type. This field must match the type field of a MonitoredResourceDescriptor object. For example, the type of a Compute Engine VM instance is gce_instance.
    },
    &quot;entries&quot;: [ # Required. The log entries to send to Logging. The order of log entries in this list does not matter. Values supplied in this method&#x27;s log_name, resource, and labels fields are copied into those log entries in this list that do not include values for their corresponding fields. For more information, see the LogEntry type.If the timestamp or insert_id fields are missing in log entries, then this method supplies the current time or a unique identifier, respectively. The supplied values are chosen so that, among the log entries that did not supply their own values, the entries earlier in the list will sort before the entries later in the list. See the entries.list method.Log entries with timestamps that are more than the logs retention period (https://cloud.google.com/logging/quota-policy) in the past or more than 24 hours in the future will not be available when calling entries.list. However, those log entries can still be exported with LogSinks (https://cloud.google.com/logging/docs/api/tasks/exporting-logs).To improve throughput and to avoid exceeding the quota limit (https://cloud.google.com/logging/quota-policy) for calls to entries.write, you should try to include several log entries in this list, rather than calling this method for each individual log entry.
      { # An individual entry in a log.
        &quot;sourceLocation&quot;: { # Additional information about the source code location that produced the log entry. # Optional. Source code location information associated with the log entry, if any.
          &quot;function&quot;: &quot;A String&quot;, # Optional. Human-readable name of the function or method being invoked, with optional context such as the class or package name. This information may be used in contexts such as the logs viewer, where a file and line number are less meaningful. The format can vary by language. For example: qual.if.ied.Class.method (Java), dir/package.func (Go), function (Python).
          &quot;line&quot;: &quot;A String&quot;, # Optional. Line within the source file. 1-based; 0 indicates no line number available.
          &quot;file&quot;: &quot;A String&quot;, # Optional. Source file name. Depending on the runtime environment, this might be a simple name or a fully-qualified name.
        },
        &quot;resource&quot;: { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The type field identifies a MonitoredResourceDescriptor object that describes the resource&#x27;s schema. Information in the labels field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for &quot;gce_instance&quot; has labels &quot;instance_id&quot; and &quot;zone&quot;: # Required. The monitored resource that produced this log entry.Example: a log entry that reports a database error would be associated with the monitored resource designating the particular database that reported the error.
            # { &quot;type&quot;: &quot;gce_instance&quot;,
            #   &quot;labels&quot;: { &quot;instance_id&quot;: &quot;12345678901234&quot;,
            #               &quot;zone&quot;: &quot;us-central1-a&quot; }}
          &quot;labels&quot;: { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels &quot;project_id&quot;, &quot;instance_id&quot;, and &quot;zone&quot;.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;type&quot;: &quot;A String&quot;, # Required. The monitored resource type. This field must match the type field of a MonitoredResourceDescriptor object. For example, the type of a Compute Engine VM instance is gce_instance.
        },
        &quot;spanId&quot;: &quot;A String&quot;, # Optional. The span ID within the trace associated with the log entry.For Trace spans, this is the same format that the Trace API v2 uses: a 16-character hexadecimal encoding of an 8-byte array, such as 000000000000004a.
        &quot;insertId&quot;: &quot;A String&quot;, # Optional. A unique identifier for the log entry. If you provide a value, then Logging considers other log entries in the same project, with the same timestamp, and with the same insert_id to be duplicates which are removed in a single query result. However, there are no guarantees of de-duplication in the export of logs.If the insert_id is omitted when writing a log entry, the Logging API  assigns its own unique identifier in this field.In queries, the insert_id is also used to order log entries that have the same log_name and timestamp values.
        &quot;operation&quot;: { # Additional information about a potentially long-running operation with which a log entry is associated. # Optional. Information about an operation associated with the log entry, if applicable.
          &quot;producer&quot;: &quot;A String&quot;, # Optional. An arbitrary producer identifier. The combination of id and producer must be globally unique. Examples for producer: &quot;MyDivision.MyBigCompany.com&quot;, &quot;github.com/MyProject/MyApplication&quot;.
          &quot;last&quot;: True or False, # Optional. Set this to True if this is the last log entry in the operation.
          &quot;id&quot;: &quot;A String&quot;, # Optional. An arbitrary operation identifier. Log entries with the same identifier are assumed to be part of the same operation.
          &quot;first&quot;: True or False, # Optional. Set this to True if this is the first log entry in the operation.
        },
        &quot;textPayload&quot;: &quot;A String&quot;, # The log entry payload, represented as a Unicode string (UTF-8).
        &quot;metadata&quot;: { # Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message. # Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the LogEntry.
          &quot;systemLabels&quot;: { # Output only. Values for predefined system metadata labels. System labels are a kind of metadata extracted by Google, including &quot;machine_image&quot;, &quot;vpc&quot;, &quot;subnet_id&quot;, &quot;security_group&quot;, &quot;name&quot;, etc. System label values can be only strings, Boolean values, or a list of strings. For example:
              # { &quot;name&quot;: &quot;my-test-instance&quot;,
              #   &quot;security_group&quot;: [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;],
              #   &quot;spot_instance&quot;: false }
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
          },
          &quot;userLabels&quot;: { # Output only. A map of user-defined metadata labels.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
        &quot;logName&quot;: &quot;A String&quot;, # Required. The resource name of the log to which this log entry belongs:
            # &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot;
            # &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot;
            # &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot;
            # &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot;
            # A project number may be used in place of PROJECT_ID. The project number is translated to its corresponding PROJECT_ID internally and the log_name field will contain PROJECT_ID in queries and exports.[LOG_ID] must be URL-encoded within log_name. Example: &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. [LOG_ID] must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters, forward-slash, underscore, hyphen, and period.For backward compatibility, if log_name begins with a forward-slash, such as /projects/..., then the log entry is ingested as usual but the forward-slash is removed. Listing the log entry will not show the leading slash and filtering for a log name with a leading slash will never return any results.
        &quot;timestamp&quot;: &quot;A String&quot;, # Optional. The time the event described by the log entry occurred. This time is used to compute the log entry&#x27;s age and to enforce the logs retention period. If this field is omitted in a new log entry, then Logging assigns it the current time. Timestamps have nanosecond accuracy, but trailing zeros in the fractional seconds might be omitted when the timestamp is displayed.Incoming log entries must have timestamps that don&#x27;t exceed the logs retention period (https://cloud.google.com/logging/quotas#logs_retention_periods) in the past, and that don&#x27;t exceed 24 hours in the future. Log entries outside those time boundaries aren&#x27;t ingested by Logging.
        &quot;httpRequest&quot;: { # A common proto for logging HTTP requests. Only contains semantics defined by the HTTP specification. Product-specific logging information MUST be defined in a separate message. # Optional. Information about the HTTP request associated with this log entry, if applicable.
          &quot;requestSize&quot;: &quot;A String&quot;, # The size of the HTTP request message in bytes, including the request headers and the request body.
          &quot;remoteIp&quot;: &quot;A String&quot;, # The IP address (IPv4 or IPv6) of the client that issued the HTTP request. Examples: &quot;192.168.1.1&quot;, &quot;FE80::0202:B3FF:FE1E:8329&quot;.
          &quot;serverIp&quot;: &quot;A String&quot;, # The IP address (IPv4 or IPv6) of the origin server that the request was sent to.
          &quot;latency&quot;: &quot;A String&quot;, # The request processing latency on the server, from the time the request was received until the response was sent.
          &quot;cacheHit&quot;: True or False, # Whether or not an entity was served from cache (with or without validation).
          &quot;cacheLookup&quot;: True or False, # Whether or not a cache lookup was attempted.
          &quot;status&quot;: 42, # The response code indicating the status of response. Examples: 200, 404.
          &quot;protocol&quot;: &quot;A String&quot;, # Protocol used for the request. Examples: &quot;HTTP/1.1&quot;, &quot;HTTP/2&quot;, &quot;websocket&quot;
          &quot;cacheFillBytes&quot;: &quot;A String&quot;, # The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.
          &quot;requestMethod&quot;: &quot;A String&quot;, # The request method. Examples: &quot;GET&quot;, &quot;HEAD&quot;, &quot;PUT&quot;, &quot;POST&quot;.
          &quot;requestUrl&quot;: &quot;A String&quot;, # The scheme (http, https), the host name, the path and the query portion of the URL that was requested. Example: &quot;http://example.com/some/info?color=red&quot;.
          &quot;userAgent&quot;: &quot;A String&quot;, # The user agent sent by the client. Example: &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET
              # CLR 1.0.3705)&quot;.
          &quot;referer&quot;: &quot;A String&quot;, # The referer URL of the request, as defined in HTTP/1.1 Header Field Definitions (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
          &quot;cacheValidatedWithOriginServer&quot;: True or False, # Whether or not the response was validated with the origin server before being served from cache. This field is only meaningful if cache_hit is True.
          &quot;responseSize&quot;: &quot;A String&quot;, # The size of the HTTP response message sent back to the client, in bytes, including the response headers and the response body.
        },
        &quot;traceSampled&quot;: True or False, # Optional. The sampling decision of the trace associated with the log entry.True means that the trace resource name in the trace field was sampled for storage in a trace backend. False means that the trace was not sampled for storage when this log entry was written, or the sampling decision was unknown at the time. A non-sampled trace value is still useful as a request correlation identifier. The default is False.
        &quot;jsonPayload&quot;: { # The log entry payload, represented as a structure that is expressed as a JSON object.
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
        },
        &quot;severity&quot;: &quot;A String&quot;, # Optional. The severity of the log entry. The default value is LogSeverity.DEFAULT.
        &quot;receiveTimestamp&quot;: &quot;A String&quot;, # Output only. The time the log entry was received by Logging.
        &quot;labels&quot;: { # Optional. A set of user-defined (key, value) data that provides additional information about the log entry.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;protoPayload&quot;: { # The log entry payload, represented as a protocol buffer. Some Google Cloud Platform services use this field for their log entry payloads.The following protocol buffer types are supported; user-defined types are not supported:&quot;type.googleapis.com/google.cloud.audit.AuditLog&quot;  &quot;type.googleapis.com/google.appengine.logging.v1.RequestLog&quot;
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
        &quot;trace&quot;: &quot;A String&quot;, # Optional. Resource name of the trace associated with the log entry, if any. If it contains a relative resource name, the name is assumed to be relative to //tracing.googleapis.com. Example: projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824
      },
    ],
    &quot;partialSuccess&quot;: True or False, # Optional. Whether valid entries should be written even if some other entries fail due to INVALID_ARGUMENT or PERMISSION_DENIED errors. If any entry is not written, then the response status is the error associated with one of the failed entries and the response includes error details keyed by the entries&#x27; zero-based index in the entries.write method.
    &quot;dryRun&quot;: True or False, # Optional. If true, the request should expect normal response, but the entries won&#x27;t be persisted nor exported. Useful for checking whether the logging API endpoints are working properly before sending valuable data.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Result returned from WriteLogEntries.
  }</pre>
</div>

</body></html>