LOGGER(1) User Commands LOGGER(1)

logger - ارسال پیام به سیستم گزارش‌گیری وقایع لینوکس (Syslog)

logger [options] message

دستور logger ورودی‌هایی را در گزارش وقایع سیستم ثبت می‌کند.

هنگامی که آرگومان اختیاری message وجود داشته باشد، در لاگ نوشته می‌شود. اگر وجود نداشته باشد و گزینهٔ -f نیز داده نشده باشد، ورودی استاندارد ثبت می‌شود.

-d, --udp

تنها استفاده از دیتاگرام‌ها (UDP). به‌طور پیش‌فرض اتصال به درگاه syslog تعریف‌شده در /etc/services آزمایش می‌شود که اغلب 514 است.

همچنین برای مشخص کردن محل اتصال، --server و --socket را ببینید.

-e, --skip-empty

نادیده گرفتن خطوط خالی هنگام پردازش فایل‌ها. یک خط خالی به عنوان خطی بدون هیچ نویسه‌ای تعریف می‌شود. بنابراین خطی که تنها شامل نویسه‌های فاصله خالی (whitespace) باشد خالی در نظر گرفته نمی‌شود. توجه داشته باشید که وقتی گزینهٔ --prio-prefix مشخص شده باشد، اولویت بخشی از خط نیست. بنابراین یک خط خالی در این حالت خطی است که بعد از پیشوند اولویت (مانند <13>) هیچ نویسه‌ای نداشته باشد.

-f, --file file

ثبت محتویات file مشخص‌شده در لاگ. این گزینه نمی‌تواند با یک پیام خط فرمان ترکیب شود.

-i

ثبت PID فرآیند logger همراه با هر خط.

--id[=id]

ثبت PID فرآیند logger همراه با هر خط. هنگامی که آرگومان اختیاری id مشخص شود، به جای PID دستور logger از آن استفاده می‌شود. استفاده از --id=$$ (شناسه والد یا PPID) در اسکریپت‌هایی که چندین پیام ارسال می‌کنند توصیه می‌شود.

توجه داشته باشید که زیرساخت گزارش‌گیری وقایع سیستم (به عنوان مثال systemd هنگام شنود روی /dev/log) ممکن است اعتبارنامه‌های سوکت محلی (local socket credentials) را برای لغو PID مشخص‌شده در پیام دنبال کند. دستور logger(1) قادر است آن اعتبارنامه‌های سوکت را روی id داده‌شده تنظیم کند، اما تنها در صورتی که دسترسی ریشه (root) داشته باشید و فرآیندی با PID مشخص‌شده وجود داشته باشد؛ در غیر این صورت اعتبارنامه‌های سوکت تغییر نمی‌کنند و این موضوع بدون هشدار نادیده گرفته می‌شود.

--journald[=file]

نوشتن یک ورودی در ژورنال systemd. در صورت مشخص شدن file ورودی از آن خوانده می‌شود، در غیر این صورت از ورودی استاندارد خوانده می‌شود. هر خط باید با فیلدی آغاز شود که توسط journald پذیرفته می‌شود؛ برای جزئیات systemd.journal-fields(7) را ببینید. استفاده از فیلد MESSAGE_ID عموماً ایدهٔ خوبی است، زیرا یافتن ورودی‌ها را آسان می‌کند. مثال‌ها:
logger --journald <<end
MESSAGE_ID=67feb6ffbaf24c5cbec13c008dd72309
MESSAGE=The dogs bark, but the caravan goes on.
DOGS=bark
CARAVAN=goes on
end
logger --journald=entry.txt

توجه داشته باشید که --journald مقادیر سایر گزینه‌ها مانند اولویت را نادیده می‌گیرد. اگر اولویت مورد نیاز باشد، باید درون ورودی و با استفاده از فیلد PRIORITY تعیین شود. اجرای سادهٔ journalctl(1) فیلد MESSAGE را نمایش می‌دهد. از journalctl --output json-pretty برای مشاهده سایر فیلدها استفاده کنید.

