syslog(2)

الاسم
syslog، klogctl - قراءة و/أو مسح المخزن الدائري لرسائل النواة؛ ضبط مستوى تسجيل وحدة التحكم

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <sys/syscall.h>     /* تعريف ثوابت SYS_* */
#include <unistd.h>

int syscall(SYS_syslog, int type, char *bufp, int size);

/* The glibc interface */
#include <sys/klog.h>

int klogctl(int type, char *bufp, int size);

الوصف
ملاحظة: ربما تبحث عن دالة مكتبة C syslog()، التي تتحدث مع syslogd(8)؛ انظر syslog(3) للتفاصيل.

تصف هذه الصفحة استدعاء النظام syslog() للنواة، المستخدم للتحكم في المخزن المؤقت printk() للنواة؛ دالة الغلاف glibc لاستدعاء النظام تسمى klogctl().

  المخزن المؤقت لسجل النواة
تمتلك النواة مخزناً مؤقتاً دورياً بحجم LOG_BUF_LEN تُخزن فيه الرسائل المعطاة كوسائط لدالة النواة printk() (بغض النظر عن مستوى سجلها). في النوى المبكرة، كانت قيمة LOG_BUF_LEN 4096؛ من Linux 1.3.54، أصبحت 8192؛ من Linux 2.1.113، أصبحت 16384؛ منذ Linux 2.4.23/2.6، القيمة هي خيار تهيئة النواة (CONFIG_LOG_BUF_SHIFT، القيمة المبدئية تعتمد على البنية). منذ Linux 2.6.6، يمكن الاستعلام عن الحجم باستخدام أمر من النوع 10 (انظر أدناه).

  الأوامر
تحدد الوسيطة type الإجراء الذي تتخذه هذه الدالة. تحدد القائمة أدناه قيم type. الأسماء الرمزية معرفة في مصدر النواة، لكنها غير مصدرة إلى مساحة المستخدم؛ ستحتاج إما لاستخدام الأرقام، أو تعريف الأسماء بنفسك.

SYSLOG_ACTION_CLOSE (0)
    إغلاق السجل. حالياً عملية لا شيء (NOP).

SYSLOG_ACTION_OPEN (1)
    فتح السجل. حالياً عملية لا شيء (NOP).

SYSLOG_ACTION_READ (2)
    قراءة من السجل. ينتظر الاستدعاء حتى يصبح المخزن المؤقت لسجل النواة غير فارغ، ثم يقرأ على الأكثر len بايت في المخزن المؤقت المشار إليه بواسطة bufp. يعيد الاستدعاء عدد البايتات المقروءة. تختفي البايتات المقروءة من السجل من المخزن المؤقت للسجل: يمكن قراءة المعلومات مرة واحدة فقط. هذه هي الدالة التي تنفذها النواة عندما يقرأ برنامج مستخدم /proc/kmsg.

SYSLOG_ACTION_READ_ALL (3)
    قراءة جميع الرسائل المتبقية في المخزن المؤقت الحلقي، ووضعها في المخزن المؤقت المشار إليه بواسطة bufp. يقرأ الاستدعاء آخر len بايت من المخزن المؤقت للسجل (بدون إتلاف)، لكنه لن يقرأ أكثر مما كُتب في المخزن المؤقت منذ آخر أمر "مسح المخزن المؤقت الحلقي" (انظر الأمر 5 أدناه). يعيد الاستدعاء عدد البايتات المقروءة.

SYSLOG_ACTION_READ_CLEAR (4)
    قراءة ومسح جميع الرسائل المتبقية في المخزن المؤقت الحلقي. يقوم الاستدعاء بنفس الشيء تماماً كما في type بقيمة 3، لكنه ينفذ أيضًا أمر "مسح المخزن المؤقت الحلقي".

