Skip to content

Commit

Permalink
Merge pull request #2860 from Fkawala/master
Browse files Browse the repository at this point in the history
Add a timestamp parameter to the logger.
  • Loading branch information
tseaver authored Dec 15, 2016
2 parents 861c5d7 + b28d8fd commit 8e258d5
Show file tree
Hide file tree
Showing 2 changed files with 157 additions and 38 deletions.
59 changes: 45 additions & 14 deletions logging/google/cloud/logging/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import json

from google.protobuf.json_format import MessageToJson
from google.cloud._helpers import _datetime_to_rfc3339


class Logger(object):
Expand Down Expand Up @@ -92,7 +93,7 @@ def batch(self, client=None):

def _make_entry_resource(self, text=None, info=None, message=None,
labels=None, insert_id=None, severity=None,
http_request=None):
http_request=None, timestamp=None):
"""Return a log entry resource of the appropriate type.
Helper for :meth:`log_text`, :meth:`log_struct`, and :meth:`log_proto`.
Expand Down Expand Up @@ -121,6 +122,9 @@ def _make_entry_resource(self, text=None, info=None, message=None,
:param http_request: (optional) info about HTTP request associated with
the entry
:type timestamp: :class:`datetime.datetime`
:param timestamp: (optional) timestamp of event being logged.
:rtype: dict
:returns: The JSON resource created.
"""
Expand Down Expand Up @@ -155,10 +159,13 @@ def _make_entry_resource(self, text=None, info=None, message=None,
if http_request is not None:
resource['httpRequest'] = http_request

if timestamp is not None:
resource['timestamp'] = _datetime_to_rfc3339(timestamp)

return resource

def log_text(self, text, client=None, labels=None, insert_id=None,
severity=None, http_request=None):
severity=None, http_request=None, timestamp=None):
"""API call: log a text message via a POST request
See:
Expand All @@ -184,15 +191,18 @@ def log_text(self, text, client=None, labels=None, insert_id=None,
:type http_request: dict
:param http_request: (optional) info about HTTP request associated with
the entry
:type timestamp: :class:`datetime.datetime`
:param timestamp: (optional) timestamp of event being logged.
"""
client = self._require_client(client)
entry_resource = self._make_entry_resource(
text=text, labels=labels, insert_id=insert_id, severity=severity,
http_request=http_request)
http_request=http_request, timestamp=timestamp)
client.logging_api.write_entries([entry_resource])

def log_struct(self, info, client=None, labels=None, insert_id=None,
severity=None, http_request=None):
severity=None, http_request=None, timestamp=None):
"""API call: log a structured message via a POST request
See:
Expand All @@ -218,15 +228,18 @@ def log_struct(self, info, client=None, labels=None, insert_id=None,
:type http_request: dict
:param http_request: (optional) info about HTTP request associated with
the entry.
:type timestamp: :class:`datetime.datetime`
:param timestamp: (optional) timestamp of event being logged.
"""
client = self._require_client(client)
entry_resource = self._make_entry_resource(
info=info, labels=labels, insert_id=insert_id, severity=severity,
http_request=http_request)
http_request=http_request, timestamp=timestamp)
client.logging_api.write_entries([entry_resource])

def log_proto(self, message, client=None, labels=None, insert_id=None,
severity=None, http_request=None):
severity=None, http_request=None, timestamp=None):
"""API call: log a protobuf message via a POST request
See:
Expand All @@ -252,11 +265,14 @@ def log_proto(self, message, client=None, labels=None, insert_id=None,
:type http_request: dict
:param http_request: (optional) info about HTTP request associated with
the entry.
:type timestamp: :class:`datetime.datetime`
:param timestamp: (optional) timestamp of event being logged.
"""
client = self._require_client(client)
entry_resource = self._make_entry_resource(
message=message, labels=labels, insert_id=insert_id,
severity=severity, http_request=http_request)
severity=severity, http_request=http_request, timestamp=timestamp)
client.logging_api.write_entries([entry_resource])

def delete(self, client=None):
Expand Down Expand Up @@ -340,7 +356,7 @@ def __exit__(self, exc_type, exc_val, exc_tb):
self.commit()

def log_text(self, text, labels=None, insert_id=None, severity=None,
http_request=None):
http_request=None, timestamp=None):
"""Add a text entry to be logged during :meth:`commit`.
:type text: str
Expand All @@ -358,12 +374,16 @@ def log_text(self, text, labels=None, insert_id=None, severity=None,
:type http_request: dict
:param http_request: (optional) info about HTTP request associated with
the entry.
:type timestamp: :class:`datetime.datetime`
:param timestamp: (optional) timestamp of event being logged.
"""
self.entries.append(
('text', text, labels, insert_id, severity, http_request))
('text', text, labels, insert_id, severity, http_request,
timestamp))

def log_struct(self, info, labels=None, insert_id=None, severity=None,
http_request=None):
http_request=None, timestamp=None):
"""Add a struct entry to be logged during :meth:`commit`.
:type info: dict
Expand All @@ -381,12 +401,16 @@ def log_struct(self, info, labels=None, insert_id=None, severity=None,
:type http_request: dict
:param http_request: (optional) info about HTTP request associated with
the entry.
:type timestamp: :class:`datetime.datetime`
:param timestamp: (optional) timestamp of event being logged.
"""
self.entries.append(
('struct', info, labels, insert_id, severity, http_request))
('struct', info, labels, insert_id, severity, http_request,
timestamp))

def log_proto(self, message, labels=None, insert_id=None, severity=None,
http_request=None):
http_request=None, timestamp=None):
"""Add a protobuf entry to be logged during :meth:`commit`.
:type message: protobuf message
Expand All @@ -404,9 +428,13 @@ def log_proto(self, message, labels=None, insert_id=None, severity=None,
:type http_request: dict
:param http_request: (optional) info about HTTP request associated with
the entry.
:type timestamp: :class:`datetime.datetime`
:param timestamp: (optional) timestamp of event being logged.
"""
self.entries.append(
('proto', message, labels, insert_id, severity, http_request))
('proto', message, labels, insert_id, severity, http_request,
timestamp))

def commit(self, client=None):
"""Send saved log entries as a single API call.
Expand All @@ -427,7 +455,8 @@ def commit(self, client=None):
kwargs['labels'] = self.logger.labels

entries = []
for entry_type, entry, labels, iid, severity, http_req in self.entries:
for (entry_type, entry, labels, iid, severity, http_req,
timestamp) in self.entries:
if entry_type == 'text':
info = {'textPayload': entry}
elif entry_type == 'struct':
Expand All @@ -446,6 +475,8 @@ def commit(self, client=None):
info['severity'] = severity
if http_req is not None:
info['httpRequest'] = http_req
if timestamp is not None:
info['timestamp'] = timestamp
entries.append(info)

client.logging_api.write_entries(entries, **kwargs)
Expand Down
Loading

0 comments on commit 8e258d5

Please sign in to comment.