<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_v1beta3.html">Google Cloud Logging API</a> . <a href="logging_v1beta3.projects.html">projects</a> . <a href="logging_v1beta3.projects.logServices.html">logServices</a> . <a href="logging_v1beta3.projects.logServices.indexes.html">indexes</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(projectsId, logServicesId, pageSize=None, indexPrefix=None, x__xgafv=None, pageToken=None, log=None, depth=None)</a></code></p>
<p class="firstline">Lists the current index values for a log service.</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(projectsId, logServicesId, pageSize=None, indexPrefix=None, x__xgafv=None, pageToken=None, log=None, depth=None)</code>
  <pre>Lists the current index values for a log service.

Args:
  projectsId: string, Part of `serviceName`. The resource name of a log service whose service indexes are requested. Example: `"projects/my-project-id/logServices/appengine.googleapis.com"`. (required)
  logServicesId: string, Part of `serviceName`. See documentation of `projectsId`. (required)
  pageSize: integer, The maximum number of log service index resources to return in one operation.
  indexPrefix: string, Restricts the index values returned to be those with a specified prefix for each index key. This field has the form `"/prefix1/prefix2/..."`, in order corresponding to the [`LogService indexKeys`][google.logging.v1.LogService.index_keys]. Non-empty prefixes must begin with `/`. For example, App Engine's two keys are the module ID and the version ID. Following is the effect of using various values for `indexPrefix`: + `"/Mod/"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `"/Mod` retrieves `/Mod/10`, `/Mod/11` and `/ModA/10` but not `/XXX/33`. + `"/Mod/1"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `"/Mod/10/"` retrieves `/Mod/10` only. + An empty prefix or `"/"` retrieves all values.
  x__xgafv: string, V1 error format.
  pageToken: string, An opaque token, returned as `nextPageToken` by a prior `ListLogServiceIndexes` operation. If `pageToken` is supplied, then the other fields of this request are ignored, and instead the previous `ListLogServiceIndexes` operation is continued.
  log: string, _Optional_. The resource name of a log, such as `"projects/project_id/logs/log_name"`. If present, indexes are returned for any service associated with entries in the log.
  depth: integer, A non-negative integer that limits the number of levels of the index hierarchy that are returned. If `depth` is 1 (default), only the first index key value is returned. If `depth` is 2, both primary and secondary key values are returned. If `depth` is 0, the depth is the number of slash-separators in the `indexPrefix` field, not counting a slash appearing as the last character of the prefix. If the `indexPrefix` field is empty, the default depth is 1. It is an error for `depth` to be any positive value less than the number of components in `indexPrefix`.

Returns:
  An object of the form:

    { # Result returned from ListLogServiceIndexesRequest.
    "nextPageToken": "A String", # If there are more results, then `nextPageToken` is returned in the response. To get the next batch of indexes, use the value of `nextPageToken` as `pageToken` in the next call of `ListLogServiceIndexes`. If `nextPageToken` is empty, then there are no more results.
    "serviceIndexPrefixes": [ # A list of log service index values. Each index value has the form `"/value1/value2/..."`, where `value1` is a value in the primary index, `value2` is a value in the secondary index, and so forth.
      "A String",
    ],
  }</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 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>