Add logging with .env support
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,3 +5,4 @@ dist/
|
||||
*.pyc
|
||||
__pycache__/
|
||||
*.spec
|
||||
*.log
|
||||
|
||||
48
src/main.py
48
src/main.py
@@ -1,4 +1,5 @@
|
||||
import csv
|
||||
import logging
|
||||
import os
|
||||
import tkinter as tk
|
||||
from tkinter import messagebox, ttk
|
||||
@@ -7,6 +8,9 @@ import matplotlib.pyplot as plt
|
||||
import pandas as pd
|
||||
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
|
||||
|
||||
import sys
|
||||
from dotenv import load_dotenv
|
||||
|
||||
|
||||
class MedTrackerApp:
|
||||
def __init__(self, root):
|
||||
@@ -17,7 +21,24 @@ class MedTrackerApp:
|
||||
# self.root.iconbitmap("app_icon.ico")
|
||||
# self.root.geometry("800x600")
|
||||
|
||||
self.filename = "thechart_data.csv"
|
||||
if len(sys.argv) > 1:
|
||||
script_name = sys.argv[0]
|
||||
first_argument = sys.argv[1]
|
||||
|
||||
if logger.level == logging.DEBUG:
|
||||
logger.debug(f"Script name: {script_name}")
|
||||
logger.debug(f"First argument: {first_argument}")
|
||||
|
||||
if os.path.exists(first_argument):
|
||||
self.filename = first_argument
|
||||
logger.info(f"Using data file: {first_argument}")
|
||||
else:
|
||||
self.filename = "thechart_data.csv"
|
||||
logger.warning(
|
||||
f"Data file {first_argument} does not exist."
|
||||
f" Using default file: {self.filename}"
|
||||
)
|
||||
|
||||
self.initialize_csv()
|
||||
|
||||
main_frame = ttk.Frame(self.root, padding="10")
|
||||
@@ -489,6 +510,7 @@ class MedTrackerApp:
|
||||
def update_graph(self, df: pd.DataFrame) -> None:
|
||||
self.ax.clear()
|
||||
if not df.empty:
|
||||
df["date"] = pd.to_datetime(df["date"])
|
||||
df = df.sort_values(by="date")
|
||||
df.set_index(keys="date", inplace=True)
|
||||
self.ax.plot(
|
||||
@@ -515,7 +537,31 @@ class MedTrackerApp:
|
||||
self.canvas.draw()
|
||||
|
||||
|
||||
def setup_logging() -> logging.Logger:
|
||||
load_dotenv()
|
||||
log_file = os.getenv("LOG_FILE", "/tmp/thechart.log")
|
||||
if not os.path.exists(os.path.dirname(log_file)):
|
||||
os.makedirs(os.path.dirname(log_file), exist_ok=True)
|
||||
|
||||
log_level = os.getenv("LOG_LEVEL", "INFO").upper()
|
||||
if log_level not in ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]:
|
||||
log_level = "DEBUG"
|
||||
|
||||
logging.basicConfig(
|
||||
level=getattr(logging, log_level),
|
||||
format="%(asctime)s - %(levelname)s - %(message)s",
|
||||
handlers=[
|
||||
logging.FileHandler(log_file),
|
||||
logging.StreamHandler(sys.stdout),
|
||||
],
|
||||
)
|
||||
logger = logging.getLogger()
|
||||
|
||||
return logger
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
logger = setup_logging()
|
||||
root = tk.Tk()
|
||||
app = MedTrackerApp(root)
|
||||
root.mainloop()
|
||||
|
||||
Reference in New Issue
Block a user