def test_stackdriver_with_credentials_base64_as_environment(self): valid_cred = encode_file_as_base64(VALID_GOOGLE_CREDENTIALS) os.environ['TEMLOGGER_GOOGLE_CREDENTIALS_BASE64'] = valid_cred temlogger.config.set_provider('stackdriver') temlogger.getLogger('stackdriver-base64')
def test_switch_logger(self): logger = temlogger.getLogger('switch-logger-1') self.assertTrue(isinstance(logger, logging.Logger)) self.assertEqual(logger.logging_provider, 'default') temlogger.config.set_provider('logstash') logger = temlogger.getLogger('switch-logger-1') self.assertTrue(isinstance(logger, logging.Logger)) self.assertEqual(logger.logging_provider, 'logstash') temlogger.config.set_provider('default') logger = temlogger.getLogger('switch-logger-1') self.assertTrue(isinstance(logger, logging.Logger)) self.assertEqual(logger.logging_provider, 'default')
def test_register_one_handler_global(self): def add_tracker_id(message): message['tracker_id'] = 'tracker_id_hex' return message temlogger.config.set_provider('logstash') temlogger.config.set_app_name('test-app-name') temlogger.config.set_environment('local') temlogger.config.setup_event_handlers([add_tracker_id]) logger = temlogger.getLogger('first_handler') format_base = FormatterBase() with patch.object(FormatterBase, 'format_with_handlers', wraps=format_base.format_with_handlers) as mock_fwh: logger_message = 'First handler message' logger.info(logger_message) expected = { '@timestamp': '2020-03-06T21:29:36.246Z', 'message': logger_message, 'host': socket.gethostname(), 'path': os.path.abspath(__file__), 'tracker_id': 'tracker_id_hex', 'environment': 'local', 'level': 'INFO', 'app_name': 'test-app-name', 'logger_name': logger.name, 'payload': { 'stack_info': None } } mock_fwh.assert_called_once_with(expected)
def test_register_event_handler_on_one_logger_only(self): random_key = uuid.uuid4().hex def add_random_key_to_message_local(message): message['random_key'] = random_key return message temlogger.config.set_provider('logstash') logger = temlogger.getLogger( 'five_handler', event_handlers=[add_random_key_to_message_local]) handler = logger.handlers[0] formatter = handler.formatter with patch.object(FormatterBase, 'format_with_handlers', wraps=formatter.format_with_handlers) as mock_fwh: logger_message = 'Five handler message' logger.info(logger_message) expected = { '@timestamp': '2020-03-06T21:29:36.246Z', 'message': logger_message, 'host': socket.gethostname(), 'path': os.path.abspath(__file__), 'environment': '', 'level': 'INFO', 'logger_name': logger.name, 'payload': { 'stack_info': None }, 'random_key': random_key, } mock_fwh.assert_called_once_with(expected)
def test_get_stackdriver_logger_passing_envs_as_parameter( self, mocked_cls): """""" temlogger.config.set_provider('stackdriver') logger = temlogger.getLogger('stackdriver-2') self.assertEqual(logger.logging_provider, 'stackdriver')
def test_get_logstash_logger_passing_envs_by_environ(self): os.environ['TEMLOGGER_PROVIDER'] = 'logstash' os.environ['TEMLOGGER_URL'] = 'localhost' os.environ['TEMLOGGER_PORT'] = '5000' logger = temlogger.getLogger('logstash-2') self.assertEqual(logger.logging_provider, 'logstash')
def test_register_dotted_string_module(self): def clear_keys(message): message.clear() return message temlogger.config.set_provider('logstash') temlogger.config.setup_event_handlers([ 'temlogger.tests.base.add_tracker_id_to_message', ]) logger = temlogger.getLogger('four_handler') formatter = logger.handlers[0].formatter with patch.object(FormatterBase, 'format_with_handlers', wraps=formatter.format_with_handlers) as mock_fwh: logger_message = 'Four handler message' logger.info(logger_message) expected = { '@timestamp': '2020-03-06T21:29:36.246Z', 'message': logger_message, 'host': socket.gethostname(), 'path': os.path.abspath(__file__), 'environment': '', 'level': 'INFO', 'logger_name': logger.name, 'payload': { 'stack_info': None }, 'tracker_id_global': 'tracker_id_value_global', } mock_fwh.assert_called_once_with(expected)
def test_get_console_logger_passing_envs_by_environ(self): os.environ['TEMLOGGER_PROVIDER'] = 'console' logger = temlogger.getLogger('console-logger-1') self.assertTrue(isinstance(logger, logging.Logger)) self.assertEqual(logger.logging_provider, 'console')
def test_get_stackdriver_logger_passing_envs_by_environ(self, mocked_cls): os.environ['TEMLOGGER_PROVIDER'] = 'stackdriver' logger = temlogger.getLogger('stackdriver-1') self.assertTrue(isinstance(logger, logging.Logger)) self.assertEqual(logger.logging_provider, 'stackdriver')
def test_get_logstash_logger_passing_envs_as_parameter(self): temlogger.config.set_provider('logstash') temlogger.config.set_url('localhost') temlogger.config.set_port('5000') temlogger.config.set_environment('staging') logger = temlogger.getLogger('logstash-3') self.assertEqual(logger.logging_provider, 'logstash')
def test_get_stackdriver_logger_and_log_info(self, mocked_cls): """""" temlogger.config.set_provider('stackdriver') logger = temlogger.getLogger('stackdriver-2') self.assertEqual(len(logger.handlers), 1) self.assertEqual(logger.logging_provider, 'stackdriver') logger._log = mock.Mock() logger.info('StackDriver log') logger._log.assert_called_once_with( logging.INFO, 'StackDriver log', ())
def test_get_logstash_logger_and_log_info(self): """""" temlogger.config.set_provider('logstash') temlogger.config.set_url('localhost') temlogger.config.set_port('5000') logger = temlogger.getLogger('logstash-3') self.assertEqual(len(logger.handlers), 1) self.assertEqual(logger.logging_provider, 'logstash') logger._log = mock.Mock() logger.info('Logstash log') logger._log.assert_called_once_with(logging.INFO, 'Logstash log', ())
def test_register_event_handler_that_clear_message_keys(self): def clear_keys(message): message.clear() return message temlogger.config.set_provider('logstash') temlogger.config.setup_event_handlers([clear_keys]) logger = temlogger.getLogger('three_handler') formatter = logger.handlers[0].formatter with patch.object(FormatterBase, 'format_with_handlers', wraps=formatter.format_with_handlers) as mock_fwh: logger.info('Two handler') expected = {} mock_fwh.assert_called_once_with(expected)
def test_get_console_logger_and_assert_log_was_sent_out(self): import sys temlogger.config.set_provider('console') logger = temlogger.getLogger('console-3') self.assertEqual(len(logger.handlers), 1) self.assertEqual(logger.logging_provider, 'console') log_message = 'Console log entry message' log_record = logging.makeLogRecord({'msg': log_message}) handler = logger.handlers[0] handler.emit = mock.Mock() logger.info(log_message) # handler.emit calls handler.stream(sys.stderror.write) to write logs assert handler.stream == sys.stderr handler.emit.assert_called_once() self.assertTrue(log_message in str(handler.emit.call_args_list))
def test_register_two_handler_global(self): def tracker_id_param(message): message['tracker_id'] = 'tracker_id_hex' return message def add_request_id_param(message): message['request_id'] = 'request_id_hex2' return message temlogger.config.set_provider('logstash') temlogger.config.setup_event_handlers( [tracker_id_param, add_request_id_param]) logger = temlogger.getLogger('two_handler') formatter = logger.handlers[0].formatter with patch.object(FormatterBase, 'format_with_handlers', wraps=formatter.format_with_handlers) as mock_fwh: logger_message = 'Two handler message' logger.info(logger_message) expected = { '@timestamp': '2020-03-06T21:29:36.246Z', 'message': logger_message, 'host': socket.gethostname(), 'path': os.path.abspath(__file__), 'tracker_id': 'tracker_id_hex', 'request_id': 'request_id_hex2', 'environment': '', 'level': 'INFO', 'logger_name': logger.name, 'payload': { 'stack_info': None } } mock_fwh.assert_called_once_with(expected)
def test_get_default_logger_when_logging_provider_is_not_set(self): logger = temlogger.getLogger('test') self.assertTrue(isinstance(logger, logging.Logger)) self.assertEqual(logger.logging_provider, 'default') self.assertEqual(len(logger.handlers), 0)
def test_get_console_logger_passing_envs_as_parameter(self): temlogger.config.set_provider('console') logger = temlogger.getLogger('console-logger-2') self.assertEqual(logger.logging_provider, 'console')
def test_stackdriver_with_credentials_base64(self): valid_cred = encode_file_as_base64(VALID_GOOGLE_CREDENTIALS) temlogger.config.set_provider('stackdriver') temlogger.config.set_google_credentials_base64(valid_cred) temlogger.getLogger('stackdriver-base64')