67 lines
2.2 KiB
Python
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} ذخیره شدند") |