واجهة Logger
تسجيل الرسائل طريقة إضافية لعرض معلومات مفيدة للمستخدمين أثناء البناء أو عند تحليل نتائجه.
يوفّر webpack logger يمكن استخدامه داخل loaders وplugins. ويمكن إخراج هذه الرسائل ضمن Stats أو التحكم بها من خلال إعدادات webpack.
فوائد logging API المخصص في webpack:
- مكان موحّد لضبط مستوى عرض الرسائل.
- إمكانية تصدير رسائل logging ضمن ملف
stats.json. - تأثير stats presets على رسائل logging.
- قدرة plugins على التأثير في التقاط الرسائل ومستوى عرضها.
- استخدام حل logging موحد عندما يعمل أكثر من plugin أو loader معًا.
- إمكانية اختيار CLI أو أدوات UI الخاصة بـ webpack طرقًا مختلفة لعرض الرسائل.
- قدرة webpack core على إخراج رسائل logging، مثل بيانات التوقيت.
من خلال webpack logging API، يحاول webpack توحيد طريقة إخراج logs من plugins وloaders، وتوفير طرق أفضل لفحص مشاكل البناء. هذا الحل المدمج يساعد مطوري plugins وloaders ويحسّن تجربة التطوير، ويمهّد لحلول غير CLI مثل dashboards أو واجهات UI أخرى.
أمثلة لاستخدام webpack logger داخل loaders وplugins
my-webpack-plugin.js
const PLUGIN_NAME = "my-webpack-plugin";
export class MyWebpackPlugin {
apply(compiler) {
// you can access Logger from compiler
const logger = compiler.getInfrastructureLogger(PLUGIN_NAME);
logger.log("log from compiler");
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
// you can also access Logger from compilation
const logger = compilation.getLogger(PLUGIN_NAME);
logger.info("log from compilation");
});
}
}my-webpack-loader.js
export default function (source) {
// you can get Logger with `this.getLogger` in your webpack loaders
const logger = this.getLogger("my-webpack-loader");
logger.info("hello Logger");
return source;
}كما يظهر في مثال my-webpack-plugin.js أعلاه، توجد طريقتان أساسيتان للحصول على logger:
compilation.getLoggercompiler.getInfrastructureLogger
ينصح باستخدام compilation.getLogger عندما تكون الرسائل مرتبطة بعملية compilation نفسها، لأنها ستُحفظ ضمن stats. أما logging الذي يحدث خارج دورة compilation، فاستخدم له compiler.getInfrastructureLogger.
دوال Logger
logger.error(...): لرسائل الأخطاء.logger.warn(...): للتحذيرات.logger.info(...): للرسائل المهمة. تظهر هذه الرسائل افتراضيًا، لذلك استخدمها فقط للمعلومات التي يحتاج المستخدم إلى رؤيتها فعلًا.logger.log(...): للرسائل المعلوماتية الأقل أهمية. لا تظهر هذه الرسائل إلا إذا اختار المستخدم عرضها.logger.debug(...): لمعلومات التصحيح. لا تظهر إلا إذا اختار المستخدم تفعيل debug logging لـ modules محددة.logger.trace(): لعرض stack trace. تُعرض مثلlogger.debug.logger.group(...): لتجميع الرسائل. تُعرض مطوية مثلlogger.log.logger.groupEnd(): لإنهاء مجموعة logging.logger.groupCollapsed(...): لتجميع الرسائل معًا. تُعرض مطوية مثلlogger.log، وتظهر مفتوحة عندما يكون مستوى logging هو'verbose'أو'debug'.logger.status: يكتب رسالة مؤقتة ويضبط status جديدًا بدل السابق.logger.clear(): لطباعة خط فاصل. تُعرض مثلlogger.log.logger.profile(...),logger.profileEnd(...): لالتقاط profile. تُمرر إلىconsole.profileعندما يكون مدعومًا.
Runtime Logger API
Runtime logger API مخصص للاستخدام كأداة تطوير فقط، وليس المقصود تضمينه في وضع الإنتاج.
import logging from 'webpack/lib/logging/runtime': لاستخدام logger وقت التشغيل، استورده مباشرة من webpack.logging.getLogger('name'): للحصول على logger مستقل بالاسم.logging.configureDefaultLogger(...): لاستبدال logger الافتراضي.
import logging from "webpack/lib/logging/runtime";
logging.configureDefaultLogger({
level: "log",
debug: /something/,
});logging.hooks.log: لتطبيق plugins على runtime logger.



