<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.exclusions.html">exclusions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an exclusion.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the description of an exclusion.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all the exclusions in a parent resource.</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="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Changes one or more properties of an existing exclusion.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.

Args:
  parent: string, Required. The parent resource in which to create the exclusion:
&quot;projects/[PROJECT_ID]&quot;
&quot;organizations/[ORGANIZATION_ID]&quot;
&quot;billingAccounts/[BILLING_ACCOUNT_ID]&quot;
&quot;folders/[FOLDER_ID]&quot;
Examples: &quot;projects/my-logging-project&quot;, &quot;organizations/123456789&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # Specifies a set of log entries that are not to be stored in Logging. If your GCP resource receives a large volume of logs, you can use exclusions to reduce your chargeable logs. Exclusions are processed after log sinks, so you can export log entries before they are excluded. Note that organization-level and folder-level exclusions don&#x27;t apply to child resources, and that you can&#x27;t exclude audit log entries.
  &quot;filter&quot;: &quot;A String&quot;, # Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries) that matches the log entries to be excluded. By using the sample function (https://cloud.google.com/logging/docs/view/advanced-queries#sample), you can exclude less than 100% of the matching log entries. For example, the following query matches 99% of low-severity log entries from Google Cloud Storage buckets:&quot;resource.type=gcs_bucket severity&lt;ERROR sample(insertId, 0.99)&quot;
  &quot;description&quot;: &quot;A String&quot;, # Optional. A description of this exclusion.
  &quot;disabled&quot;: True or False, # Optional. If set to True, then this exclusion is disabled and it does not exclude any log entries. You can update an exclusion to change the value of this field.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the exclusion.This field may not be present for older exclusions.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the exclusion.This field may not be present for older exclusions.
  &quot;name&quot;: &quot;A String&quot;, # Required. A client-assigned identifier, such as &quot;load-balancer-exclusion&quot;. Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods. First character has to be alphanumeric.
}

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

Returns:
  An object of the form:

    { # Specifies a set of log entries that are not to be stored in Logging. If your GCP resource receives a large volume of logs, you can use exclusions to reduce your chargeable logs. Exclusions are processed after log sinks, so you can export log entries before they are excluded. Note that organization-level and folder-level exclusions don&#x27;t apply to child resources, and that you can&#x27;t exclude audit log entries.
    &quot;filter&quot;: &quot;A String&quot;, # Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries) that matches the log entries to be excluded. By using the sample function (https://cloud.google.com/logging/docs/view/advanced-queries#sample), you can exclude less than 100% of the matching log entries. For example, the following query matches 99% of low-severity log entries from Google Cloud Storage buckets:&quot;resource.type=gcs_bucket severity&lt;ERROR sample(insertId, 0.99)&quot;
    &quot;description&quot;: &quot;A String&quot;, # Optional. A description of this exclusion.
    &quot;disabled&quot;: True or False, # Optional. If set to True, then this exclusion is disabled and it does not exclude any log entries. You can update an exclusion to change the value of this field.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the exclusion.This field may not be present for older exclusions.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the exclusion.This field may not be present for older exclusions.
    &quot;name&quot;: &quot;A String&quot;, # Required. A client-assigned identifier, such as &quot;load-balancer-exclusion&quot;. Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods. First character has to be alphanumeric.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes an exclusion.

Args:
  name: string, Required. The resource name of an existing exclusion to delete:
&quot;projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]&quot;
&quot;organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]&quot;
&quot;billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]&quot;
&quot;folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]&quot;
Example: &quot;projects/my-project-id/exclusions/my-exclusion-id&quot;. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance:
      # service Foo {
      #   rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      # }
      # The JSON representation for Empty is empty JSON object {}.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the description of an exclusion.

Args:
  name: string, Required. The resource name of an existing exclusion:
&quot;projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]&quot;
&quot;organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]&quot;
&quot;billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]&quot;
&quot;folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]&quot;
Example: &quot;projects/my-project-id/exclusions/my-exclusion-id&quot;. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Specifies a set of log entries that are not to be stored in Logging. If your GCP resource receives a large volume of logs, you can use exclusions to reduce your chargeable logs. Exclusions are processed after log sinks, so you can export log entries before they are excluded. Note that organization-level and folder-level exclusions don&#x27;t apply to child resources, and that you can&#x27;t exclude audit log entries.
    &quot;filter&quot;: &quot;A String&quot;, # Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries) that matches the log entries to be excluded. By using the sample function (https://cloud.google.com/logging/docs/view/advanced-queries#sample), you can exclude less than 100% of the matching log entries. For example, the following query matches 99% of low-severity log entries from Google Cloud Storage buckets:&quot;resource.type=gcs_bucket severity&lt;ERROR sample(insertId, 0.99)&quot;
    &quot;description&quot;: &quot;A String&quot;, # Optional. A description of this exclusion.
    &quot;disabled&quot;: True or False, # Optional. If set to True, then this exclusion is disabled and it does not exclude any log entries. You can update an exclusion to change the value of this field.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the exclusion.This field may not be present for older exclusions.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the exclusion.This field may not be present for older exclusions.
    &quot;name&quot;: &quot;A String&quot;, # Required. A client-assigned identifier, such as &quot;load-balancer-exclusion&quot;. Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods. First character has to be alphanumeric.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists all the exclusions in a parent resource.

