def test_broken_unicode_python2(logger, mock_send): # py3 record.getMessage() returns a binary string here # which is safely converted to unicode during the sanitization # process logger.error(b"Broken \xde log message") decoded = get_mock_send_arg(mock_send) assert u"Broken %s log message" % UNICODE_REPLACEMENT == decoded["short_message"]
def test_message_to_pickle_serializes_datetime_objects_instead_of_blindly_repring_them( logger, mock_send): timestamp = datetime.datetime(2001, 2, 3, 4, 5, 6, 7) logger.error("Log message", extra={"ts": timestamp}) decoded = get_mock_send_arg(mock_send) assert "datetime.datetime" not in decoded["_ts"] assert timestamp.isoformat() == decoded["_ts"]
def test_broken_unicode_python2(logger, mock_send): # py3 record.getMessage() returns a binary string here # which is safely converted to unicode during the sanitization # process logger.error(b"Broken \xde log message") decoded = get_mock_send_arg(mock_send) assert u"Broken %s log message" % UNICODE_REPLACEMENT == decoded[ "short_message"]
def test_status_field_issue(logger): message = get_unique_message() logger.error(message, extra={"status": "OK"}) graylog_response = get_graylog_response(message, fields=["status"]) assert message == graylog_response["message"] assert "long_message" not in graylog_response assert "timestamp" in graylog_response assert "OK" == graylog_response["status"]
def test_non_status_field_log(logger): message = get_unique_message() logger.error(message, extra={"foo": "bar"}) graylog_response = get_graylog_response(message, fields=["foo"]) assert message == graylog_response["message"] assert "long_message" not in graylog_response assert "timestamp" in graylog_response assert "bar" == graylog_response["foo"]
def test_common_logging(logger): """Test sending a common usage log""" message = get_unique_message() logger.error(message) graylog_response = get_graylog_response(message) assert message == graylog_response["message"] assert "long_message" not in graylog_response assert "timestamp" in graylog_response assert SYSLOG_LEVELS[logging.ERROR] == graylog_response["level"]
def test_debug_mode(logger): message = get_unique_message() logger.error(message) graylog_response = get_graylog_response(message, fields=["function", "pid", "thread_name"]) assert message == graylog_response['message'] assert "long_message" not in graylog_response assert "timestamp" in graylog_response assert graylog_response['file'].endswith("test_debugging_fields.py") assert 'test_debug_mode' == graylog_response['function'] assert 'line' in graylog_response assert "file" in graylog_response assert "pid" in graylog_response assert "thread_name" in graylog_response
def test_debug_mode(logger): message = get_unique_message() logger.error(message) graylog_response = get_graylog_response( message, fields=["function", "pid", "thread_name"]) assert message == graylog_response['message'] assert "long_message" not in graylog_response assert "timestamp" in graylog_response assert graylog_response['file'].endswith("test_debugging_fields.py") assert 'test_debug_mode' == graylog_response['function'] assert 'line' in graylog_response assert "file" in graylog_response assert "pid" in graylog_response assert "thread_name" in graylog_response
def test_manual_exc_info_handler(logger, mock_send): """Check that a the ``full_message`` traceback info is passed when the ``exc_info=1`` flag is given within a log message""" try: raise SyntaxError("Syntax error") except SyntaxError: logger.error("Failed", exc_info=1) arg = get_mock_send_arg(mock_send) assert "Failed" == arg["short_message"] assert arg["full_message"].startswith("Traceback (most recent call last):") # GELFHTTPHandler mocking does not complete the stacktrace # thus a missing \n assert arg["full_message"].endswith("SyntaxError: Syntax error") or arg[ "full_message"].endswith("SyntaxError: Syntax error\n")
def test_manual_exc_info_handler(logger, mock_send): """Check that a the ``full_message`` traceback info is passed when the ``exc_info=1`` flag is given within a log message""" try: raise SyntaxError("Syntax error") except SyntaxError: logger.error("Failed", exc_info=1) arg = get_mock_send_arg(mock_send) assert "Failed" == arg["short_message"] assert arg["full_message"].startswith("Traceback (most recent call last):") # GELFHTTPHandler mocking does not complete the stacktrace # thus a missing \n assert arg["full_message"].endswith("SyntaxError: Syntax error") or \ arg["full_message"].endswith("SyntaxError: Syntax error\n")
def test_unicode(logger, mock_send): logger.error(u"Mensaje de registro espa\xf1ol") arg = get_mock_send_arg(mock_send) assert u"Mensaje de registro espa\xf1ol" == arg["short_message"]
def test_status_field_issue(logger, mock_send): logger.error("Log message", extra={"status": "OK"}) decoded = get_mock_send_arg(mock_send) assert "Log message" == decoded["short_message"] assert "OK" == decoded["_status"]
def test_list(logger, mock_send): logger.error("Log message", extra={"foo": ["bar", "baz"]}) decoded = get_mock_send_arg(mock_send) assert "Log message" == decoded["short_message"] assert ["bar", "baz"] == decoded["_foo"]
def test_arbitrary_object(logger, mock_send): logger.error("Log message", extra={"foo": TestClass()}) decoded = get_mock_send_arg(mock_send) assert "Log message" == decoded["short_message"] assert "<TestClass>" == decoded["_foo"]
def test_broken_unicode_python3(logger, mock_send): # py3 record.getMessage() returns somewhat broken "b"foo"" if the # message string is not a string, but a binary object: b"foo" logger.error(b"Broken \xde log message") decoded = get_mock_send_arg(mock_send) assert "b'Broken \\xde log message'" == decoded["short_message"]
def test_extra_field(logger, mock_send): logger.error("Log message", extra={"foo": "bar"}) decoded = get_mock_send_arg(mock_send) assert "Log message" == decoded["short_message"] assert "bar" == decoded["_foo"]
def test_message_to_pickle_serializes_datetime_objects_instead_of_blindly_repring_them(logger, mock_send): timestamp = datetime.datetime(2001, 2, 3, 4, 5, 6, 7) logger.error("Log message", extra={"ts": timestamp}) decoded = get_mock_send_arg(mock_send) assert "datetime.datetime" not in decoded["_ts"] assert timestamp.isoformat() == decoded["_ts"]