diff --git a/examples/better_logging.py b/examples/better_logging.py new file mode 100644 index 0000000..3d0f44a --- /dev/null +++ b/examples/better_logging.py @@ -0,0 +1,32 @@ +# This example just show how to use python logging to log requests + +from socketify import App +import logging +# Setup log format +logging.basicConfig( + format='%(asctime)s [%(levelname)s] %(message)s', level=logging.INFO +) + +# simply devlog high-order function, you can also create an middleware to use logging, see middleware_router.py and middleware.py +def devlog(handler): + def devlog_route(res, req): + logging.info(f'{req.get_method()} {req.get_full_url()} {req.get_headers()=}') + handler(res, req) + return devlog_route + +# Now is just use the devlog function or middleware + +app = App() + +def home(res, req): + res.end("Hello World!") + +app.get("/", devlog(home)) + +app.listen( + 3000, + lambda config: logging.info("Listening on port http://localhost:%d now\n" % config.port), +) +app.run() + + diff --git a/examples/middleware_async.py b/examples/middleware_async.py index 18eeced..0141b47 100644 --- a/examples/middleware_async.py +++ b/examples/middleware_async.py @@ -19,6 +19,7 @@ def auth(route): params = req.get_parameters() # get queries will preserve all queries inside req after await queries = req.get_queries() + # or just use req.preserve() to preserve all user = await get_user(headers.get("authorization", None)) if user: diff --git a/src/socketify/loop.py b/src/socketify/loop.py index 66efd2e..00a7af2 100644 --- a/src/socketify/loop.py +++ b/src/socketify/loop.py @@ -1,7 +1,5 @@ import asyncio -import threading -import time - +import logging from .uv import UVLoop import asyncio @@ -17,7 +15,7 @@ def future_handler(future, loop, exception_handler, response): else: try: # just log in console the error to call attention - print("Uncaught Exception: %s" % str(error)) + logging.error("Uncaught Exception: %s" % str(error)) if response != None: response.write_status(500).end("Internal Error") finally: diff --git a/src/socketify/socketify.py b/src/socketify/socketify.py index c6466d4..469789b 100644 --- a/src/socketify/socketify.py +++ b/src/socketify/socketify.py @@ -6,17 +6,15 @@ import inspect import json import mimetypes import os -from os import path import platform import signal -from threading import Thread, local, Lock import uuid from urllib.parse import parse_qs, quote_plus, unquote_plus +import logging from .loop import Loop from .status_codes import status_codes from .helpers import static_route -from queue import SimpleQueue mimetypes.init() @@ -296,7 +294,7 @@ def uws_missing_server_name(hostname, hostname_length, user_data): else: handler(data) except Exception as err: - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -323,7 +321,7 @@ def uws_websocket_factory_drain_handler(ws, user_data): except Exception as err: if dispose: app._ws_factory.dispose(instances) - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -339,7 +337,7 @@ def uws_websocket_drain_handler(ws, user_data): else: handler(ws) except Exception as err: - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -366,7 +364,7 @@ def uws_websocket_factory_open_handler(ws, user_data): except Exception as err: if dispose: app._ws_factory.dispose(instances) - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -383,7 +381,7 @@ def uws_websocket_open_handler(ws, user_data): else: handler(ws) except Exception as err: - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -419,7 +417,7 @@ def uws_websocket_factory_message_handler(ws, message, length, opcode, user_data except Exception as err: if dispose: app._ws_factory.dispose(instances) - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -445,7 +443,7 @@ def uws_websocket_message_handler(ws, message, length, opcode, user_data): handler(ws, data, opcode) except Exception as err: - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -478,7 +476,7 @@ def uws_websocket_factory_pong_handler(ws, message, length, user_data): except Exception as err: if dispose: app._ws_factory.dispose(instances) - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @ffi.callback("void(uws_websocket_t*, const char*, size_t, void*)") @@ -498,7 +496,7 @@ def uws_websocket_pong_handler(ws, message, length, user_data): else: handler(ws, data) except Exception as err: - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -532,7 +530,7 @@ def uws_websocket_factory_ping_handler(ws, message, length, user_data): except Exception as err: if dispose: app._ws_factory.dispose(instances) - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -555,7 +553,7 @@ def uws_websocket_ping_handler(ws, message, length, user_data): handler(ws, data) except Exception as err: - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -600,7 +598,7 @@ def uws_websocket_factory_close_handler(ws, code, message, length, user_data): app._ws_factory.dispose(instances) except Exception as err: - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -638,7 +636,7 @@ def uws_websocket_close_handler(ws, code, message, length, user_data): SocketRefs.pop(key, None) except Exception as err: - print( + logging.error( "Uncaught Exception: %s" % str(err) ) # just log in console the error to call attention @@ -846,7 +844,7 @@ def uws_generic_cork_handler(res, user_data): raise RuntimeError("Calls inside cork must be sync") response._cork_handler(response) except Exception as err: - print("Error on cork handler %s" % str(err)) + logging.error("Error on cork handler %s" % str(err)) @ffi.callback("void(void*)") @@ -858,7 +856,7 @@ def uws_ws_cork_handler(user_data): raise RuntimeError("Calls inside cork must be sync") ws._cork_handler(ws) except Exception as err: - print("Error on cork handler %s" % str(err)) + logging.error("Error on cork handler %s" % str(err)) # Compressor mode is 8 lowest bits where HIGH4(windowBits), LOW4(memLevel). @@ -936,7 +934,7 @@ class WebSocket: ) self._for_each_topic_handler(topic) except Exception as err: - print("Error on for each topic handler %s" % str(err)) + logging.error("Error on for each topic handler %s" % str(err)) # uuid for socket data, used to free data after socket closes def get_user_data_uuid(self): @@ -1502,7 +1500,7 @@ class AppRequest: ) self._for_each_header_handler(key, value) except Exception as err: - print("Error on data handler %s" % str(err)) + logging.error("Error on data handler %s" % str(err)) return self @@ -1562,7 +1560,7 @@ class AppResponse: else: self._aborted_handler(self) except Exception as err: - print("Error on abort handler %s" % str(err)) + logging.error("Error on abort handler %s" % str(err)) return self def trigger_data_handler(self, data, is_end): @@ -1575,7 +1573,7 @@ class AppResponse: else: self._data_handler(self, data, is_end) except Exception as err: - print("Error on data handler %s" % str(err)) + logging.error("Error on data handler %s" % str(err)) return self @@ -1590,7 +1588,7 @@ class AppResponse: raise RuntimeError("AppResponse.on_writable must be synchronous") return self._writable_handler(self, offset) except Exception as err: - print("Error on writable handler %s" % str(err)) + logging.error("Error on writable handler %s" % str(err)) return False return False @@ -2529,7 +2527,7 @@ class App: def trigger_error(self, error, response, request): if self.error_handler == None: try: - print( + logging.error( "Uncaught Exception: %s" % str(error) ) # just log in console the error to call attention response.write_status(500).end("Internal Error") @@ -2546,7 +2544,7 @@ class App: except Exception as error: try: # Error handler got an error :D - print( + logging.error( "Uncaught Exception: %s" % str(error) ) # just log in console the error to call attention response.write_status(500).end("Internal Error")