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

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

เจาะลึกเรื่องราวของ Eileen Gu นักสกีฟรีสไตล์ผู้สร้างประวัติศาสตร์ในโอลิมปิก 2026 สถิติที่ไม่เคยมีมาก่อน ประเด็นถกเถียง และความแข็งแกร่งส่วนตัวที่ทำให้เธอก้าวสู่ระดับโลก

By ทีมงาน devdog
วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

เจาะลึกวันพระและความสำคัญของวันมาฆบูชา 2569 ทั้งวันหยุดราชการ ธนาคาร กิจกรรมเวียนเทียนต้นไม้ และผลกระทบต่อบริการขนส่ง เตรียมตัววางแผนทำบุญและพักผ่อน

By ทีมงาน devdog
ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

เจาะลึกงานวิวาห์ "บังมัดคลองตัน" กับ "ต้นข้าว มิสแกรนด์" พร้อมเหตุผลจากใจเจ้าสาวที่เลือกความรักเหนือกาลเวลาและคำวิจารณ์ สู่การเริ่มต้นชีวิตคู่ที่สะท้อนการให้อภัย

By ทีมงาน devdog
ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

เจาะลึกไฮไลท์บอลไทยลีก 2 ของมหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรง ชัยชนะสำคัญจาก ชิตชนก และบทบาทโค้ชดุสิต สู่เส้นทางเพลย์ออฟที่น่าจับตา!

By ทีมงาน devdog