Python CLI ง่ายๆ บันทึกเหตุการณ์เพื่อ Compliance

สวัสดีครับ

โปรแกรมเมอร์แบบเราๆ เจอไฟล์ Config เยอะแยะไปหมดเลยใช่ไหมครับ บางทีก็อยากเช็คว่ามันถูกต้องตามกฏระเบียบหรือเปล่า หรือมีใครมาแก้ตอนไหนบ้างนะ วันนี้ผมจะมาแชร์วิธีสร้าง Python CLI ง่ายๆ ที่ไม่แค่ช่วยเช็ค แต่ยังบันทึกทุกเหตุการณ์ไว้ด้วยระบบ Logging เพื่อให้เราเอาไปใช้ยืนยันเรื่อง Compliance หรือตรวจสอบความปลอดภัยได้เลยนะครับ

1. เตรียมโปรเจกต์กันก่อน

เรามาเริ่มต้นสร้างไฟล์ main.py กับ requirements.txt กันก่อนเลยนะครับ สำหรับ CLI ตัวนี้ ผมจะใช้ Click ไลบรารี่ดังๆ ที่ใช้ง่ายมากๆ ครับ

# requirements.txt
Click==8.1.7

จากนั้นก็ pip install -r requirements.txt ได้เลยครับ

2. โครงสร้าง CLI พื้นฐาน

มาดูโค้ด CLI ง่ายๆ ที่มีคำสั่ง check-config กันก่อนเลยนะ โค้ดนี้จะแค่จำลองว่าเรากำลังเช็ค Config บางอย่างอยู่นะครับ

# main.py
import click
import logging

# ตั้งค่า Logging พื้นฐานไว้ก่อน
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler(\"compliance_audit.log\"), # เก็บลงไฟล์
        logging.StreamHandler() # แสดงบน Console ด้วย
    ]
)
logger = logging.getLogger(__name__)

@click.group()
def cli():
    pass

