Skip to content

Native Format (原生格式)

use_native_format 是 pretty-loguru v2.1.0+ 新增的功能,讓你可以使用接近 loguru 原生的日誌格式。

🎯 設計目標

  • 無縫遷移:從 loguru 遷移到 pretty-loguru 時保持格式一致性
  • 開發友好:使用檔案名稱定位程式碼更直觀
  • 保持簡潔:遵循 KISS 原則,一個參數控制格式切換

🔄 格式對比

Enhanced 格式 (預設)

python
from pretty_loguru import create_logger

logger = create_logger("my_service")
logger.info("用戶登入成功")

輸出:

2025-06-30 20:15:30 | INFO    12345 | my_service:login:42 - 用戶登入成功

Native 格式

python
from pretty_loguru import create_logger

logger = create_logger("my_service", use_native_format=True)
logger.info("用戶登入成功")

輸出:

2025-06-30 20:15:30.123 | INFO     | main.py:login:42 - 用戶登入成功

📊 詳細差異

特性Enhanced 格式Native 格式
顯示名稱自定義名稱檔案名稱
時間格式HH:mm:ssHH:mm:ss.SSS (含毫秒)
Process ID✅ 顯示❌ 隱藏
檔案命名[name]_timestamp.logname.log
適用場景生產環境、服務監控開發調試、遷移

🚀 使用場景

1. 從 Loguru 遷移

如果你原本使用 loguru:

python
# 原本的 loguru 代碼
from loguru import logger
logger.info("應用啟動")

遷移到 pretty-loguru 時保持格式:

python
# 遷移後的代碼
from pretty_loguru import create_logger
logger = create_logger("app", use_native_format=True)
logger.info("應用啟動")

2. 開發環境設定

python
import os

def create_app_logger():
    if os.getenv("ENV") == "development":
        return create_logger(
            "dev_app",
            use_native_format=True,  # 開發時使用原生格式
            level="DEBUG"
        )
    else:
        return create_logger(
            "prod_app", 
            use_native_format=False,  # 生產時使用增強格式
            level="INFO"
        )

3. 混合使用

python
# 同時使用兩種格式
debug_logger = create_logger("debug", use_native_format=True)
service_logger = create_logger("service", use_native_format=False) 

debug_logger.debug("變數檢查", var="value")      # 原生格式
service_logger.info("API 請求處理完成")           # 增強格式

🔧 配置範例

基本配置

python
from pretty_loguru import create_logger

# 最簡單的原生格式 logger
logger = create_logger(use_native_format=True)

完整配置

python
logger = create_logger(
    name="my_app",
    use_native_format=True,
    log_path="./logs",
    level="DEBUG",
    rotation="10MB",
    retention="7 days"
)

與預設值結合

python
logger = create_logger(
    name="api_service",
    use_native_format=True,
    preset="detailed"  # 可與預設值結合使用
)

📁 檔案命名差異

Enhanced 格式檔案命名

logs/
├── [api_service]_20250630-201530.log
├── [user_service]_20250630-201535.log
└── [order_service]_20250630-201540.log

Native 格式檔案命名

logs/
├── api_service.log
├── user_service.log
└── order_service.log

💡 最佳實踐

1. 環境區分

python
def setup_logger(service_name: str, env: str):
    return create_logger(
        name=service_name,
        use_native_format=(env == "development"),
        log_path=f"logs/{env}",
        level="DEBUG" if env == "development" else "INFO"
    )

2. 團隊協作

python
# 在團隊項目中提供統一的 logger 工廠
def create_team_logger(name: str, for_development: bool = False):
    return create_logger(
        name=name,
        use_native_format=for_development,
        log_path="logs",
        preset="detailed" if not for_development else None
    )

# 使用
prod_logger = create_team_logger("api")
dev_logger = create_team_logger("api", for_development=True)

3. 遷移策略

python
# 階段性遷移:先保持原生格式,再逐步切換
class LoggerMigration:
    def __init__(self, service_name: str):
        self.service_name = service_name
        self.migration_complete = os.getenv("LOGGER_MIGRATION", "false") == "true"
    
    def get_logger(self):
        return create_logger(
            name=self.service_name,
            use_native_format=not self.migration_complete,
            log_path="logs"
        )

❓ 常見問題

Q: 何時應該使用 Native 格式?

A:

  • 從 loguru 遷移時
  • 開發和調試階段
  • 需要快速定位程式碼檔案時
  • 偏好簡潔檔案命名時

Q: 能否動態切換格式?

A: 可以通過重新建立 logger 實現:

python
# 重新建立不同格式的 logger
logger = create_logger("app", use_native_format=True, force_new_instance=True)

Q: Native 格式是否支援所有功能?

A: 是的,只是輸出格式不同,所有 pretty-loguru 功能都完全支援。

Q: 如何選擇格式?

A:

  • 開發階段:使用 Native 格式便於調試
  • 生產環境:使用 Enhanced 格式便於監控
  • 遷移場景:使用 Native 格式保持一致性

🔗 相關文檔

基於 MIT 許可證發布