# This file is part of HYLOA - HYsteresis LOop Analyzer.
# Copyright (C) 2024 Francesco Zeno Costanzo
# HYLOA is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# HYLOA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with HYLOA. If not, see <https://www.gnu.org/licenses/>.
"""
Code for logger setup
"""
import logging
from PyQt5.QtWidgets import QFileDialog, QMessageBox
[docs]
def setup_logging(log_file):
'''
Configures logging to the specified file.
Parameters
----------
log_file : str
Path to the log file.
'''
try:
# Remove any existing handlers
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)
logging.basicConfig(
filename=log_file,
level=logging.INFO,
encoding="utf-8",
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
logging.info("Start of log session.")
logging.info(f"Logging configured: write on {log_file}")
except Exception as e:
raise Exception(f"Error while configuring logging: {e}")
[docs]
def start_logging(app_instance, parent_widget=None):
'''
Starts the logging session by selecting a file and configuring the logger.
Parameters
----------
app_instance : MainApp
Instance of the main application class
parent_widget : QWidget
The parent window for dialog placement (optional)
'''
if app_instance.logger is not None:
QMessageBox.information(
parent_widget,
"Info",
"Logger already configured."
)
return
# Inform the user that the file will be appended to if it already exists
QMessageBox.information(
parent_widget,
"Info",
"If you choose an existing file, writing will be queued, without overwriting."
)
# Let the user choose the file
log_file, _ = QFileDialog.getSaveFileName(
parent_widget,
"Select the log file",
"",
"Log Files (*.log);;Tutti i file (*)"
)
# Ensure .log extension
if log_file and not log_file.endswith('.log'):
log_file += '.log'
if log_file:
try:
setup_logging(log_file)
app_instance.logger = logging.getLogger(__name__)
app_instance.logger.info("Logging configured successfully.")
app_instance.logger_path = log_file
QMessageBox.information(
parent_widget,
"Logging Started",
f"The log will be written on the file:\n{log_file}"
)
app_instance.open_default_panels()
except Exception as e:
QMessageBox.critical(
parent_widget,
"Error",
f"Error while configuring logging:\n{e}"
)
else:
QMessageBox.critical(
parent_widget,
"Error",
"Please select a valid file for the log."
)