| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  | import logging | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2020-04-04 09:33:40 +08:00
										 |  |  | from io import StringIO | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | import pytest | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-01 23:35:03 +08:00
										 |  |  | from flask.logging import default_handler | 
					
						
							|  |  |  | from flask.logging import has_level_handler | 
					
						
							|  |  |  | from flask.logging import wsgi_errors_stream | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pytest.fixture(autouse=True) | 
					
						
							| 
									
										
										
										
											2017-12-15 04:20:03 +08:00
										 |  |  | def reset_logging(pytestconfig): | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  |     root_handlers = logging.root.handlers[:] | 
					
						
							| 
									
										
										
										
											2017-12-15 04:20:03 +08:00
										 |  |  |     logging.root.handlers = [] | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  |     root_level = logging.root.level | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-02 05:56:18 +08:00
										 |  |  |     logger = logging.getLogger("flask_test") | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  |     logger.handlers = [] | 
					
						
							|  |  |  |     logger.setLevel(logging.NOTSET) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |     logging_plugin = pytestconfig.pluginmanager.unregister(name="logging-plugin") | 
					
						
							| 
									
										
										
										
											2017-12-14 14:55:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  |     yield | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     logging.root.handlers[:] = root_handlers | 
					
						
							|  |  |  |     logging.root.setLevel(root_level) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     logger.handlers = [] | 
					
						
							|  |  |  |     logger.setLevel(logging.NOTSET) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-14 22:40:34 +08:00
										 |  |  |     if logging_plugin: | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |         pytestconfig.pluginmanager.register(logging_plugin, "logging-plugin") | 
					
						
							| 
									
										
										
										
											2017-12-14 14:55:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | def test_logger(app): | 
					
						
							| 
									
										
										
										
											2019-07-02 05:56:18 +08:00
										 |  |  |     assert app.logger.name == "flask_test" | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  |     assert app.logger.level == logging.NOTSET | 
					
						
							|  |  |  |     assert app.logger.handlers == [default_handler] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_logger_debug(app): | 
					
						
							|  |  |  |     app.debug = True | 
					
						
							|  |  |  |     assert app.logger.level == logging.DEBUG | 
					
						
							|  |  |  |     assert app.logger.handlers == [default_handler] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_existing_handler(app): | 
					
						
							|  |  |  |     logging.root.addHandler(logging.StreamHandler()) | 
					
						
							|  |  |  |     assert app.logger.level == logging.NOTSET | 
					
						
							|  |  |  |     assert not app.logger.handlers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_wsgi_errors_stream(app, client): | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |     @app.route("/") | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  |     def index(): | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |         app.logger.error("test") | 
					
						
							|  |  |  |         return "" | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     stream = StringIO() | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |     client.get("/", errors_stream=stream) | 
					
						
							|  |  |  |     assert "ERROR in test_logging: test" in stream.getvalue() | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     assert wsgi_errors_stream._get_current_object() is sys.stderr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with app.test_request_context(errors_stream=stream): | 
					
						
							|  |  |  |         assert wsgi_errors_stream._get_current_object() is stream | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_has_level_handler(): | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |     logger = logging.getLogger("flask.app") | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  |     assert not has_level_handler(logger) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     handler = logging.StreamHandler() | 
					
						
							|  |  |  |     logging.root.addHandler(handler) | 
					
						
							|  |  |  |     assert has_level_handler(logger) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     logger.propagate = False | 
					
						
							|  |  |  |     assert not has_level_handler(logger) | 
					
						
							|  |  |  |     logger.propagate = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     handler.setLevel(logging.ERROR) | 
					
						
							|  |  |  |     assert not has_level_handler(logger) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_log_view_exception(app, client): | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |     @app.route("/") | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  |     def index(): | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |         raise Exception("test") | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     app.testing = False | 
					
						
							|  |  |  |     stream = StringIO() | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |     rv = client.get("/", errors_stream=stream) | 
					
						
							| 
									
										
										
										
											2017-07-29 05:55:52 +08:00
										 |  |  |     assert rv.status_code == 500 | 
					
						
							|  |  |  |     assert rv.data | 
					
						
							|  |  |  |     err = stream.getvalue() | 
					
						
							| 
									
										
										
										
											2019-05-07 03:39:41 +08:00
										 |  |  |     assert "Exception on / [GET]" in err | 
					
						
							|  |  |  |     assert "Exception: test" in err |