SYSLOG_ACTION_CLEAR (5)
    ينفذ الاستدعاء فقط أمر "مسح المخزن المؤقت الحلقي". يتم تجاهل الوسيطتين bufp و size.

    لا يمسح هذا الأمر المخزن المؤقت الحلقي حقًا. بدلاً من ذلك، يعين متغير محاسبة في النواة يحدد النتائج المعادة بواسطة الأمرين 3 (SYSLOG_ACTION_READ_ALL) و 4 (SYSLOG_ACTION_READ_CLEAR). ليس لهذا الأمر أي تأثير على الأمرين 2 (SYSLOG_ACTION_READ) و 9 (SYSLOG_ACTION_SIZE_UNREAD).

SYSLOG_ACTION_CONSOLE_OFF (6)
    يحفظ الأمر القيمة الحالية لـ console_loglevel ثم يعين console_loglevel إلى minimum_console_loglevel، بحيث لا تُطبع أي رسائل على وحدة التحكم. قبل Linux 2.6.32، كان الأمر ببساطة يعين console_loglevel إلى minimum_console_loglevel. انظر مناقشة /proc/sys/kernel/printk أدناه.

    يتم تجاهل الوسيطتين bufp و size.

SYSLOG_ACTION_CONSOLE_ON (7)
    إذا تم تنفيذ أمر SYSLOG_ACTION_CONSOLE_OFF سابقاً، يستعيد هذا الأمر console_loglevel إلى القيمة التي حفظها ذلك الأمر. قبل Linux 2.6.32، كان هذا الأمر ببساطة يعين console_loglevel إلى default_console_loglevel. انظر مناقشة /proc/sys/kernel/printk أدناه.

    يتم تجاهل الوسيطتين bufp و size.

SYSLOG_ACTION_CONSOLE_LEVEL (8)
    يعين الاستدعاء console_loglevel إلى القيمة المعطاة في size، والتي يجب أن تكون عدداً صحيحاً بين 1 و 8 (شاملاً). تفرض النواة بصمت قيمة دنيا لـ size تساوي minimum_console_loglevel. انظر قسم مستوى السجل للتفاصيل. يتم تجاهل الوسيطة bufp.

SYSLOG_ACTION_SIZE_UNREAD (9) (منذ Linux 2.4.10)
    ترجع الاستدعاء عدد البايتات المتاحة حالياً للقراءة من خبيئة سجل النواة عبر الأمر 2 (SYSLOG_ACTION_READ). يتم تجاهل الوسيطتين bufp و size.

SYSLOG_ACTION_SIZE_BUFFER (10) (منذ لينكس 2.6.6)
    يرجع هذا الأمر الحجم الكلي لخبيئة سجل النواة. يتم تجاهل الوسيطتين bufp و size.

جميع الأوامر باستثناء 3 و 10 تتطلب صلاحية. في أنوية لينكس قبل لينكس 2.6.37، يُسمح بأنواع الأوامر 3 و 10 للعمليات غير المصرح لها؛ منذ لينكس 2.6.37، يُسمح بهذه الأوامر للعمليات غير المصرح لها فقط إذا كانت قيمة /proc/sys/kernel/dmesg_restrict هي 0. قبل لينكس 2.6.37، تعني "مصرح له" أن المتصل يمتلك إمكانية CAP_SYS_ADMIN. منذ لينكس 2.6.37، تعني "مصرح له" أن المتصل يمتلك إما إمكانية CAP_SYS_ADMIN (المهملة حالياً لهذا الغرض) أو إمكانية CAP_SYSLOG (الجديدة).

  /proc/sys/kernel/printk
/proc/sys/kernel/printk هو ملف قابل للكتابة يحتوي على أربع قيم صحيحة تؤثر على سلوك printk() في النواة عند طباعة أو تسجيل رسائل الخطأ. القيم الأربع هي:

