SIN-Deploy-Bot
Deploy via automated script [skip ci]
81225b0
Raw
History Blame Contribute Delete
1.38 kB
"""Simple structured logger."""
import json
import sys
from datetime import datetime
from pathlib import Path
class Logger:
"""Structured logging for cloud coder agents."""
def __init__(self, log_file: Path = None):
self.log_file = log_file or Path("/tmp/cloud-coder.log")
self.ensure_log_dir()
def ensure_log_dir(self):
"""Ensure log directory exists."""
self.log_file.parent.mkdir(parents=True, exist_ok=True)
def log(self, level: str, message: str, **kwargs):
"""Write a structured log entry."""
entry = {
"timestamp": datetime.utcnow().isoformat() + "Z",
"level": level,
"message": message,
**kwargs,
}
line = json.dumps(entry)
print(line, file=sys.stderr)
with open(self.log_file, "a") as f:
f.write(line + "\n")
def info(self, message: str, **kwargs):
self.log("INFO", message, **kwargs)
def warning(self, message: str, **kwargs):
self.log("WARNING", message, **kwargs)
def error(self, message: str, **kwargs):
self.log("ERROR", message, **kwargs)
def task(self, task_id: str, status: str, **kwargs):
self.log(
"TASK", f"Task {task_id} status: {status}", task_id=task_id, status=status, **kwargs
)
# Global logger instance
logger = Logger()