<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></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="logging_v1beta3.projects.logServices.indexes.html">indexes()</a></code>
</p>
<p class="firstline">Returns the indexes Resource.</p>

<p class="toc_element">
  <code><a href="logging_v1beta3.projects.logServices.sinks.html">sinks()</a></code>
</p>
<p class="firstline">Returns the sinks Resource.</p>

<p class="toc_element">
  <code><a href="#list">list(projectsId, log=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the log services that have log entries in this project.</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, log=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists the log services that have log entries in this project.

Args:
  projectsId: string, Part of `projectName`. The resource name of the project whose services are to be listed. (required)
  log: string, If empty, all log services contributing log entries to the project are listed. Otherwise, this field must be the resource name of a log, such as `"projects/my-project/appengine.googleapis.com%2Frequest_log"`, and then the only services listed are those associated with entries in the log. A service is associated with an entry if its name is in the entry's `LogEntryMetadata.serviceName` field.
  pageSize: integer, The maximum number of `LogService` objects to return in one operation.
  pageToken: string, An opaque token, returned as `nextPageToken` by a prior `ListLogServices` operation. If `pageToken` is supplied, then the other fields of this request are ignored, and instead the previous `ListLogServices` operation is continued.
  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # Result returned from `ListLogServicesRequest`.
    "nextPageToken": "A String", # If there are more results, then `nextPageToken` is returned in the response. To get the next batch of services, use the value of `nextPageToken` as `pageToken` in the next call of `ListLogServices`. If `nextPageToken` is empty, then there are no more results.
    "logServices": [ # A list of log services.
      { # _Output only._ Describes a service that writes log entries.
        "indexKeys": [ # A list of the names of the keys used to index and label individual log entries from this service. The first two keys are used as the primary and secondary index, respectively. Additional keys may be used to label the entries. For example, App Engine indexes its entries by module and by version, so its `indexKeys` field is the following: [ "appengine.googleapis.com/module_id", "appengine.googleapis.com/version_id" ]
          "A String",
        ],
        "name": "A String", # The service's name. Example: `"appengine.googleapis.com"`. Log names beginning with this string are reserved for this service. This value can appear in the `LogEntry.metadata.serviceName` field of log entries associated with this log service.
      },
    ],
  }</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>