برای قرار دادن خطوط جدید در MESSAGE، فیلد MESSAGE را چندین بار مشخص کنید. این به عنوان یک حالت ویژه در نظر گرفته می‌شود؛ سایر فیلدها در صورتی که چندین بار تکرار شوند به صورت یک آرایه در ژورنال ذخیره خواهند شد.

--msgid msgid

تنظیم فیلد MSGID در RFC 5424 https://tools.ietf.org/html/rfc5424 توجه داشته باشید که نویسهٔ فاصله در داخل msgid مجاز نیست. این گزینه تنها در صورتی استفاده می‌شود که --rfc5424 نیز مشخص شده باشد؛ در غیر این صورت، بدون هیچ هشداری نادیده گرفته می‌شود.

-n, --server server

نوشتن در server مشخص‌شدهٔ ریموت syslog به جای سوکت لاگ سیستم. مگر اینکه --udp یا --tcp مشخص شده باشد، logger ابتدا تلاش می‌کند از UDP استفاده کند، اما در صورت عدم موفقیت، اتصال TCP امتحان می‌شود.

--no-act

باعث می‌شود همهٔ کارها انجام شوند به جز نوشتن پیام لاگ در لاگ سیستم و حذف اتصال به ژورنال. این گزینه می‌تواند همراه با --stderr برای مقاصد آزمایشی استفاده شود.

--octet-count

استفاده از روش قالب‌بندی شمارش اوکتت (octet counting) در RFC 6587 https://tools.ietf.org/html/rfc6587 برای ارسال پیام‌ها. هنگامی که این گزینه استفاده نشود، پیش‌فرض عدم قالب‌بندی روی UDP، و قالب‌بندی غیرشفاف RFC6587 (همچنین معروف به octet stuffing) روی TCP است.

-P, --port port

استفاده از port مشخص‌شده. هنگامی که این گزینه مشخص نشده باشد، درگاه برای اتصالات udp به صورت پیش‌فرض syslog و برای اتصالات tcp به صورت پیش‌فرض syslog-conn است.

-p, --priority priority

وارد کردن پیام در لاگ با priority مشخص‌شده. اولویت می‌تواند به صورت عددی یا به صورت یک جفت facility.level مشخص شود. به عنوان مثال، -p local3.info پیام را به صورت informational در بخش local3 ثبت می‌کند. مقدار پیش‌فرض user.notice است.

--prio-prefix

جستجو برای پیشوند syslog در هر خط خوانده‌شده از ورودی استاندارد. این پیشوند یک عدد ده‌دهی درون براکت زاویه‌دار است که هر دو بخش facility و level را کدگذاری می‌کند. این عدد با ضرب facility در 8 و سپس افزودن level ساخته می‌شود. به عنوان مثال، local0.info به معنی facility=16 و level=6 به صورت <134> درمی‌آید.

اگر پیشوند حاوی facility نباشد، facility به مقدار مشخص‌شده توسط گزینهٔ -p بازمی‌گردد. به‌طور مشابه، اگر هیچ پیشوندی ارائه نشود، خط با استفاده از priority داده‌شده با -p لاگ می‌شود.

این گزینه بر پیام‌های خط فرمان تأثیری ندارد. این گزینه در درجه اول برای مواردی طراحی شده است که در آن‌ها logger در یک خط لوله (مانند daemon | logger --prio-prefix) برای خواندن چندین پیام با اولویت‌های متفاوت استفاده می‌شود.

--rfc3164

استفاده از پروتکل syslog در RFC 3164 https://tools.ietf.org/html/rfc3164 (BSD syslog) برای ارسال پیام‌ها به یک سرور راه دور.

--rfc5424[=without]

استفاده از پروتکل syslog در RFC 5424 https://tools.ietf.org/html/rfc5424 برای ارسال پیام‌ها به یک سرور راه دور. آرگومان اختیاری without می‌تواند فهرستی از مقادیر زیر باشد که با کاما جدا شده‌اند: notq، notime، nohost.

