فكرة سيئة ترك "Console.log ()" مكالمات في رمز JavaScript الإنتاج الخاص بك؟

StackOverflow https://stackoverflow.com/questions/1114187

سؤال

لدي حفنة من console.log() يدعو في جافا سكريبت.

يجب أن أعلقهم قبل الانتشار في الإنتاج؟

أود فقط أن أتركهم هناك، لذلك لا يجب علي الذهاب إلى مشكلة إعادة إضافة التعليقات في وقت لاحق إذا كنت بحاجة إلى إجراء أي تصحيح آخر. هل هذه فكرة سيئة؟

هل كانت مفيدة؟

المحلول

سوف يسبب أخطاء JavaScript، إنهاء تنفيذ كتلة JavaScript التي تحتوي على الخطأ.

ومع ذلك، يمكنك تحديد وظيفة دمية غير مرجعية عندما firebug غير نشط:

if(typeof console === "undefined") {
    console = { log: function() { } };
}

إذا كنت تستخدم أي طرق أخرى غير log, ، سوف تحتاج لك كعب تلك كذلك.

نصائح أخرى

نظرا لأن الآخرون قد أشاروا بالفعل إلى ذلك، فإن ترك الأمر سيؤدي إلى أخطاء في بعض المتصفحات، لكن هذه الأخطاء يمكن أن تعمل حولها عن طريق وضع بعض بذرة.

ومع ذلك، لن أعلق عليهم فقط، لكنهم أخرجوا من هذه الخطوط. يبدو فقط قذرة للقيام بذلك. ربما أكون محادثات، لكنني لا أعتقد أن "رمز الإنتاج" يجب أن يشمل رمز "Debug" على الإطلاق، حتى في نموذج التعليق. إذا تركت تعليقات على الإطلاق، يجب أن تصف هذه التعليقات ما يفعله الرمز، أو السبب وراء ذلك - وليس كتل من التعليمات البرمجية المعطلة. (على الرغم من أنه ينبغي إزالة معظم التعليقات تلقائيا من خلال عملية التصميم الخاصة بك. أنت تقليل، أليس كذلك؟)

أيضا، في عدة سنوات من العمل مع جافا سكريبت، لا أستطيع أن أذكر مرة أخرى إلى وظيفة وقول "gee، أتمنى أن أترك تلك console.logs في مكان هنا!" بشكل عام، عندما "فعلت" مع العمل على وظيفة، وبعد ذلك يجب أن أعود إليها، أعود لإصلاح بعض المشكلة الأخرى. مهما كانت هذه المشكلة الجديدة، إذا كان يمكن أن تكون وحدة التحكم .gs من جولة سابقة من العمل مفيدة، فقد رصدت المشكلة في المرة الأولى. بمعنى آخر، إذا عدت إلى شيء ما، من غير المحتمل أن أحتاج إلى نفس معلومات التصحيح كما أحتاج إليها في المناسبات السابقة.

فقط سنتين ... حظا سعيدا!

إذا كان لديك برنامج نصي للنشر، فيمكنك استخدامه لتخليص المكالمات إلى console.log (وتقلص الملف).

أثناء وجودك في ذلك، يمكنك رمي JS من خلال JSLINT وتسجيل الانتهاكات للتفتيش (أو منع النشر).

هذا مثال رائع لماذا تريد أتمتة نشرك. إذا تتيح لك عمليةتك نشر ملف JS باستخدام Console.logs في ذلك، في مرحلة ما إرادة افعلها.

إلى حد علمي لا توجد طريقة أقصر من stubbing console.log من الأحرف ال 45 التالية:

window.console||(console={log:function(){}});

هذا هو الأول من 3 إصدارات مختلفة اعتمادا على طرق وحدة التحكم التي تريد كوابتها كلها صغيرة وتم اختبارها جميعا في IE6 + والمتصفحات الحديثة.

تغطي الإصداران الآخران تغيير طرق وحدة التحكم الأخرى. يغطي المرء الأساسيات الأربعة والأخرى جميع أساليب وحدة التحكم المعروفة ل Firebug و WebKit. مرة أخرى، في أصغر أحجام الملفات الممكنة.

هذا المشروع موجود في GitHub: https://github.com/andyet/consoledummy.js.

إذا كنت تستطيع التفكير في أي طريقة لتقليل الشفرة أبعد من ذلك، ورحب المساهمات.

- تحرير - 16 مايو 2012

لقد تحسنت منذ ذلك الحين في هذا الرمز. لا يزال صغيرا ولكنه يضيف القدرة على تشغيل إخراج وحدة التحكم وإيقاف تشغيله: https://github.com/henrikjoreteg/andlog.

