diff --git a/logging/google/cloud/logging/handlers/app_engine.py b/logging/google/cloud/logging/handlers/app_engine.py index 834ca8347160..d07ca97002a9 100644 --- a/logging/google/cloud/logging/handlers/app_engine.py +++ b/logging/google/cloud/logging/handlers/app_engine.py @@ -14,35 +14,26 @@ """Logging handler for App Engine Flexible -Logs to the well-known file that the fluentd sidecar container on App Engine -Flexible is configured to read from and send to Stackdriver Logging. - -See the fluentd configuration here: - -https://github.com/GoogleCloudPlatform/appengine-sidecars-docker/tree/master/fluentd_logger +Send logs to Stackdriver Logging API. """ -# This file is largely copied from: -# https://github.com/GoogleCloudPlatform/python-compat-runtime/blob/master -# /appengine-vmruntime/vmruntime/cloud_logging.py - -import logging.handlers import os from google.cloud.logging.handlers.handlers import CloudLoggingHandler +from google.cloud.logging.handlers.handlers import EXCLUDED_LOGGER_DEFAULTS from google.cloud.logging.handlers.transports import BackgroundThreadTransport from google.cloud.logging.resource import Resource -DEFAULT_LOGGER_NAME = 'python' +GAE_PROJECT_ENV = 'GCLOUD_PROJECT' -EXCLUDED_LOGGER_DEFAULTS = ('google.cloud', 'oauth2client') +DEFAULT_LOGGER_NAME = 'projects/{}/logs/app'.format(os.environ.get(GAE_PROJECT_ENV)) GAE_RESOURCE = Resource( type='gae_app', labels={ - 'project_id': os.getenv('GCLOUD_PROJECT'), - 'module_id': os.getenv('GAE_SERVICE'), - 'version_id': os.getenv('GAE_VERSION'), + 'project_id': os.environ.get(GAE_PROJECT_ENV), + 'module_id': os.environ.get('GAE_SERVICE'), + 'version_id': os.environ.get('GAE_VERSION'), }, ) @@ -77,7 +68,6 @@ class AppEngineHandler(CloudLoggingHandler): """ def __init__(self, client, - name=DEFAULT_LOGGER_NAME, - transport=BackgroundThreadTransport, - resource=GAE_RESOURCE): - super(AppEngineHandler, self).__init__(client, name, transport, resource) + name=EXCLUDED_LOGGER_DEFAULTS, + transport=BackgroundThreadTransport): + super(AppEngineHandler, self).__init__(client, name, transport, resource=GAE_RESOURCE) diff --git a/logging/google/cloud/logging/handlers/transports/background_thread.py b/logging/google/cloud/logging/handlers/transports/background_thread.py index 7cc94b02ffe3..0b8002297e0a 100644 --- a/logging/google/cloud/logging/handlers/transports/background_thread.py +++ b/logging/google/cloud/logging/handlers/transports/background_thread.py @@ -28,7 +28,6 @@ from six.moves import queue from google.cloud.logging.handlers.transports.base import Transport -from google.cloud.logging.logger import _GLOBAL_RESOURCE _DEFAULT_GRACE_PERIOD = 5.0 # Seconds _DEFAULT_MAX_BATCH_SIZE = 10 @@ -258,7 +257,7 @@ def __init__(self, client, name, grace_period=_DEFAULT_GRACE_PERIOD, self.worker = _Worker(logger) self.worker.start() - def send(self, record, message, resource=_GLOBAL_RESOURCE): + def send(self, record, message, resource=None): """Overrides Transport.send(). :type record: :class:`logging.LogRecord` diff --git a/logging/google/cloud/logging/handlers/transports/base.py b/logging/google/cloud/logging/handlers/transports/base.py index eef1afdad18e..da27e60d809d 100644 --- a/logging/google/cloud/logging/handlers/transports/base.py +++ b/logging/google/cloud/logging/handlers/transports/base.py @@ -22,7 +22,7 @@ class Transport(object): client and name object, and must override :meth:`send`. """ - def send(self, record, message, resource): + def send(self, record, message, resource=None): """Transport send to be implemented by subclasses. :type record: :class:`logging.LogRecord` diff --git a/logging/google/cloud/logging/handlers/transports/sync.py b/logging/google/cloud/logging/handlers/transports/sync.py index d1aa2e69dca4..7233ec891529 100644 --- a/logging/google/cloud/logging/handlers/transports/sync.py +++ b/logging/google/cloud/logging/handlers/transports/sync.py @@ -21,9 +21,6 @@ from google.cloud.logging.resource import Resource -_GLOBAL_RESOURCE = Resource(type='global', labels={}) - - class SyncTransport(Transport): """Basic sychronous transport. @@ -33,7 +30,7 @@ class SyncTransport(Transport): def __init__(self, client, name): self.logger = client.logger(name) - def send(self, record, message, resource=_GLOBAL_RESOURCE): + def send(self, record, message, resource=None): """Overrides transport.send(). :type record: :class:`logging.LogRecord` diff --git a/logging/tests/unit/handlers/test_app_engine.py b/logging/tests/unit/handlers/test_app_engine.py index 6f946e15fb6c..cfc835677e17 100644 --- a/logging/tests/unit/handlers/test_app_engine.py +++ b/logging/tests/unit/handlers/test_app_engine.py @@ -15,11 +15,21 @@ import logging import os import unittest -from google.cloud.logging.resource import Resource class TestAppEngineHandlerHandler(unittest.TestCase): - PROJECT = 'PROJECT' + from google.cloud.logging.resource import Resource + + GAE_PROJECT_ENV = 'PROJECT' + + GAE_RESOURCE = Resource( + type='gae_app', + labels={ + 'project_id': os.environ.get(GAE_PROJECT_ENV), + 'module_id': os.environ.get('GAE_SERVICE'), + 'version_id': os.environ.get('GAE_VERSION'), + }, + ) def _get_target_class(self): from google.cloud.logging.handlers.app_engine import AppEngineHandler @@ -30,21 +40,13 @@ def _make_one(self, *args, **kw): return self._get_target_class()(*args, **kw) def test_ctor(self): - client = _Client(self.PROJECT) + client = _Client(self.GAE_PROJECT_ENV) handler = self._make_one(client, transport=_Transport) self.assertEqual(handler.client, client) + self.assertEqual(handler.resource, self.GAE_RESOURCE) def test_emit(self): - RESOURCE = Resource( - type='gae_app', - labels={ - 'project_id': os.getenv('GCLOUD_PROJECT'), - 'module_id': os.getenv('GAE_SERVICE'), - 'version_id': os.getenv('GAE_VERSION'), - }, - ) - - client = _Client(self.PROJECT) + client = _Client(self.GAE_PROJECT_ENV) handler = self._make_one(client, transport=_Transport) logname = 'loggername' message = 'hello world' @@ -52,7 +54,7 @@ def test_emit(self): None, None) handler.emit(record) - self.assertEqual(handler.transport.send_called_with, (record, message, RESOURCE)) + self.assertEqual(handler.transport.send_called_with, (record, message, self.GAE_RESOURCE)) class _Client(object): diff --git a/logging/tests/unit/handlers/transports/test_background_thread.py b/logging/tests/unit/handlers/transports/test_background_thread.py index 78484857c35b..149c37c8cde0 100644 --- a/logging/tests/unit/handlers/transports/test_background_thread.py +++ b/logging/tests/unit/handlers/transports/test_background_thread.py @@ -14,7 +14,6 @@ import logging import unittest -from google.cloud.logging.resource import Resource import mock from six.moves import queue @@ -48,12 +47,7 @@ def test_constructor(self): self.assertEqual(logger.name, name) def test_send(self): - RESOURCE = Resource( - type='gae_app', - labels={ - 'module_id': 'default', - 'version_id': 'test', - }) + from google.cloud.logging.logger import _GLOBAL_RESOURCE client = _Client(self.PROJECT) name = 'python_logger' @@ -67,9 +61,9 @@ def test_send(self): python_logger_name, logging.INFO, None, None, message, None, None) - transport.send(record, message, RESOURCE) + transport.send(record, message, _GLOBAL_RESOURCE) - transport.worker.enqueue.assert_called_once_with(record, message, RESOURCE) + transport.worker.enqueue.assert_called_once_with(record, message, _GLOBAL_RESOURCE) def test_flush(self): client = _Client(self.PROJECT) diff --git a/logging/tests/unit/handlers/transports/test_sync.py b/logging/tests/unit/handlers/transports/test_sync.py index 64c61cf23c4a..475ecc9c6a71 100644 --- a/logging/tests/unit/handlers/transports/test_sync.py +++ b/logging/tests/unit/handlers/transports/test_sync.py @@ -14,8 +14,6 @@ import logging import unittest -from google.cloud.logging.resource import Resource -from google.cloud.logging.logger import _GLOBAL_RESOURCE class TestSyncHandler(unittest.TestCase): @@ -38,12 +36,7 @@ def test_ctor(self): self.assertEqual(transport.logger.name, 'python_logger') def test_send(self): - RESOURCE = Resource( - type='gae_app', - labels={ - 'module_id': 'default', - 'version_id': 'test', - }) + from google.cloud.logging.logger import _GLOBAL_RESOURCE client = _Client(self.PROJECT) @@ -54,17 +47,18 @@ def test_send(self): record = logging.LogRecord(python_logger_name, logging.INFO, None, None, message, None, None) - transport.send(record, message, RESOURCE) + transport.send(record, message, _GLOBAL_RESOURCE) EXPECTED_STRUCT = { 'message': message, 'python_logger': python_logger_name, } - EXPECTED_SENT = (EXPECTED_STRUCT, 'INFO', RESOURCE) + EXPECTED_SENT = (EXPECTED_STRUCT, 'INFO', _GLOBAL_RESOURCE) self.assertEqual( transport.logger.log_struct_called_with, EXPECTED_SENT) class _Logger(object): + from google.cloud.logging.logger import _GLOBAL_RESOURCE def __init__(self, name): self.name = name