Args:
  parent: string, Required. The parent resource whose exclusions are to be listed.
&quot;projects/[PROJECT_ID]&quot;
&quot;organizations/[ORGANIZATION_ID]&quot;
&quot;billingAccounts/[BILLING_ACCOUNT_ID]&quot;
&quot;folders/[FOLDER_ID]&quot;
 (required)
  pageToken: string, Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.
  pageSize: integer, Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.
  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 ListExclusions.
    &quot;exclusions&quot;: [ # A list of exclusions.
      { # Specifies a set of log entries that are not to be stored in Logging. If your GCP resource receives a large volume of logs, you can use exclusions to reduce your chargeable logs. Exclusions are processed after log sinks, so you can export log entries before they are excluded. Note that organization-level and folder-level exclusions don&#x27;t apply to child resources, and that you can&#x27;t exclude audit log entries.
        &quot;filter&quot;: &quot;A String&quot;, # Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries) that matches the log entries to be excluded. By using the sample function (https://cloud.google.com/logging/docs/view/advanced-queries#sample), you can exclude less than 100% of the matching log entries. For example, the following query matches 99% of low-severity log entries from Google Cloud Storage buckets:&quot;resource.type=gcs_bucket severity&lt;ERROR sample(insertId, 0.99)&quot;
        &quot;description&quot;: &quot;A String&quot;, # Optional. A description of this exclusion.
        &quot;disabled&quot;: True or False, # Optional. If set to True, then this exclusion is disabled and it does not exclude any log entries. You can update an exclusion to change the value of this field.
        &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the exclusion.This field may not be present for older exclusions.
        &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the exclusion.This field may not be present for older exclusions.
        &quot;name&quot;: &quot;A String&quot;, # Required. A client-assigned identifier, such as &quot;load-balancer-exclusion&quot;. Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods. First character has to be alphanumeric.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.
  }</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="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Changes one or more properties of an existing exclusion.

Args:
  name: string, Required. The resource name of the exclusion to update:
&quot;projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]&quot;
&quot;organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]&quot;
&quot;billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]&quot;
&quot;folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]&quot;
Example: &quot;projects/my-project-id/exclusions/my-exclusion-id&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # Specifies a set of log entries that are not to be stored in Logging. If your GCP resource receives a large volume of logs, you can use exclusions to reduce your chargeable logs. Exclusions are processed after log sinks, so you can export log entries before they are excluded. Note that organization-level and folder-level exclusions don&#x27;t apply to child resources, and that you can&#x27;t exclude audit log entries.
  &quot;filter&quot;: &quot;A String&quot;, # Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries) that matches the log entries to be excluded. By using the sample function (https://cloud.google.com/logging/docs/view/advanced-queries#sample), you can exclude less than 100% of the matching log entries. For example, the following query matches 99% of low-severity log entries from Google Cloud Storage buckets:&quot;resource.type=gcs_bucket severity&lt;ERROR sample(insertId, 0.99)&quot;
  &quot;description&quot;: &quot;A String&quot;, # Optional. A description of this exclusion.
  &quot;disabled&quot;: True or False, # Optional. If set to True, then this exclusion is disabled and it does not exclude any log entries. You can update an exclusion to change the value of this field.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the exclusion.This field may not be present for older exclusions.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the exclusion.This field may not be present for older exclusions.
  &quot;name&quot;: &quot;A String&quot;, # Required. A client-assigned identifier, such as &quot;load-balancer-exclusion&quot;. Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods. First character has to be alphanumeric.
}

  updateMask: string, Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of &quot;filter,description&quot;.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Specifies a set of log entries that are not to be stored in Logging. If your GCP resource receives a large volume of logs, you can use exclusions to reduce your chargeable logs. Exclusions are processed after log sinks, so you can export log entries before they are excluded. Note that organization-level and folder-level exclusions don&#x27;t apply to child resources, and that you can&#x27;t exclude audit log entries.
    &quot;filter&quot;: &quot;A String&quot;, # Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries) that matches the log entries to be excluded. By using the sample function (https://cloud.google.com/logging/docs/view/advanced-queries#sample), you can exclude less than 100% of the matching log entries. For example, the following query matches 99% of low-severity log entries from Google Cloud Storage buckets:&quot;resource.type=gcs_bucket severity&lt;ERROR sample(insertId, 0.99)&quot;
    &quot;description&quot;: &quot;A String&quot;, # Optional. A description of this exclusion.
    &quot;disabled&quot;: True or False, # Optional. If set to True, then this exclusion is disabled and it does not exclude any log entries. You can update an exclusion to change the value of this field.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the exclusion.This field may not be present for older exclusions.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the exclusion.This field may not be present for older exclusions.
    &quot;name&quot;: &quot;A String&quot;, # Required. A client-assigned identifier, such as &quot;load-balancer-exclusion&quot;. Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods. First character has to be alphanumeric.
  }</pre>
</div>

</body></html>