---
title: "XI. رویدادنویسی"
source: Twelve-Factor App
source_url: https://github.com/heroku/12factor
licence: MIT
domain: engineering
subdomain: 12factor
date_added: 2026-04-25
---

## XI. رویدادنویسی
### رویدادنویسی را به عنوان جریانی از رویدادها در نظر بگیرید

رویدادنویسی، عملکرد یک برنامه‌ی در حال اجرا را مشاهده می‌کند. در محیط‌های مبتنی بر سرور، این مشاهدات معمولاً روی یک فایل روی دیسک (یک "logfile") نوشته می‌شوند. اما این فقط یکی از قالب‌های خروجی است.

رویدادنوشته‌ها، جریان رویدادهای انباشته‌شده با ترتیب زمانی هستند که از جریان‌های خروجی همه‌ی فرآیندهای در حال اجرا و خدمات پشتیبان جمع‌آوری شده‌اند. رویدادنوشته‌ها در شکل خام خود معمولاً یک قالب متنی با یک رویداد در هر خط هستند (اگرچه رهگیری پشته‌ای از خطاها ممکن است چندین خط را در بر بگیرد). رویدادنوشته‌ها آغاز یا پایان ثابتی ندارند، اما تا زمانی که برنامه کار می‌کند، پیوسته جریان دارند.

**یک برنامه‌ی کاربردی دوازده-سازه هرگز به مسیریابی یا ذخیره‌سازی جریان خروجی خود اهمیت نمی دهد**. نباید سعی در نوشتن یا مدیریت فایل‌های رویدادنویسی داشته باشد. در عوض، هر فرآیند در حال اجرا، جریان رویداد خود را بدون بافر در «stdout» می‌نویسد. در محیط توسعه، توسعه‌دهنده این جریان را در پیش‌زمینه ترمینال خود می‌بیند تا رفتار برنامه را مشاهده کند.

در استقرار محیط آزمون یا عملیات، جریان هر فرآیند توسط محیط اجرا ثبت می‌شود، با تمام جریان‌های رویدادنویسی دیگر از برنامه ترکیب می‌شود و برای مشاهده و بایگانی طولانی‌مدت به یک یا چند مقصد نهایی هدایت می‌شود. این مقاصد بایگانی‌شده، برای برنامه، قابل مشاهده یا تنظیم نیستند و در عوض کاملاً توسط محیط اجرا، مدیریت می‌شوند. مسیریاب‌های رویدادنویسی منبع باز (مانند Logplex و Fluentd) برای این منظور در دسترس هستند.

جریان رویداد برای یک برنامه را می توان به یک فایل هدایت کرد یا از طریق `tail` در یک ترمینال مشاهده کرد. مهمتر از همه، جریان را می توان به یک سیستم نمایه‌سازی و تجزیه و تحلیل رویدادنویسی مانند Splunk، یا یک سیستم انبار داده‌های همه منظوره مانند [Hadoop/Hive](http://hive.apache.org/) سپرد. این سیستم‌ها قدرت و انعطاف‌پذیری زیادی را برای بررسی رفتار یک برنامه در طول زمان فراهم می‌کنند، از جمله:

* یافتن رویدادهای ویژه در گذشته.
* نمودارهایی در مقیاس بزرگ از روندهای برنامه (مانند درخواست در دقیقه).
* هشدار فعال با توجه به هشدار تعریف شده توسط کاربر (مانند هشدار در زمانی که تعداد خطاها در دقیقه از یک آستانه ویژه فراتر رود).
