Configure log folder in json file
This commit is contained in:
parent
7c30f7a720
commit
4ef74c42c3
5 changed files with 25 additions and 20 deletions
|
|
@ -11,5 +11,6 @@
|
||||||
"/background_detect/": "openflexure_microscope_server.things.background_detect:BackgroundDetectThing",
|
"/background_detect/": "openflexure_microscope_server.things.background_detect:BackgroundDetectThing",
|
||||||
"/capture/": "openflexure_microscope_server.things.capture:CaptureThing"
|
"/capture/": "openflexure_microscope_server.things.capture:CaptureThing"
|
||||||
},
|
},
|
||||||
"settings_folder": "/var/openflexure/settings/"
|
"settings_folder": "/var/openflexure/settings/",
|
||||||
|
"log_folder": "/var/openflexure/logs/"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,5 +11,6 @@
|
||||||
"/background_detect/": "openflexure_microscope_server.things.background_detect:BackgroundDetectThing",
|
"/background_detect/": "openflexure_microscope_server.things.background_detect:BackgroundDetectThing",
|
||||||
"/capture/": "openflexure_microscope_server.things.capture:CaptureThing"
|
"/capture/": "openflexure_microscope_server.things.capture:CaptureThing"
|
||||||
},
|
},
|
||||||
"settings_folder": "./openflexure/settings/"
|
"settings_folder": "./openflexure/settings/",
|
||||||
|
"log_folder": "./openflexure/logs/"
|
||||||
}
|
}
|
||||||
|
|
@ -8,8 +8,9 @@
|
||||||
"/system_control/": "openflexure_microscope_server.things.system_control:SystemControlThing",
|
"/system_control/": "openflexure_microscope_server.things.system_control:SystemControlThing",
|
||||||
"/settings/": "openflexure_microscope_server.things.settings_manager:SettingsManager",
|
"/settings/": "openflexure_microscope_server.things.settings_manager:SettingsManager",
|
||||||
"/smart_scan/": "openflexure_microscope_server.things.smart_scan:SmartScanThing",
|
"/smart_scan/": "openflexure_microscope_server.things.smart_scan:SmartScanThing",
|
||||||
"/background_detect/": "openflexure_microscope_server.things.smart_scan:BackgroundDetectThing",
|
"/background_detect/": "openflexure_microscope_server.things.background_detect:BackgroundDetectThing",
|
||||||
"/api_test/": "openflexure_microscope_server.things.test:APITestThing"
|
"/capture/": "openflexure_microscope_server.things.capture:CaptureThing"
|
||||||
},
|
},
|
||||||
"settings_folder": "./openflexure_settings/"
|
"settings_folder": "./openflexure/settings/",
|
||||||
|
"log_folder": "./openflexure/logs/"
|
||||||
}
|
}
|
||||||
|
|
@ -4,17 +4,19 @@ import os
|
||||||
|
|
||||||
from fastapi.responses import PlainTextResponse
|
from fastapi.responses import PlainTextResponse
|
||||||
|
|
||||||
OFM_LOG_FOLDER = "/var/openflexure/logs/"
|
OFM_LOG_FILE = None
|
||||||
OFM_LOG_FILE = os.path.join(OFM_LOG_FOLDER, "openflexure_microscope.log")
|
|
||||||
|
|
||||||
|
|
||||||
def configure_logging():
|
def configure_logging(log_folder):
|
||||||
root_logger = logging.getLogger()
|
root_logger = logging.getLogger()
|
||||||
root_logger.setLevel(logging.INFO)
|
root_logger.setLevel(logging.INFO)
|
||||||
|
# Explictly make OFM_LOG_FILE a global so it can be updated based on log settings
|
||||||
|
global OFM_LOG_FILE
|
||||||
|
OFM_LOG_FILE = os.path.join(log_folder, "openflexure_microscope.log")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if not os.path.exists(OFM_LOG_FOLDER):
|
if not os.path.exists(log_folder):
|
||||||
os.makedirs(OFM_LOG_FOLDER)
|
os.makedirs(log_folder)
|
||||||
handler = RotatingFileHandler(
|
handler = RotatingFileHandler(
|
||||||
filename=OFM_LOG_FILE,
|
filename=OFM_LOG_FILE,
|
||||||
mode="a",
|
mode="a",
|
||||||
|
|
@ -38,7 +40,7 @@ def configure_logging():
|
||||||
|
|
||||||
def retrieve_log() -> PlainTextResponse:
|
def retrieve_log() -> PlainTextResponse:
|
||||||
"""
|
"""
|
||||||
Returns logs since we started running the server, up to a maxiumum of
|
Returns logs since we started running the server, up to a maximum of
|
||||||
250 messages. This log is the one shown in the UI and on the logging page.
|
250 messages. This log is the one shown in the UI and on the logging page.
|
||||||
|
|
||||||
It does not include any of the `uvicorn.access` logs as these are emmitted
|
It does not include any of the `uvicorn.access` logs as these are emmitted
|
||||||
|
|
@ -57,6 +59,10 @@ def retrieve_log_from_file() -> PlainTextResponse:
|
||||||
Note this is read and then sent as otherwise it causes a RuntimeError if it
|
Note this is read and then sent as otherwise it causes a RuntimeError if it
|
||||||
is written to while sending through FileResponse
|
is written to while sending through FileResponse
|
||||||
"""
|
"""
|
||||||
|
if OFM_LOG_FILE is None:
|
||||||
|
raise RuntimeError(
|
||||||
|
"Cannot retrieve log file as logging directory hasn't been configured"
|
||||||
|
)
|
||||||
with open(OFM_LOG_FILE, "r", encoding="utf-8") as logfile:
|
with open(OFM_LOG_FILE, "r", encoding="utf-8") as logfile:
|
||||||
full_log = logfile.read()
|
full_log = logfile.read()
|
||||||
return PlainTextResponse(full_log)
|
return PlainTextResponse(full_log)
|
||||||
|
|
@ -86,7 +92,6 @@ class OFMHandler(logging.Handler):
|
||||||
"""
|
"""
|
||||||
Emit will save the logged record to the log
|
Emit will save the logged record to the log
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Basic filter for now that simply stops uvicorn.access logs
|
# Basic filter for now that simply stops uvicorn.access logs
|
||||||
# These are the logs each time an API endpoint is accessed
|
# These are the logs each time an API endpoint is accessed
|
||||||
# This is only the log for the UI.
|
# This is only the log for the UI.
|
||||||
|
|
|
||||||
|
|
@ -9,14 +9,11 @@ from .legacy_api import add_v2_endpoints
|
||||||
from ..logging import configure_logging, retrieve_log, retrieve_log_from_file
|
from ..logging import configure_logging, retrieve_log, retrieve_log_from_file
|
||||||
|
|
||||||
|
|
||||||
def customise_server(server: ThingServer):
|
def customise_server(server: ThingServer, log_folder: str):
|
||||||
"""Customise the server with additional endpoints, etc."""
|
"""Customise the server with additional endpoints, etc."""
|
||||||
configure_logging()
|
configure_logging(log_folder)
|
||||||
add_v2_endpoints(server)
|
add_v2_endpoints(server)
|
||||||
try:
|
|
||||||
add_static_files(server.app)
|
add_static_files(server.app)
|
||||||
except RuntimeError:
|
|
||||||
print("Failed to add static files - you will have to do without them!")
|
|
||||||
|
|
||||||
# Add an endpoint to get the logs - (directly calling the FastAPI decorator)
|
# Add an endpoint to get the logs - (directly calling the FastAPI decorator)
|
||||||
server.app.get("/log/")(retrieve_log)
|
server.app.get("/log/")(retrieve_log)
|
||||||
|
|
@ -27,10 +24,10 @@ def serve_from_cli(argv: Optional[list[str]] = None):
|
||||||
"""Start the server from the command line"""
|
"""Start the server from the command line"""
|
||||||
args = cli.parse_args(argv)
|
args = cli.parse_args(argv)
|
||||||
try:
|
try:
|
||||||
config, server = None, None
|
|
||||||
config = cli.config_from_args(args)
|
config = cli.config_from_args(args)
|
||||||
|
log_folder = config.get("log_folder", "./openflexure/logs")
|
||||||
server = cli.server_from_config(config)
|
server = cli.server_from_config(config)
|
||||||
customise_server(server)
|
customise_server(server, log_folder)
|
||||||
uvicorn.run(
|
uvicorn.run(
|
||||||
server.app,
|
server.app,
|
||||||
host=args.host,
|
host=args.host,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue