Package Activity Logging yang elegan dan terintegrasi penuh untuk framework RustBasic, terinspirasi dari Spatie Laravel ActivityLog.
Dirancang khusus untuk ekosistem Axum dan SeaORM, package ini memungkinkan Anda mencatat riwayat aktivitas pengguna, perubahan model, maupun log permintaan HTTP secara otomatis dan terstruktur.
- Simple Activity Logger: API yang intuitif untuk mencatat aktivitas secara manual dari Controller atau Service.
- Auto-Migration & Scaffolding: Inisialisasi tabel
activity_logdan model Sea-ORM secara instan. - Request Logging Middleware: Middleware opsional untuk mencatat setiap permintaan HTTP (Method, URI, Status, Durasi).
- Auto User Tracking: Middleware secara otomatis mendeteksi dan mencatat
user_iddari session jika pengguna sudah login. - Subject & Causer Tracking: Melacak siapa yang melakukan aksi (causer) dan pada objek apa aksi tersebut dilakukan (subject).
- Flexible Properties: Menyimpan data tambahan dalam format JSON.
Tambahkan rustbasic-activitylog ke dalam berkas Cargo.toml proyek aplikasi Anda:
[dependencies]
rustbasic-activitylog = "0.0.3"Cukup jalankan build pada proyek Anda, dan rustbasic-activitylog akan secara otomatis membuat migrasi dan model yang diperlukan jika belum ada:
cargo buildPerintah ini akan secara otomatis membuat:
- 📂 Migration: File migrasi baru di
database/migrations/untuk tabelactivity_log. - 📂 Models: File model Sea-ORM di
src/app/models/activity_log.rs.
Setelah menjalankan perintah di atas, jalankan migrasi database:
rustbasic migrateAnda dapat mencatat aktivitas secara manual dengan ActivityLogger:
use rustbasic_activitylog::ActivityLogger;
pub async fn update_profile(State(state): State<AppState>, req: Request) -> impl IntoResponse {
// Logika update profil...
// Catat aktivitas
let _ = ActivityLogger::new(state.db.clone())
.use_log("user_activity")
.caused_by("users", user_id)
.performed_on("users", user_id)
.with_properties(serde_json::json!({ "field": "email", "old": "a@b.com", "new": "c@d.com" }))
.log("User memperbarui alamat email")
.await;
// ...
}Daftarkan middleware di main.rs atau saat inisialisasi router untuk mencatat semua permintaan masuk:
use rustbasic_activitylog::{activity_log_middleware, HasDatabase};
use rustbasic_core::server::AppState;
// Implementasikan trait HasDatabase untuk AppState agar middleware bisa mengakses DB
impl HasDatabase for AppState {
fn db(&self) -> DatabaseConnection {
self.db.clone()
}
}
// Tambahkan ke router
let app_router = Router::new()
.route("/", get(index))
.layer(axum::middleware::from_fn_with_state(state.clone(), activity_log_middleware));Package ini dirilis di bawah lisensi MIT.