كان مميز على Shunchelog Show

يجب عليك على الأقل إنشاء دمية console.log إذا لم يكن الكائن موجودا، فلن يقوم الكود بإلقاء الأخطاء على آلات المستخدمين دون تثبيت Firebug.

يمكن أن يكون هناك احتمال آخر لتشغيل التسجيل فقط في "وضع التصحيح"، أي إذا تم تعيين علامة معينة:

if(_debug) console.log('foo');
_debug && console.log('foo');

نأمل أن يساعد شخص ما - كتبت غلافا له منذ فترة واحدة، لها أكثر مرونة قليلا من الحل المقبول.

من الواضح، إذا كنت تستخدم أساليب أخرى مثل Console.Info إلخ، يمكنك تكرار التأثير. عند الانتهاء من بيئتك التدريجية، ما عليك سوى تغيير C.Debug الافتراضي إلى False للإنتاج ولن تضطر إلى تغيير أي رمز / إخراج خطوط أخرى إلخ. من السهل جدا العودة إلى واختصاصها لاحقا.

var C = {
    // console wrapper
    debug: true, // global debug on|off
    quietDismiss: false, // may want to just drop, or alert instead
    log: function() {
        if (!C.debug) return false;

        if (typeof console == 'object' && typeof console.log != "undefined") {
            console.log.apply(this, arguments); 
        }
        else {
            if (!C.quietDismiss) {
                var result = "";
                for (var i = 0, l = arguments.length; i < l; i++)
                    result += arguments[i] + " ("+typeof arguments[i]+") ";

                alert(result);
            }
        }
    }
}; // end console wrapper.

// example data and object
var foo = "foo", bar = document.getElementById("divImage");
C.log(foo, bar);

// to surpress alerts on IE w/o a console:
C.quietDismiss = true;
C.log("this won't show if no console");

// to disable console completely everywhere:
C.debug = false;
C.log("this won't show ever");

يبدو هذا عمل بالنسبة لي...

if (!window.console) {
    window.console = {
        log: function () {},
        group: function () {},
        error: function () {},
        warn: function () {},
        groupEnd: function () {}
    };
}

احسب أنني سوف أشارك وجهة نظر مختلفة. ترك هذا النوع من الناتج المرئي للعالم الخارجي في تطبيق PCI يجعلك غير متوافق.

أوافق على أن كعب وحدة التحكم هو نهج جيد. لقد جربت العديد من الإضافات وحدة التحكم، ومقشرات التعليمات البرمجية، بما في ذلك بعضها معقدة إلى حد ما. لقد تواجههم جميعا بعض المشاكل في متصفح واحد على الأقل، لذلك انتهى بي الأمر بشيء بسيط مثل أدناه، وهو أمر دمج للقذائف الأخرى التي رأيتها وبعض الاقتراحات من فريق YUI. يبدو أنه يعمل في IE8 + و Firefox و Chrome و Safari (لنظام التشغيل Windows).

// To disable logging when posting a production release, just change this to false.
var debugMode = false;

// Support logging to console in all browsers even if the console is disabled. 
var log = function (msg) {
    debugMode && window.console && console.log ? console.log(msg) : null;
};

ملحوظة: وهو يدعم تعطيل التسجيل إلى وحدة التحكم عبر العلم. ربما يمكنك أتمتة هذا عبر بناء البرامج النصية أيضا. بدلا من ذلك، يمكنك عرض واجهة المستخدم أو بعض الآلية الأخرى لقلب هذا العلم في وقت التشغيل. يمكنك الحصول على أكثر تطورا بالطبع، مع مستويات التسجيل، وتقديم سجلات AJAX المستندة إلى عتبة السجل (على سبيل المثال، يتم إرسال جميع عبارات مستوى الخطأ إلى الخادم للتخزين هناك، إلخ).

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

مع التطبيقات باستخدام جافا سكريبت أكثر تعقيدا وأعتقد أن الأجهزة أمر بالغ الأهمية.

كما يذكر الآخر يشرع خطأ في معظم المتصفحات. في Firefox 4 لن يرمي خطأ، يتم تسجيل الرسالة في وحدة التحكم في مطور الويب (جديد في Firefox 4).

حل واحد إلى مثل هذه الأخطاء التي أحبها حقا دي && علة:

var de = true;
var bug = function() { console.log.apply(this, arguments); }

// within code
de&&bug(someObject);

لطيفة واحدة بطانة:

(!console) ? console.log=function(){} : console.log('Logging is supported.');
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top