mirror of
https://github.com/GNS3/gns3-server.git
synced 2024-12-19 04:47:54 +00:00
Overwrite uvicorn loggers.
This commit is contained in:
parent
13da8aa8f5
commit
97a91f1899
@ -21,6 +21,7 @@ import json
|
|||||||
import uuid
|
import uuid
|
||||||
import socket
|
import socket
|
||||||
import shutil
|
import shutil
|
||||||
|
import asyncio
|
||||||
|
|
||||||
from ..config import Config
|
from ..config import Config
|
||||||
from .project import Project
|
from .project import Project
|
||||||
@ -91,7 +92,7 @@ class Controller:
|
|||||||
user=server_config.get("user", ""),
|
user=server_config.get("user", ""),
|
||||||
password=server_config.get("password", ""),
|
password=server_config.get("password", ""),
|
||||||
force=True,
|
force=True,
|
||||||
connect=False)
|
connect=True)
|
||||||
except ControllerError:
|
except ControllerError:
|
||||||
log.fatal("Cannot access to the local server, make sure something else is not running on the TCP port {}".format(port))
|
log.fatal("Cannot access to the local server, make sure something else is not running on the TCP port {}".format(port))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
@ -311,7 +312,7 @@ class Controller:
|
|||||||
self._computes[compute.id] = compute
|
self._computes[compute.id] = compute
|
||||||
self.save()
|
self.save()
|
||||||
if connect:
|
if connect:
|
||||||
await compute.connect()
|
asyncio.ensure_future(compute.connect())
|
||||||
self.notification.controller_emit("compute.created", compute.__json__())
|
self.notification.controller_emit("compute.created", compute.__json__())
|
||||||
return compute
|
return compute
|
||||||
else:
|
else:
|
||||||
|
@ -105,7 +105,7 @@ class Compute:
|
|||||||
|
|
||||||
def _session(self):
|
def _session(self):
|
||||||
if self._http_session is None or self._http_session.closed is True:
|
if self._http_session is None or self._http_session.closed is True:
|
||||||
connector = aiohttp.TCPConnector(force_close=True)
|
connector = aiohttp.TCPConnector(limit=None, force_close=True)
|
||||||
self._http_session = aiohttp.ClientSession(connector=connector)
|
self._http_session = aiohttp.ClientSession(connector=connector)
|
||||||
return self._http_session
|
return self._http_session
|
||||||
|
|
||||||
@ -464,7 +464,7 @@ class Compute:
|
|||||||
elif response.type == aiohttp.WSMsgType.CLOSED:
|
elif response.type == aiohttp.WSMsgType.CLOSED:
|
||||||
pass
|
pass
|
||||||
break
|
break
|
||||||
except aiohttp.ClientError as e:
|
except aiohttp.client_exceptions.ClientResponseError as e:
|
||||||
log.error("Client response error received on compute '{}' WebSocket '{}': {}".format(self._id, ws_url,e))
|
log.error("Client response error received on compute '{}' WebSocket '{}': {}".format(self._id, ws_url,e))
|
||||||
finally:
|
finally:
|
||||||
self._connected = False
|
self._connected = False
|
||||||
@ -594,8 +594,8 @@ class Compute:
|
|||||||
"""
|
"""
|
||||||
Forward a call to the emulator on compute
|
Forward a call to the emulator on compute
|
||||||
"""
|
"""
|
||||||
|
action = "/{}/{}".format(type, path)
|
||||||
try:
|
try:
|
||||||
action = "/{}/{}".format(type, path)
|
|
||||||
res = await self.http_query(method, action, data=data, timeout=None)
|
res = await self.http_query(method, action, data=data, timeout=None)
|
||||||
except aiohttp.ServerDisconnectedError:
|
except aiohttp.ServerDisconnectedError:
|
||||||
raise ControllerError(f"Connection lost to {self._id} during {method} {action}")
|
raise ControllerError(f"Connection lost to {self._id} during {method} {action}")
|
||||||
|
@ -57,6 +57,11 @@ class ColouredFormatter(logging.Formatter):
|
|||||||
colour = self.RESET
|
colour = self.RESET
|
||||||
|
|
||||||
message = message.replace("#RESET#", self.RESET)
|
message = message.replace("#RESET#", self.RESET)
|
||||||
|
|
||||||
|
# do not show uvicorn filename and line number in logs
|
||||||
|
if record.name.startswith("uvicorn"):
|
||||||
|
message = message.replace(f"{record.name}:{record.lineno}", "uvicorn")
|
||||||
|
|
||||||
message = '{colour}{message}{reset}'.format(colour=colour, message=message, reset=self.RESET)
|
message = '{colour}{message}{reset}'.format(colour=colour, message=message, reset=self.RESET)
|
||||||
|
|
||||||
return message
|
return message
|
||||||
@ -108,7 +113,7 @@ class LogFilter:
|
|||||||
This filter some noise from the logs
|
This filter some noise from the logs
|
||||||
"""
|
"""
|
||||||
def filter(record):
|
def filter(record):
|
||||||
if record.name == "aiohttp.access" and "/settings" in record.msg and "200" in record.msg:
|
if "/settings" in record.msg and "200" in record.msg:
|
||||||
return 0
|
return 0
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
@ -150,11 +155,11 @@ def init_logger(level, logfile=None, max_bytes=10000000, backup_count=10, compre
|
|||||||
stream_handler.formatter = ColouredFormatter("{asctime} {levelname} {filename}:{lineno} {message}", "%Y-%m-%d %H:%M:%S", "{")
|
stream_handler.formatter = ColouredFormatter("{asctime} {levelname} {filename}:{lineno} {message}", "%Y-%m-%d %H:%M:%S", "{")
|
||||||
else:
|
else:
|
||||||
stream_handler = ColouredStreamHandler(sys.stdout)
|
stream_handler = ColouredStreamHandler(sys.stdout)
|
||||||
stream_handler.formatter = ColouredFormatter("{asctime} {levelname} {filename}:{lineno}#RESET# {message}", "%Y-%m-%d %H:%M:%S", "{")
|
stream_handler.formatter = ColouredFormatter("{asctime} {levelname} {name}:{lineno}#RESET# {message}", "%Y-%m-%d %H:%M:%S", "{")
|
||||||
if quiet:
|
if quiet:
|
||||||
stream_handler.addFilter(logging.Filter(name="user_facing"))
|
stream_handler.addFilter(logging.Filter(name="user_facing"))
|
||||||
logging.getLogger('user_facing').propagate = False
|
logging.getLogger("user_facing").propagate = False
|
||||||
if level > logging.DEBUG:
|
if level > logging.DEBUG:
|
||||||
stream_handler.addFilter(LogFilter)
|
stream_handler.addFilter(LogFilter)
|
||||||
logging.basicConfig(level=level, handlers=[stream_handler])
|
logging.basicConfig(level=level, handlers=[stream_handler])
|
||||||
return logging.getLogger('user_facing')
|
return stream_handler
|
||||||
|
@ -23,7 +23,6 @@ Start the program. Use main.py to load it.
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import datetime
|
import datetime
|
||||||
import sys
|
|
||||||
import locale
|
import locale
|
||||||
import argparse
|
import argparse
|
||||||
import psutil
|
import psutil
|
||||||
@ -257,14 +256,19 @@ def run():
|
|||||||
if args.debug:
|
if args.debug:
|
||||||
level = logging.DEBUG
|
level = logging.DEBUG
|
||||||
|
|
||||||
user_log = init_logger(level, logfile=args.log, max_bytes=int(args.logmaxsize), backup_count=int(args.logbackupcount),
|
stream_handler = init_logger(level,
|
||||||
compression=args.logcompression, quiet=args.quiet)
|
logfile=args.log,
|
||||||
user_log.info("GNS3 server version {}".format(__version__))
|
max_bytes=int(args.logmaxsize),
|
||||||
|
backup_count=int(args.logbackupcount),
|
||||||
|
compression=args.logcompression,
|
||||||
|
quiet=args.quiet)
|
||||||
|
|
||||||
|
log.info("GNS3 server version {}".format(__version__))
|
||||||
current_year = datetime.date.today().year
|
current_year = datetime.date.today().year
|
||||||
user_log.info("Copyright (c) 2007-{} GNS3 Technologies Inc.".format(current_year))
|
log.info("Copyright (c) 2007-{} GNS3 Technologies Inc.".format(current_year))
|
||||||
|
|
||||||
for config_file in Config.instance().get_config_files():
|
for config_file in Config.instance().get_config_files():
|
||||||
user_log.info("Config file {} loaded".format(config_file))
|
log.info("Config file {} loaded".format(config_file))
|
||||||
|
|
||||||
set_config(args)
|
set_config(args)
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = Config.instance().get_section_config("Server")
|
||||||
@ -283,8 +287,10 @@ def run():
|
|||||||
if sys.version_info < (3, 6, 0):
|
if sys.version_info < (3, 6, 0):
|
||||||
raise SystemExit("Python 3.6 or higher is required")
|
raise SystemExit("Python 3.6 or higher is required")
|
||||||
|
|
||||||
user_log.info("Running with Python {major}.{minor}.{micro} and has PID {pid}".format(major=sys.version_info[0], minor=sys.version_info[1],
|
log.info("Running with Python {major}.{minor}.{micro} and has PID {pid}".format(major=sys.version_info[0],
|
||||||
micro=sys.version_info[2], pid=os.getpid()))
|
minor=sys.version_info[1],
|
||||||
|
micro=sys.version_info[2],
|
||||||
|
pid=os.getpid()))
|
||||||
|
|
||||||
# check for the correct locale (UNIX/Linux only)
|
# check for the correct locale (UNIX/Linux only)
|
||||||
locale_check()
|
locale_check()
|
||||||
@ -304,8 +310,25 @@ def run():
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
log.info("Starting server on {}:{}".format(host, port))
|
log.info("Starting server on {}:{}".format(host, port))
|
||||||
#uvicorn.run("app:app", host=host, port=port, log_level="info")#, reload=True)
|
|
||||||
config = uvicorn.Config("gns3server.app:app", host=host, port=port, access_log=True)
|
# only show uvicorn access logs in debug mode
|
||||||
|
access_log = False
|
||||||
|
if log.getEffectiveLevel() == logging.DEBUG:
|
||||||
|
access_log = True
|
||||||
|
|
||||||
|
config = uvicorn.Config("gns3server.app:app", host=host, port=port, access_log=access_log)
|
||||||
|
|
||||||
|
# overwrite uvicorn loggers with our own logger
|
||||||
|
for uvicorn_logger_name in ("uvicorn", "uvicorn.error"):
|
||||||
|
uvicorn_logger = logging.getLogger(uvicorn_logger_name)
|
||||||
|
uvicorn_logger.handlers = [stream_handler]
|
||||||
|
uvicorn_logger.propagate = False
|
||||||
|
|
||||||
|
if access_log:
|
||||||
|
uvicorn_logger = logging.getLogger("uvicorn.access")
|
||||||
|
uvicorn_logger.handlers = [stream_handler]
|
||||||
|
uvicorn_logger.propagate = False
|
||||||
|
|
||||||
server = uvicorn.Server(config)
|
server = uvicorn.Server(config)
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
loop.run_until_complete(server.serve())
|
loop.run_until_complete(server.serve())
|
||||||
|
Loading…
Reference in New Issue
Block a user