مقدار notq داده‌های ساختاریافتهٔ کیفیت زمان (time-quality) را از پیام ارسال‌شده حذف می‌کند. اطلاعات کیفیت زمان نشان می‌دهد که آیا ساعت محلی همگام‌سازی شده است یا خیر، به همراه حداکثر تعداد میکروثانیه‌هایی که برچسب زمانی ممکن است انحراف داشته باشد. همچنین کیفیت زمان هنگامی که --sd-id timeQuality مشخص شود، به‌طور خودکار سرکوب می‌شود.

مقدار notime (که شامل notq نیز می‌شود) کل برچسب زمانی فرستنده را که در قالب ISO-8601 است، شامل میکروثانیه‌ها و منطقه زمانی، حذف می‌کند.

مقدار nohost اطلاعات فراخوانی gethostname(2) را از سربرگ پیام حذف می‌کند.

پروتکل RFC 5424 از نگارش 2.26 پیش‌فرض دستور logger بوده است.

-s, --stderr

ارسال پیام به خطای استاندارد و همچنین لاگ سیستم. کل پیام به همان شکلی که به syslog یا journald فرستاده می‌شود خروجی داده می‌شود، شامل اولویت و احتمالاً سایر فیلدها. این گزینه در درجه اول برای مقاصد اشکال‌زدایی طراحی شده است و اغلب با --no-act استفاده می‌شود.

--sd-id name[@digits]

مشخص کردن شناسه عنصر داده ساختاریافته برای یک سربرگ پیام RFC 5424. این گزینه باید پیش از --sd-param برای معرفی یک عنصر جدید استفاده شود. تعداد عناصر داده ساختاریافته نامحدود است. شناسه (name به علاوه احتمالاً @digits) به بزرگی و کوچکی حروف حساس است و نوع و هدف عنصر را به صورت یکتا مشخص می‌کند. همان شناسه نباید بیش از یک بار در یک پیام وجود داشته باشد. بخش @digits برای شناسه‌های غیراستانداردِ تعریف‌شده توسط کاربر الزامی است.

دستور logger در حال حاضر تنها عنصر استاندارد timeQuality را تولید می‌کند. سند RFC 5424 همچنین عناصر origin (با پارامترهای ip، enterpriseId، software و swVersion) و meta (با پارامترهای sequenceId، sysUpTime و language) را توصیف می‌کند. این شناسه‌های عنصر ممکن است بدون پسوند @digits مشخص شوند.

--sd-param name=value

مشخص کردن یک پارامتر عنصر داده ساختاریافته، یک جفت نام و مقدار. این گزینه باید پس از --sd-id استفاده شود و ممکن است بیش از یک بار برای همان عنصر مشخص گردد. توجه داشته باشید که علامت‌های نقل‌قول در اطراف value الزامی هستند و باید در خط فرمان گریز (escape) داده شوند.
logger --rfc5424 --sd-id zoo@123             \
                 --sd-param tiger="hungry"   \
                 --sd-param zebra="running"  \
                 --sd-id manager@123         \
                 --sd-param onMeeting="yes"  \
                 "this is message"

تولید می‌کند:

<13>1 2015-10-01T14:07:59.168662+02:00 ws kzak - - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="218616"][zoo@123 tiger="hungry" zebra="running"][manager@123 onMeeting="yes"] this is message

-S, --size size

تنظیم حداکثر اندازه مجاز پیام به size. مقدار پیش‌فرض 1KiB نویسه است، که محدودیتی است که به صورت سنتی استفاده شده و در RFC 3164 مشخص شده است. با RFC 5424، این محدودیت انعطاف‌پذیر شده است. یک فرض خوب این است که گیرنده‌های RFC 5424 حداقل می‌توانند پیام‌های 4KiB را پردازش کنند.

اکثر گیرنده‌ها پیام‌های بزرگتر از 1KiB را روی هر نوع پروتکل syslog می‌پذیرند. به این ترتیب، گزینهٔ --size در تمام موارد بر logger تأثیر می‌گذارد (نه تنها زمانی که از --rfc5424 استفاده شده باشد).

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

