Logger ====== Setup Logging ------------- This module sets up logging for the application. .. automodule:: emotion_detective.logger.logger :members: :undoc-members: :show-inheritance: - **setup_logging**: Sets up logging for the application. .. code-block:: bash from emotion_detective.logger.logger import setup_logging # Example usage logger = setup_logging() The `setup_logging` function configures a logger to output log messages to both a file and the console. The log messages include a timestamp, the log level, and the message. The log file is saved as 'logs/emotion_detective.txt'. Troubleshooting ~~~~~~~~~~~~~~~ If you encounter issues with the logger setup, consider the following troubleshooting steps: 1. **Check Log Directory:** Ensure that the `logs` directory exists and is writable. If it doesn't exist, create it manually: .. code-block:: bash mkdir logs 2. **File Permissions:** Verify that the file `logs/emotion_detective.txt` has the correct permissions and is writable by the application. 3. **Logger Configuration:** Make sure the logger is not being configured multiple times, which can lead to duplicate log entries. You can add a check to see if the logger has already been configured: .. code-block:: python if not logger.handlers: # Add handlers only if they haven't been added yet logger.addHandler(file_handler) logger.addHandler(console_handler) 4. **Logging Level:** Adjust the logging level as needed. The current setup is configured for `logging.INFO`. For more detailed logs, use `logging.DEBUG`. 5. **Console Output:** If console output is not visible, ensure the console handler is properly configured and not being suppressed by the logging level. Example Troubleshooting Code: .. code-block:: python import logging import os def setup_logging(): """ Sets up logging for the application. This function configures a logger to output log messages to both a file and the console. The log messages include a timestamp, the log level, and the message. The log file is saved as 'logs/emotion_detective.txt'. Returns: logging.Logger: Configured logger instance. Author: Andrea Tosheva """ # Set up logger logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) # Create log directory if it doesn't exist if not os.path.exists('logs'): os.makedirs('logs') # Create file handler and set formatter file_handler = logging.FileHandler("logs/emotion_detective.txt") formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") file_handler.setFormatter(formatter) # Create console handler and set formatter console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) # Add handlers to logger if they haven't been added yet if not logger.handlers: logger.addHandler(file_handler) logger.addHandler(console_handler) return logger