ログの書き込み

ログエントリを書き込むアプリケーションの多くが、次のようなフローで処理を行います。

  • 書き込まれるログを理解するために、ログを一覧表示します。
  • 注目すべきイベントが発生したときに、指定されたログにログエントリを書き込みます。
  • ログエントリを生成する新しいサービスがある場合は、新しいログを作成します。
  • サービスが廃止され、Stackdriver Logging に関係のあるログエントリがなくなった場合は、ログを削除します。

すべての設定が完了し、Stackdriver Logging API クライアントを作成したら、API にリクエストを送信できます。書き込みログの一般的なフローは次のようになります。

ログエントリを一覧表示する

以下に、指定したロガーのログエントリのリストを取得するためのサンプルコードを示します。 多数のログが存在する可能性があるため、結果はページ分けされます。 返されるログ名はリソース形式です。それらは URL エンコードされ、ログ名の前に /projects/PROJECT_ID/logs/ が付けられます。

C#

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

private void ListLogEntries(string logId)
{
    var client = LoggingServiceV2Client.Create();
    LogName logName = new LogName(s_projectId, logId);
    ProjectName projectName = new ProjectName(s_projectId);
    IEnumerable<string> projectIds = new string[] { projectName.ToString() };
    var results = client.ListLogEntries(projectIds, $"logName={logName.ToString()}",
        "timestamp desc", callSettings: RetryAWhile);
    foreach (var row in results)
    {
        Console.WriteLine($"{row.TextPayload.Trim()}");
    }
}

Go

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

var entries []*logging.Entry
const name = "log-example"
iter := adminClient.Entries(ctx,
	// Only get entries from the log-example log.
	logadmin.Filter(fmt.Sprintf(`logName = "projects/%s/logs/%s"`, projID, name)),
	// Get most recent entries first.
	logadmin.NewestFirst(),
)

// Fetch the most recent 20 entries.
for len(entries) < 20 {
	entry, err := iter.Next()
	if err == iterator.Done {
		return entries, nil
	}
	if err != nil {
		return nil, err
	}
	entries = append(entries, entry)
}
return entries, nil

Java

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

Page<LogEntry> entries = logging.listLogEntries(EntryListOption.filter(filter));
for (LogEntry entry : entries.iterateAll()) {
  // do something with the entry
}

Node.js

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

function listLogEntries (logName, callback) {
  var logging = Logging();
  var log = logging.log(logName);

  // List the most recent entries for a given log
  // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging?method=getEntries
  log.getEntries(function (err, entries) {
    if (err) {
      return callback(err);
    }

    console.log('Found %d entries!', entries.length);
    return callback(null, entries);
  });
}

PHP

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

/** Return an iterator for listing log entries.
 *
 * @param string $projectId The Google project ID.
 * @param string $loggerName The name of the logger.
 * @return ItemIterator<Google\Cloud\Logging\Entry>
 */
function list_entries($projectId, $loggerName)
{
    $logging = new LoggingClient(['projectId' => $projectId]);
    $loggerFullName = sprintf('projects/%s/logs/%s', $projectId, $loggerName);
    $oneDayAgo = date(\DateTime::RFC3339, strtotime('-24 hours'));
    $filter = sprintf(
        'logName = "%s" AND timestamp >= "%s"',
        $loggerFullName,
        $oneDayAgo
    );
    $options = [
        'filter' => $filter,
    ];
    return $logging->entries($options);
}

Python

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

def list_entries(logger_name):
    """Lists the most recent entries for a given logger."""
    logging_client = logging.Client()
    logger = logging_client.logger(logger_name)

    print('Listing entries for logger {}:'.format(logger.name))

    for entry in logger.list_entries():
        timestamp = entry.timestamp.isoformat()
        print('* {}: {}'.format
              (timestamp, entry.payload))

Ruby

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

require "google/cloud/logging"

logging = Google::Cloud::Logging.new project: "my-gcp-project-id"
entries = logging.entries filter: 'resource.type = "gae_app"'

entries.each do |entry|
  puts "[#{entry.timestamp}] #{entry.log_name} #{entry.payload.inspect}"
end

ログエントリを書き込む

以下に、1 つのログエントリを mylog に書き込むためのサンプルコードを示します。 サービス、リージョン、ラベル、およびその他のコンテンツは、エントリと書き込みを行うアプリケーションによって変わります。

多くのログエントリを記述する場合、複数のログエントリを entries.write の 1 回の呼び出しにまとめることをお勧めします。これによってスループットが向上し、entries.write への呼び出しに対する割り当て制限を回避できます。

C#

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

private void WriteLogEntry(string logId, string message)
{
    var client = LoggingServiceV2Client.Create();
    LogName logName = new LogName(s_projectId, logId);
    LogEntry logEntry = new LogEntry
    {
        LogName = logName.ToString(),
        Severity = LogSeverity.Info,
        TextPayload = $"{typeof(LoggingSample).FullName} - {message}"
    };
    MonitoredResource resource = new MonitoredResource { Type = "global" };
    IDictionary<string, string> entryLabels = new Dictionary<string, string>
    {
        { "size", "large" },
        { "color", "red" }
    };
    client.WriteLogEntries(LogNameOneof.From(logName), resource, entryLabels,
        new[] { logEntry }, RetryAWhile);
    Console.WriteLine($"Created log entry in log-id: {logId}.");
}

Go

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

const name = "log-example"
logger := client.Logger(name)
defer logger.Flush() // Ensure the entry is written.

