elk_stack/log_project/log_project.py
2025-09-14 20:02:12 +03:30

67 lines
2.2 KiB
Python

import logging
import os
import json
from datetime import datetime, timezone
from logging.handlers import RotatingFileHandler
from pythonjsonlogger import jsonlogger
import logging.config
log_dir = os.path.join(os.path.dirname(__file__), 'log')
# اگر فولدر وجود نداشت، ایجادش کن
if not os.path.exists(log_dir):
os.makedirs(log_dir)
log_file = os.path.join(log_dir, 'app.log')
logger = logging.getLogger("structured_logger")
logger.setLevel(logging.INFO)
handler = RotatingFileHandler(log_file, maxBytes=3*1024*1024, backupCount=5)
# فرمت لاگ به صورت JSON
class JsonFormatter(logging.Formatter):
def format(self, record):
log_record = {
# "timestamp": datetime.now().isoformat(),
"timestamp": datetime.now(timezone.utc).isoformat(),
"level": record.levelname,
"message": record.getMessage(),
# فیلدهای دلخواه
"user_id": getattr(record, "user_id", None),
"action": getattr(record, "action", None),
"status": getattr(record, "status", None)
}
return json.dumps(log_record, ensure_ascii=False)
handler.setFormatter(JsonFormatter())
logger.addHandler(handler)
# logging_file = "logging.ini"
# logging_file = os.path.join(os.path.dirname(__file__), logging_file)
# logging.config.fileConfig(logging_file)
# logger = logging.getLogger(__name__)
# file_handler.setFormatter(JsonFormatter())
# logger.addHandler(file_handler)
# تابع برای تولید لاگ با فیلدهای دلخواه
def generate_logs(x):
x = x * 4
logger.info("برنامه شروع شد", extra={"user_id": x, "action": "start", "status": "ok"})
logger.warning("هشدار شبیه‌سازی شد", extra={"user_id": x+1, "action": "warn_test", "status": "warning"})
logger.error("خطا شبیه‌سازی شد", extra={"user_id": x+2, "action": "error_test", "status": "error"})
logger.info("لاگ سفارشی", extra={"user_id": x+3, "action": "custom", "status": "ok"})
def main():
offset = 208000//4
for i in range(1):
generate_logs(i + offset)
if __name__ == "__main__":
main()
# print(f"لاگ‌ها در فایل {log_file} ذخیره شدند")