console_loglevel
    فقط الرسائل ذات مستوى سجل أقل من هذه القيمة ستُطبع على وحدة التحكم. القيمة المبدئية لهذا الحقل هي DEFAULT_CONSOLE_LOGLEVEL (7)، لكنها تُضبط إلى 4 إذا احتوى سطر أوامر النواة على الكلمة "quiet"، وإلى 10 إذا احتوى على الكلمة "debug"، وإلى 15 في حالة عطل في النواة (10 و 15 مجرد قيم سخيفة، وتكافئ 8). يمكن ضبط قيمة console_loglevel (إلى قيمة في النطاق 1–8) بواسطة استدعاء syslog() مع type بقيمة 8.

default_message_loglevel
    ستُستخدم هذه القيمة كمستوى سجل لرسائل printk() التي لا تحتوي على مستوى صريح. حتى لينكس 2.6.38 وما يشمل، كانت القيمة المبدئية المضمنة في الكود لهذا الحقل هي 4 (KERN_WARNING)؛ منذ لينكس 2.6.39، تُعرف القيمة المبدئية بواسطة خيار تهيئة النواة CONFIG_DEFAULT_MESSAGE_LOGLEVEL، والذي يكون مبدئياً 4.

minimum_console_loglevel
    القيمة في هذا الحقل هي القيمة الدنيا التي يمكن ضبط console_loglevel إليها.

default_console_loglevel
    هذه هي القيمة المبدئية لـ console_loglevel.

  مستوى السجل
كل رسالة printk() لها مستوى سجل خاص بها. إذا لم يُحدد مستوى السجل صراحةً كجزء من الرسالة، فإنه يكون مبدئياً default_message_loglevel. المعنى التقليدي لمستوى السجل هو كالتالي:
ثابت النواة | قيمة المستوى | المعنى
KERN_EMERG | 0 | النظام غير قابل للاستخدام
KERN_ALERT | 1 | يجب اتخاذ إجراء فوراً
KERN_CRIT | 2 | ظروف حرجة
KERN_ERR | 3 | ظروف خطأ
KERN_WARNING | 4 | ظروف تحذير
KERN_NOTICE | 5 | ظرف عادي لكن مهم
KERN_INFO | 6 | معلوماتي
KERN_DEBUG | 7 | رسائل مستوى التصحيح

ستطبع روتين printk() للنواة رسالة على وحدة التحكم فقط إذا كان مستوى سجلها أقل من قيمة console_loglevel.

قيمة الإرجاع
بالنسبة لـ type المساوي لـ 2 أو 3 أو 4، يعيد استدعاء ناجح لـ syslog() عدد البايتات المقروءة. بالنسبة لـ type 9، يعيد syslog() عدد البايتات المتاحة حالياً للقراءة من مخزن سجل النواة. بالنسبة لـ type 10، يعيد syslog() الحجم الكلي لمخزن سجل النواة. بالنسبة لقيم أخرى لـ type، يُعاد 0 عند النجاح.

في حالة الخطأ، يُعاد -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EINVAL
    وسائط خاطئة (مثل: type خاطئ؛ أو بالنسبة لـ type 2 أو 3 أو 4، buf هو NULL، أو size أقل من صفر؛ أو بالنسبة لـ type 8، level خارج النطاق 1 إلى 8).

ENOSYS
    استدعاء النظام syslog() هذا غير متاح، لأن النواة جُمّعت مع خيار تهيئة النواة CONFIG_PRINTK معطلاً.

EPERM
    جرت محاولة لتغيير console_loglevel أو مسح مخزن حلقات رسائل النواة بواسطة عملية بدون صلاحية كافية (بشكل أدق: بدون القدرة CAP_SYS_ADMIN أو CAP_SYSLOG).

ERESTARTSYS
    قُطع استدعاء النظام بواسطة إشارة؛ لم يُقرأ شيء. (يمكن رؤية هذا فقط أثناء التتبع.)

المعايير
لينكس.

التاريخ
من البداية، لاحظ الناس أنه من المؤسف أن استدعاء النظام وروتين المكتبة بنفس الاسم هما شيئان مختلفان تماماً.

انظر أيضًا
dmesg(1), syslog(3), capabilities(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.