@cli.command('check-config')
@click.option('--path', default='./config.txt', help='Path to the config file.')
def check_config(path):
    logger.info(f\"[Audit] เริ่มต้นตรวจสอบไฟล์ Config: {path}\")
    try:
        with open(path, 'r') as f:
            content = f.read()

        # จำลองการตรวจสอบ Config
        if \"secure_setting=true\" in content:
            logger.info(f\"[Audit] ตรวจพบการตั้งค่า 'secure_setting=true' ใน {path}. ผ่านเกณฑ์.\")
            click.echo(f\"Config ที่ {path} ดูดีนะครับ.\")
        else:
            logger.warning(f\"[Audit] ไม่พบ 'secure_setting=true' ใน {path}. อาจจะไม่ตรงตามเกณฑ์.\")
            click.echo(f\"Config ที่ {path} อาจจะต้องดูเพิ่มนะครับ.\")

        logger.info(f\"[Audit] ตรวจสอบไฟล์ Config: {path} เสร็จสิ้น.\")

    except FileNotFoundError:
        logger.error(f\"[Audit] ไม่พบไฟล์ Config ที่: {path}\")
        click.echo(f\"ไม่เจอไฟล์ Config ที่ {path} ครับ.\")
    except Exception as e:
        logger.critical(f\"[Audit] เกิดข้อผิดพลาดร้ายแรงขณะตรวจสอบไฟล์ {path}: {e}\")
        click.echo(f\"เกิดข้อผิดพลาด: {e}\")

if __name__ == '__main__':
    cli()

ลอง Save โค้ดนี้ แล้วสั่งรันใน Terminal แบบนี้นะครับ:

python main.py check-config

หรือจะระบุ Path ด้วย:

python main.py check-config --path ./my_app_config.cfg

3. เพิ่มระบบ Logging ให้ละเอียดขึ้น

เห็นไหมครับ ว่าผมฝัง logger.info, logger.warning, logger.error เข้าไปในโค้ดของเราแล้ว ทีนี้ไม่ว่า CLI ของเราจะทำอะไร มันก็จะถูกบันทึกไว้ในไฟล์ compliance_audit.log ที่เราตั้งค่าไว้เลยนะครับ พร้อมบอกเวลาด้วย ทำให้ง่ายต่อการตรวจสอบมากๆ ครับ

ลองสร้างไฟล์ config.txt หรือ my_app_config.cfg แล้วลองใส่ข้อความ "secure_setting=true" หรือไม่ใส่ดูนะครับ แล้วรัน CLI ของเราดู

ตัวอย่างไฟล์ config.txt (แบบผ่าน):

# config.txt
app_name=MySecureApp
version=1.0
secure_setting=true

ตัวอย่างไฟล์ config.txt (แบบไม่ผ่าน):

# config.txt
app_name=MyOtherApp
version=1.0
debug_mode=enabled

จากนั้นเราก็ไปดูในไฟล์ compliance_audit.log ได้เลยนะครับ จะเห็น Log ที่ละเอียด บอกว่าใครรัน (ถ้าเราเพิ่มข้อมูลผู้ใช้เข้าไปนะ), ทำอะไร, ผลเป็นยังไงบ้าง ครบเลยครับ แบบนี้ก็ช่วยเรื่อง Compliance ที่ต้องมีหลักฐานการตรวจสอบได้ดีมากๆ เลยครับ

4. ทำไม Logging ถึงสำคัญกับ Compliance?

การมี Log ที่ดี ไม่ได้แค่ช่วย Debug นะครับ แต่ยังเป็นเหมือน \"หลักฐาน\" สำคัญที่เราสามารถเอาไปใช้:

  • พิสูจน์ได้ว่าเราทำตามกฏ: เช่น มีกฏบอกว่า Config ต้องมีการตั้งค่า A, B, C เราก็ใช้ CLI ตัวนี้เช็คแล้วบันทึกผลได้เลยครับ
  • ตรวจสอบย้อนหลัง: ถ้ามีปัญหาอะไรเกิดขึ้น หรือมีคนมาบอกว่า Config ไม่ถูกต้อง เราก็ย้อนดู Log ได้ว่าตอนนั้นมันเกิดอะไรขึ้น ใครเป็นคนรันการตรวจสอบครั้งล่าสุด
  • แจ้งเตือนความผิดปกติ: ถ้าเราเห็น Warning/Error บ่อยๆ ใน Log ก็แปลว่าระบบของเราอาจจะมีช่องโหว่ หรือไม่ตรงตามมาตรฐานนะครับ

ผมว่าเทคนิคนี้มันง่ายและใช้ได้จริงมากๆ เลยนะครับ ลองเอาไปปรับใช้กับโปรเจกต์ของเพื่อนๆ ดูได้เลยครับ

cii3.net

Read more

รมว.พลังงาน ปรับส่วนต่าง E20 ห่างโซฮอล์ 95 ลิตรละ 3 บาท กระตุ้นคนไทยใช้พลังงานสะอาด พร้อมขอความร่วมมือประหยัดไฟ

รมว.พลังงาน ปรับส่วนต่าง E20 ห่างโซฮอล์ 95 ลิตรละ 3 บาท กระตุ้นคนไทยใช้พลังงานสะอาด พร้อมขอความร่วมมือประหยัดไฟ

รมว.พลังงาน ประกาศปรับส่วนต่าง E20 ห่างโซฮอล์ 95 เป็น 3 บาท กระตุ้นใช้เชื้อเพลิงชีวภาพ พร้อมรณรงค์คนไทยประหยัดพลังงาน สร้างความมั่นคงพลังงานของชาติ

By ทีมงาน devdog
DMC: จากปรากฏการณ์ดนตรีระดับโลกสู่แสงธรรมนำทางชีวิต

DMC: จากปรากฏการณ์ดนตรีระดับโลกสู่แสงธรรมนำทางชีวิต

สำรวจสองความหมายสำคัญของ DMC! จาก Run-DMC ผู้บุกเบิกการร่วมงานฮิปฮอป-ร็อกที่พลิกโฉมวงการ สู่ dmc.tv ช่องธรรมะนำทางจิตใจเพื่อสันติสุขภายใน.

By ทีมงาน devdog
PM 2.5 กลับมาคลุ้ง! เปิด 12 อันดับค่าฝุ่นสูงสุดในกรุงเทพมหานคร

PM 2.5 กลับมาคลุ้ง! เปิด 12 อันดับค่าฝุ่นสูงสุดในกรุงเทพมหานคร

อัปเดตสถานการณ์ PM 2.5 ในกรุงเทพฯ ประจำวันที่ 10 มี.ค. 2569 พร้อมเปิด 12 เขตค่าฝุ่นสูงสุด และคำแนะนำป้องกันผลกระทบต่อสุขภาพ

By ทีมงาน devdog
One Piece Netflix ภาค 2: การผจญภัยสู่แกรนด์ไลน์ พร้อมกิจกรรมสุดอลังการที่สวนลุมฯ!

One Piece Netflix ภาค 2: การผจญภัยสู่แกรนด์ไลน์ พร้อมกิจกรรมสุดอลังการที่สวนลุมฯ!

One Piece Netflix ซีซัน 2 "มุ่งหน้าสู่แกรนด์ไลน์" เตรียมลงจอ 10 มี.ค. 2569 พร้อมกิจกรรม "GRAND LINE IN THAILAND" ที่สวนลุมพินี ห้ามพลาด!

By ทีมงาน devdog