infolog := logger.StandardLogger(logging.Info)
infolog.Printf("infolog is a standard Go log.Logger with INFO severity.")

Java

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

List<LogEntry> entries = new ArrayList<>();
entries.add(LogEntry.of(StringPayload.of("Entry payload")));
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("key", "value");
entries.add(LogEntry.of(JsonPayload.of(jsonMap)));
logging.write(entries,
    WriteOption.logName(logName),
    WriteOption.resource(MonitoredResource.newBuilder("global").build()));

Node.js

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

function writeLogEntry (logName, callback) {
  var logging = Logging();
  var log = logging.log(logName);

  // Modify this resource to match a resource in your project
  // See https://cloud.google.com/logging/docs/api/ref_v2beta1/rest/v2beta1/MonitoredResource
  var resource = {
    // This example targets the "global" resource for simplicity
    type: 'global'
  };

  // A text log entry
  var entry = log.entry({ resource: resource }, 'Hello, world!');

  // A structured log entry
  var secondEntry = log.entry({ resource: resource }, {
    name: 'King Arthur',
    quest: 'Find the Holy Grail',
    favorite_color: 'Blue'
  });

  // Save the two log entries. You can write entries one at a time, but it is
  // best to write multiple entires together in a batch.
  log.write([
    entry,
    secondEntry
  ], function (err, apiResponse) {
    if (err) {
      return callback(err);
    }

    console.log('Wrote to %s', logName);
    return callback(null, apiResponse);
  });
}

PHP

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

/** Write a log message via the Stackdriver Logging API.
 *
 * @param string $projectId The Google project ID.
 * @param string $loggerName The name of the logger.
 * @param string $message The log message.
 */
function write_log($projectId, $loggerName, $message)
{
    $logging = new LoggingClient(['projectId' => $projectId]);
    $logger = $logging->logger($loggerName, [
        'resource' => [
            'type' => 'gcs_bucket',
            'labels' => [
                'bucket_name' => 'my_bucket'
            ]
        ]
    ]);
    $entry = $logger->entry($message);
    $logger->write($entry);
}

Python

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

def write_entry(logger_name):
    """Writes log entries to the given logger."""
    logging_client = logging.Client()

    # This log can be found in the Cloud Logging console under 'Custom Logs'.
    logger = logging_client.logger(logger_name)

    # Make a simple text log
    logger.log_text('Hello, world!')

    # Simple text log with severity.
    logger.log_text('Goodbye, world!', severity='ERROR')

    # Struct log. The struct can be any JSON-serializable dictionary.
    logger.log_struct({
        'name': 'King Arthur',
        'quest': 'Find the Holy Grail',
        'favorite_color': 'Blue'
    })

    print('Wrote logs to {}.'.format(logger.name))

Ruby

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

require "google/cloud/logging"

logging = Google::Cloud::Logging.new project: "my-gcp-project-id"

entry = logging.entry
entry.log_name = "my_application_log"
entry.payload  = "Log message"
entry.severity = :NOTICE
entry.resource.type = "gae_app"
entry.resource.labels[:module_id] = "default"
entry.resource.labels[:version_id] = "20160101t163030"

logging.write_entries entry

ログを作成する

新しいログを作成するには、新しいログにエントリを書き込みます。 個別の「作成」操作はありません。

ログを削除する

以下に、すべてのエントリを削除することによって、ログを削除するサンプルコードを示します。エントリのないログは、プロジェクト ログのリストに表示されません。エントリは明示的に削除することも、または Stackdriver Logging の保持ポリシーに従って期限切れにすることもできます。ログに新しいエントリを書き込むと、そのログが再表示されます。

C#

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

private void DeleteLog(string logId)
{
    var client = LoggingServiceV2Client.Create();
    LogName logName = new LogName(s_projectId, logId);
    client.DeleteLog(LogNameOneof.From(logName), RetryAWhile);
    Console.WriteLine($"Deleted {logId}.");
}

Go

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

const name = "log-example"
if err := adminClient.DeleteLog(ctx, name); err != nil {
	return err
}

Java

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

boolean deleted = logging.deleteLog(logName);
if (deleted) {
  // the log was deleted
} else {
  // the log was not found
}

Node.js

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

function deleteLog (logName, callback) {
  var logging = Logging();
  var log = logging.log(logName);

  // Deletes a logger and all its entries.
  // Note that a deletion can take several minutes to take effect.
  // See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging/log?method=delete
  log.delete(function (err, apiResponse) {
    if (err) {
      return callback(err);
    }

    console.log('Deleted log: %s', logName);
    return callback(null, apiResponse);
  });
}

PHP

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

/** Delete a logger and all its entries.
 *
 * @param string $projectId The Google project ID.
 * @param string $loggerName The name of the logger.
 */
function delete_logger($projectId, $loggerName)
{
    $logging = new LoggingClient(['projectId' => $projectId]);
    $logger = $logging->logger($loggerName);
    $logger->delete();
}

Python

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

def delete_logger(logger_name):
    """Deletes a logger and all its entries.

    Note that a deletion can take several minutes to take effect.
    """
    logging_client = logging.Client()
    logger = logging_client.logger(logger_name)

    logger.delete()

    print('Deleted all logging entries for {}'.format(logger.name))

Ruby

Stackdriver Logging クライアントのインストールと作成の詳細については、Stackdriver Logging クライアント ライブラリをご覧ください。

require "google/cloud/logging"

logging = Google::Cloud::Logging.new project: "my-gcp-project-id"

logging.delete_log "my_application_log"

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。