--socket-errors mode

چاپ خطاهای مربوط به اتصالات سوکت یونیکس. مقدار mode می‌تواند on، off، یا auto باشد. هنگامی که حالت auto (پیش‌فرض) باشد، logger تشخیص خواهد داد که آیا فرآیند init همان systemd(1) است یا خیر، و در این صورت، این فرض در نظر گرفته می‌شود که /dev/log می‌تواند در اوایل بوت استفاده شود. نبودِ /dev/log در سایر سیستم‌های init باعث ایجاد خطا نخواهد شد، درست مانند زمانی که از فراخوانی سیستمی openlog(3) استفاده می‌شود. دستور logger(1) پیش از نگارش 2.26 از openlog(3) استفاده می‌کرد، و بنابراین قادر به تشخیص از دست رفتن پیام‌های ارسال‌شده به سوکت‌های یونیکس نبود.

هنگامی که خطاها فعال نباشند، پیام‌های از دست رفته گزارش نمی‌شوند و منجر به یک وضعیت خروج موفق برای logger(1) خواهند شد.

-T, --tcp

تنها استفاده از استریم (TCP). به‌طور پیش‌فرض اتصال به درگاه syslog-conn تعریف‌شده در /etc/services آزمایش می‌شود که اغلب 601 است.

همچنین برای مشخص کردن محل اتصال، --server و --socket را ببینید.

-t, --tag tag

علامت‌گذاری هر خط ثبت‌شده در لاگ با tag مشخص‌شده. برچسب پیش‌فرض نام کاربری است که به ترمینال وارد شده است (یا نام کاربری بر اساس شناسه کاربری مؤثر).

-u, --socket socket

نوشتن در socket مشخص‌شده به جای سوکت لاگ سیستم.

--

پایان دادن به فهرست آرگومان‌ها. این امکان را فراهم می‌کند که message با یک خط تیره (-) آغاز شود.

-h, --help

نمایش متن راهنما و خروج.

-V, --version

نمایش نسخه و خروج.

ابزار logger در صورت موفقیت با مقدار 0 و در صورت بروز خطا با مقدار >0 خارج می‌شود.

نام‌های معتبر تسهیلات (facilities) عبارتند از:

auth
authpriv برای اطلاعات امنیتی با ماهیت حساس
cron

daemon
ftp
kern نمی‌تواند از فرآیند فضای کاربری تولید شود، به‌طور خودکار به user تبدیل می‌شود

lpr
mail
news
syslog
user
uucp
local0
تا
local7
security مترادف منسوخ‌شده برای auth

نام‌های معتبر سطوح (levels) عبارتند از:

emerg
alert
crit
err
warning
notice
info
debug
panic مترادف منسوخ‌شده برای emerg
error مترادف منسوخ‌شده برای err
warn مترادف منسوخ‌شده برای warning

برای ترتیب اولویت و اهداف مورد نظر این بخش‌ها و سطوح، syslog(3) را ببینید.

انتظار می‌رود دستور logger با استاندارد IEEE Std 1003.2 ("POSIX.2") سازگار باشد.

logger System rebooted

logger -p local0.notice -t HOSTIDM -f /dev/idmc

logger -n loghost.example.com System rebooted

دستور logger در ابتدا توسط دانشگاه کالیفرنیا در سال‌های 1983-1993 نوشته شد و بعداً توسط Karel Zak <kzak@redhat.com>، Rainer Gerhards <rgerhards@adiscon.com>، و Sami Kerola <kerolasa@iki.fi>. بازنویسی شد.

journalctl(1), syslog(3), systemd.journal-fields(7)

برای گزارش باگ‌ها، از سامانه پیگیری مشکلات https://github.com/util-linux/util-linux/issues. استفاده کنید.

دستور logger بخشی از بستهٔ util-linux است که می‌توان آن را از بایگانی هسته لینوکس https://www.kernel.org/pub/linux/utils/util-linux. دریافت کرد.

2026-09-02 util-linux 2.42.3