কীভাবে আমার কোডে সমস্ত কনসোল.লগ বিবৃতি দ্রুত এবং সুবিধার্থে অক্ষম করবেন?


256

console.logপরীক্ষার উদ্দেশ্যে, আমার জাভাস্ক্রিপ্ট কোডের সমস্ত বিবৃতি বন্ধ করার কোনও উপায় আছে কি ?


11
একটি পাঠ্য সম্পাদক ব্যবহার করুন যা "প্রতিস্থাপন করুন" এবং "কনসোল.লগ" কে "//console.log" এর সাথে প্রতিস্থাপন করে
হ্যালোইন্ড্রে

5
@હેলোয়ানড্রে - যদিও আপনি লগ, তথ্য, ডিবাগ এবং ত্রুটি সতর্কতা ব্যবহার করেন - কিছুটা ক্লান্তিকর হয়
আপড্রিক্রিক

আশা করি আমরা এমন এক পর্যায়ে পৌঁছে যাব যেখানে ব্রাউজারের ডিবাগিং সরঞ্জাম সক্ষম না করা থাকলে ব্রাউজার প্রয়োগগুলি স্বয়ংক্রিয়ভাবে কনসোলের বিবৃতিগুলিকে বাইপাস করে।
অবাক করা

2
নীচের উত্তরগুলি দুর্দান্ত, তবে আপনাকে এইটির উপর চাকাটি পুনরায় উদ্ভাবন করতে হবে না। পিকোলজ দেখে নিন । এটির (একটি নোডজেএস) কনসোলের সাথে সামঞ্জস্যপূর্ণ একটি এপিআই রয়েছে, তাই আপনি এটিকে একটি ড্রপ-ইন প্রতিস্থাপন হিসাবে ব্যবহার করতে পারেন। এটি বাক্সের বাইরে লগিংয়ের স্তরগুলিকে সমর্থন করে, ব্রাউজারে কাজ করে, নোডজেএস এবং ন্যাশর্ন-এ, খুব সহজেই ক্যোরিস্ট্রিং (ব্রাউজার) বা পরিবেশ পরিবর্তনশীল PICOLOG_LEVEL(নোড) থেকে কনফিগার করা যায় এবং এটি অত্যন্ত ছোট। এরপরে 900 বাইট কম করা এবং জিপ করা হয়েছে। দাবি অস্বীকার: আমি লেখক।
স্টিজন ডি উইট

সমস্ত consoleফাংশন ওভাররাইড করার একটি সহজ উপায় আছে । শুধু তাকান stapp.space/disable-javascript-console-on-production
পাযত্র Stapp

উত্তর:


426

আপনার স্ক্রিপ্টে কনসোল.লগ ফাংশনটি পুনরায় সংজ্ঞা দিন।

console.log = function() {}

এটাই, কনসোল করার জন্য আর কোনও বার্তা নেই।

সম্পাদনা করুন:

সিডের ধারণাটি প্রসারিত করা হচ্ছে। একটি কাস্টম লগার যা আপনি আপনার কোড থেকে লগিং চালু / বন্ধ করতে টগল করতে ব্যবহার করতে পারেন।

আমার ফায়ারফক্স কনসোল থেকে:

var logger = function()
{
    var oldConsoleLog = null;
    var pub = {};

    pub.enableLogger =  function enableLogger() 
                        {
                            if(oldConsoleLog == null)
                                return;

                            window['console']['log'] = oldConsoleLog;
                        };

    pub.disableLogger = function disableLogger()
                        {
                            oldConsoleLog = console.log;
                            window['console']['log'] = function() {};
                        };

    return pub;
}();

$(document).ready(
    function()
    {
        console.log('hello');

        logger.disableLogger();
        console.log('hi', 'hiya');
        console.log('this wont show up in console');

        logger.enableLogger();
        console.log('This will show up!');
    }
 );

উপরের 'লগার' কীভাবে ব্যবহার করবেন? আপনার প্রস্তুত ইভেন্টে, কল করুন logger.disableLogger যাতে কনসোল বার্তাগুলি লগ না হয়। Logger.enableLogger এবং logger.disableLogger- এ কলগুলি যুক্ত করুন সেই পদ্ধতির ভিতরে যা আপনি কনসোলে বার্তা লগ করতে চান।


কি কাজ করে না দয়া করে বিশদ সরবরাহ করুন? উপরের লাইনটি আপনাকে ত্রুটি দেয়? যদি হ্যাঁ, ত্রুটি বার্তা কি?
সমাধান

1
আইই 8 এ আমার জন্য কাজ করে। ;-)
ইউজিন লাজুতিন

কোডটি ওভাররাইট করে কনসোল.লগ ফাংশনটি পুনরুদ্ধার করে। যদি আই 7 কনসোল.লগ পদ্ধতি সমর্থন করে তবে এটি কাজ করা উচিত।
সমাধান

3
কনসোল.লগ = ফাংশন () Firef Firef ফায়ারফক্সে কাজ করছে বলে মনে হচ্ছে না। আপনি এখনও একটি 'কনসোল সংজ্ঞায়িত নয়' ত্রুটি পান।
ডিএ

2
কি ভয়াবহ সমাধান। সংশোধন করা হচ্ছে console.log... লগিংয়ের জন্য কেবলমাত্র একটি বুলিয়ান এবং শর্তযুক্ত ফাংশন নেই কেন?
ডেমেন্টিক

76

নিম্নলিখিতটি আরও পুঙ্খানুপুঙ্খভাবে রয়েছে:

var DEBUG = false;
if(!DEBUG){
    if(!window.console) window.console = {};
    var methods = ["log", "debug", "warn", "info"];
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}

এটি উপস্থিত থাকলে কনসোলে সাধারণ পদ্ধতিগুলি শূন্য করে দেবে এবং এগুলিকে ত্রুটি ছাড়াই বলা যেতে পারে এবং কার্যত কোনও কার্য সম্পাদন করা হবে না। আই 6 like এর মতো কোনও ব্রাউজারের ক্ষেত্রে কোনও কনসোল ছাড়াই ত্রুটিগুলি রোধ করার জন্য ডামি পদ্ধতি তৈরি করা হবে। অবশ্যই ফায়ারবগে আরও অনেক ফাংশন রয়েছে, যেমন ট্রেস, প্রোফাইল, সময় ইত্যাদি They সেগুলিকে তালিকায় যুক্ত করা যেতে পারে যদি আপনি সেগুলি আপনার কোডটিতে ব্যবহার করেন।

আপনি এটিও পরীক্ষা করতে পারেন যে ডিবাগারের কাছে সেই বিশেষ পদ্ধতি রয়েছে কিনা (যেমন, আইই) এবং এটি যেগুলি সমর্থন করে না সেগুলি শূন্য করে:

if(window.console && !console.dir){
var methods = ["dir", "dirxml", "trace", "profile"]; //etc etc
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}

এটি আমার পক্ষে নিখুঁতভাবে কাজ করেছে, যদিও আমি এটি কিছুটা টুইট করেছি, পরিবেশের জন্য পরীক্ষা করেছি (আমি কেবল এটির উত্পাদনে অক্ষম চাই)
মুগানওয়াস

27

ডকুমেন্টেশন থেকে যতদূর আমি বলতে পারি , ফায়ারবগ ডিবাগের স্থিতাবস্থা টগল করার জন্য কোনও পরিবর্তনশীল সরবরাহ করে না। পরিবর্তে, একটি মোড়কের মধ্যে কনসোল.লগ () মোড়ুন যা শর্তাধীনভাবে এটি বলে, যেমন:

DEBUG = true; // set to false to disable debugging
function debug_log() {
    if ( DEBUG ) {
        console.log.apply(this, arguments);
    }
}

সমস্ত বিদ্যমান কলগুলি পরিবর্তন না করতে আপনি এর পরিবর্তে এটি ব্যবহার করতে পারেন:

DEBUG = true; // set to false to disable debugging
old_console_log = console.log;
console.log = function() {
    if ( DEBUG ) {
        old_console_log.apply(this, arguments);
    }
}

1
ধন্যবাদ, যদিও এর অর্থ হ'ল আমার সমস্ত কনসোল.লগ বিবৃতিগুলি ডিবাগ.লগ হিসাবে আবার লিখতে হবে।
জ্যাক বার্ট

এটি করার সঠিক উপায় এটি - আপনি যদি স্ক্র্যাচ থেকে শুরু করে থাকেন তবে অবশ্যই।
ওপেনসোর্স

3
আপনার সম্পাদকে যদি আপনার ভাল সন্ধান / প্রতিস্থাপন ফাংশন থাকে তবে এটি করার সঠিক উপায়।
বারোকোবিস্কাট

2
আপনার নিজের র‍্যাপার, বিটিডব্লু লিখার দরকার নেই, যদি আপনি jQuery ব্যবহার করেন তবে। JQuery ডিবাগিং প্লাগইন দুর্দান্ত কাজ করে। বোনাস হিসাবে এটি ব্রাউজারগুলিতে কনসোল.লগের অনুকরণ সরবরাহ করে। ট্রেনোফিয়েটস.আর.বিগ
নেলসন

একমাত্র [গৌণ] সমস্যাটি হ'ল আপনার একটি প্লাগইন ইনস্টল করা দরকার। :) জেনে রাখা ভাল, যদিও - ধন্যবাদ!
সিড করুন

17

তোমার উচিত না!

অন্তর্নির্মিত ফাংশনগুলি ওভাররাইট করা ভাল অনুশীলন নয়। আপনি সমস্ত আউটপুট দমন করবেন এমন কোনও গ্যারান্টিও নেই, আপনি ব্যবহার করেন এমন অন্যান্য গ্রন্থাগারগুলি আপনার পরিবর্তনগুলি ফিরিয়ে দিতে পারে এবং অন্যান্য ফাংশন রয়েছে যা কনসোলে লিখতে পারে; .dir(), .warning(), .error(), .debug(), .assert()ইত্যাদি

কিছু প্রস্তাবিত হিসাবে, আপনি একটি DEBUG_MODEপরিবর্তনশীল সংজ্ঞায়িত করতে পারেন এবং শর্তাধীন লগ করতে পারেন । আপনার কোডের জটিলতা এবং প্রকৃতির উপর নির্ভর করে আপনার নিজের লগার অবজেক্ট / ফাংশনটি লিখতে ভাল ধারণা হতে পারে যা কনসোল অবজেক্টের চারপাশে মোড়ানো এবং এই ক্ষমতাটি অন্তর্নির্মিত রয়েছে। যন্ত্রের সাথে কাজ করার জন্য এটিই সঠিক জায়গা ।

এটি বলেছিল, 'পরীক্ষার' উদ্দেশ্যে আপনি কনসোলে মুদ্রণের পরিবর্তে পরীক্ষা লিখতে পারেন । আপনি যদি কোনও পরীক্ষা নিরীক্ষা না করে থাকেন এবং সেই console.log()লাইনগুলি কেবল আপনার কোডটি লেখার জন্য একটি সহায়তা ছিল, কেবল সেগুলি মুছুন


7
"other libraries you use may revert your changes": আমি যদি console.logএকেবারে শুরুতে অক্ষম করি তবে তারা পুরানো ফাংশনে ফিরে যেতে পারবে না। ঠিক আছে, তারা console.logউত্স কোডটি আবার লিখতে পারে , তবে কেন? "it may be a good idea to write your own logger object/function that wraps around the console object": আমি অতীতে এটি করেছি এবং এটি একটি খারাপ ধারণা। কনসোল আউটপুটটির ট্রেসটি মোড়ককে বোঝায় এবং এটির অনুরোধ করে এমন লাইনে নয় যা ডিবাগিংকে আরও কঠিন করে তোলে।
মার্কো সুলা

3
@ লুকাসমালোর "একেবারে শুরুতেই" বোঝায় কোডটি সেই অবকাঠামোতে মিশ্রিত হয় ফলে এর পুনরায় ব্যবহারযোগ্যতা সীমাবদ্ধ করে। যদিও এটি সাধারণীকরণ করা কঠিন; একটি গেম, কিছু ডিওএম অ্যানিমেশনগুলি কোনও জটিল এসপিএর মধ্যে ডোমেন লজিকের মতো নয়, পরবর্তীকালে ব্রাউজার সচেতন হওয়া উচিত নয়, "কনসোল" নামক কোনও কিছু সম্পর্কে জেনে রাখা যাক। console.log('Look ma, it reaches this point');সেক্ষেত্রে আপনার কোডটিতে কিছু হ্যাক করার পরিবর্তে আপনার সঠিক পরীক্ষার কৌশল থাকা উচিত , যখন অন্য সমস্ত কিছু ব্যর্থ হয় আপনি যখন debugger;নির্দেশনাটি ব্যবহার করতে পারেন তখনই ।
istepaniuk

"the code is coupled to that infrastructure": কোড সম্ভবত, কিন্তু প্যাটার্ন না। যদি আপনি আপনার পৃষ্ঠাগুলির জন্য একটি সাধারণ বুনিয়াদি টেম্পলেট তৈরি করেন যেখানে লগিং ফাংশনগুলি অক্ষম করা থাকে তবে এটি এমন যুক্তি যা আপনি যে কোনও জায়গায় প্রয়োগ করতে পারেন। "the later shouldn't be browser-aware": ভাল, তাই আপনার জেএস ব্যবহার করা উচিত নয়: পি
মার্কো সুলা

3
@ মার্কোসুল্লা আমি মনে করি তিনি ক্লিনার কোড লিখতে চলেছেন। ".... আপনার জেএস ব্যবহার করা উচিত নয়" বলাটি কিছুটা ভারী হাতে। আদর্শভাবে, একজন প্রোগ্রামার হিসাবে আপনার পরিবেশটি যাই হোক না কেন, আপনার যথাসম্ভব মডিউলাইজ করা উচিত; যদি এটি ব্রাউজারগুলির বিষয়ে চিন্তা করে না, তবে আপনি এটি আরও স্থানে স্থাপন করতে পারেন: এটি আপনার স্টাফ ভাঙার চিন্তা করার জন্য এটির চেয়ে কম নির্ভরতা। সুতরাং, আইএমএইচও হ্যাঁ, তিনি আসলেই ঠিক বলেছেন। মনে রাখবেন যে আপনি "যদি আপনি একটি সাধারণ বেসিক টেম্পলেট তৈরি করেন ..." বলে শুরু করেছিলেন যা নিজের মধ্যে এবং নির্ভরতার পরিচয় দেয়। এই ধরণের চিন্তাভাবনা যা সফ্টওয়্যারকে জটিল করে তোলে। চিন্তার জন্য খাদ্য.
দোয়াদওয়াদ

1
অ্যাডোব সাইটগ্যালিক্যালিক্স আমার কনসোলে প্রচুর পরিমাণ আবর্জনা ফেলে দেয় এবং কিছু ক্ষেত্রে ডিবাগিংয়ের ঝামেলা করে। সুতরাং আমি যখন তৃতীয় পক্ষের কলটি
সম্পাদন

16

আমি বুঝতে পারি এটি একটি পুরানো পোস্ট তবে এটি এখনও গুগল ফলাফলের শীর্ষে উঠে আসে, সুতরাং এখানে আরও একটি মার্জিত নন-জিক্যুরি সমাধান রয়েছে যা সর্বশেষতম ক্রোম, এফএফ এবং আইইতে কাজ করে।

(function (original) {
    console.enableLogging = function () {
        console.log = original;
    };
    console.disableLogging = function () {
        console.log = function () {};
    };
})(console.log);

12

আমি জানি আপনি কীভাবে কনসোল.লগটি নিষ্ক্রিয় করতে চেয়েছিলেন, তবে আপনি যা করতে পারেন এটি সম্ভবত এটিই। এইভাবে আপনাকে কনসোলকে স্পষ্টভাবে সক্ষম বা অক্ষম করতে হবে না। এটি খালি বা ইনস্টল না থাকা ব্যক্তিদের জন্য কেবল সেই সমস্যাযুক্ত কনসোল ত্রুটিগুলি রোধ করে।

if(typeof(console) === 'undefined') {
    var console = {};
    console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time = console.timeEnd = console.assert = console.profile = function() {};
}

2
আইই নির্দিষ্ট লগিং নিষ্ক্রিয় করার জন্য দেখুন ক্রিস এস উত্তর।
গুরুএম

11

DEBUGকনসোল.লগ ফাংশনটি ওভাররাইড করতে কেবল পতাকাটি পরিবর্তন করুন । এই কৌতুক করতে হবে।

var DEBUG = false;
// ENABLE/DISABLE Console Logs
if(!DEBUG){
  console.log = function() {}
}

2
আমি আরও এক ধাপ এগিয়ে যেতে এবং এটি একটি লগার ফাংশন / ক্লাসে মোড়ানো করব। এরকম কিছু:function myLog(msg) { if (debug) { console.log(msg); } }
14:44

যদি কৌণিক ব্যবহার করে থাকে তবে আপনি এটিকে আপনার অ্যাপ্লিকেশন.জেএস ফাইলে একটি বৈশ্বিক কনফিগারেশন হিসাবে ব্যবহার করতে পারেন এবং লগগুলি অন / অফ করার জন্য এটি বৈশ্বিক সম্পত্তি হিসাবে ব্যবহার করতে পারেন। মনে রাখবেন, আইসিতে আপনার বিকাশকারীদের সরঞ্জামদণ্ড খোলা থাকলে কনসোল অপরিজ্ঞাত হবে না।
স্বনিধি

10

আমি অবাক হয়েছি যে এই সমস্ত উত্তরগুলির সাথে কেউ একত্রিত হয় না:

  • কোন jquery
  • গ্লোবাল নেমস্পেস দূষিত না করার জন্য বেনামে ফাংশন
  • উইন্ডো কনসোল সংজ্ঞায়িত না হওয়া ক্ষেত্রে হ্যান্ডেল করুন
  • শুধু কনসোলের .log ফাংশনটি পরিবর্তন করুন

আমি এই জন্য যেতে হবে:

(function () {

    var debug = false

    if (debug === false) {
        if ( typeof(window.console) === 'undefined') { window.console = {}; }
        window.console.log = function () {};
    }
})()

9

আমি এই সমস্যাটি পাশাপাশি অনুসন্ধান এবং আমার কর্ডোভা অ্যাপ্লিকেশনটিতে চেষ্টা করার পরে, আমি কেবল উইন্ডোজ ফোনের জন্য প্রতিটি বিকাশকারীকে সতর্ক করতে চাই যে ওভাররাইট না

    console.log

কারণ অ্যাপ্লিকেশনটি স্টার্টআপে ক্রাশ হবে।

আপনি ভাগ্যবান হলে স্থানীয় বিকাশ করলে এটি ক্রাশ হবে না তবে স্টোর জমা দেওয়ার ফলে অ্যাপটি ক্রাশ হবে।

শুধু ওভাররাইট করুন

    window.console.log 

আপনি প্রয়োজন হলে.

এটি আমার অ্যাপে কাজ করে:

   try {
        if (typeof(window.console) != "undefined") {
            window.console = {};
            window.console.log = function () {
            };
            window.console.info = function () {
            };
            window.console.warn = function () {
            };
            window.console.error = function () {
            };
        }

        if (typeof(alert) !== "undefined") {
            alert = function ()
            {

            }
        }

    } catch (ex) {

    }

সতর্ক করার জন্য ধন্যবাদ". তবুও, আমি আমার কর্ডোভা ভিত্তিক অ্যাপ্লিকেশনটি গুগলপ্লে স্টোরে প্রকাশ করেছি, ফোন ডিভাইস দিয়ে এটি পরীক্ষা করেছি এবং সব ঠিক আছে। আমি ধরে নিতে পারি যে আপনার সতর্কতাটি "উইন্ডোজ ভিত্তিক" অ্যাপ স্টোরের মধ্যে সীমাবদ্ধ ছিল? ... তবুও, এটি অপসারণের ক্ষেত্রে অপসকে চেষ্টা-ধরা বন্ধনীতে রাখার পরামর্শ দেওয়া ভাল। সুতরাং থাম্বস আপ।
পানিনি লুঞ্চার

8

আপনি যদি আই 7 ব্যবহার করছেন তবে কনসোল সংজ্ঞায়িত হবে না। সুতরাং আরও IE বন্ধুত্বপূর্ণ সংস্করণটি হ'ল:

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

5

সমাধানযোগী এবং ক্রিস এস এর উত্তরগুলির একটি সংকর এটি কনসোল.লগ লাইন নম্বর এবং ফাইলের নাম বজায় রাখে। উদাহরণস্বরূপ jsFizz

// Avoid global functions via a self calling anonymous one (uses jQuery)
(function(MYAPP, $, undefined) {
    // Prevent errors in browsers without console.log
    if (!window.console) window.console = {};
    if (!window.console.log) window.console.log = function(){};

    //Private var
    var console_log = console.log;  

    //Public methods
    MYAPP.enableLog = function enableLogger() { console.log = console_log; };   
    MYAPP.disableLog = function disableLogger() { console.log = function() {}; };

}(window.MYAPP = window.MYAPP || {}, jQuery));


// Example Usage:
$(function() {    
    MYAPP.disableLog();    
    console.log('this should not show');

    MYAPP.enableLog();
    console.log('This will show');
});

4

আপনি গ্রান্ট ব্যবহার করলে কনসোল.লগ বিবৃতি সরিয়ে / মন্তব্য করার জন্য আপনি একটি টাস্ক যুক্ত করতে পারেন। সুতরাং কনসোল.লগ আর আর বলা হয় না।

https://www.npmjs.org/package/grunt-remove-logging-calls


3

I তার সমস্যা মোকাবেলায় নিম্নলিখিতগুলি ব্যবহার করে যাচ্ছি: -

var debug = 1;
var logger = function(a,b){ if ( debug == 1 ) console.log(a, b || "");};

ডিবাগিং সক্ষম করতে ডিবাগ 1 এ সেট করুন। তারপরে ডিবাগ পাঠ্যের আউটপুট করার সময় লগার ফাংশনটি ব্যবহার করুন। এটি দুটি পরামিতি গ্রহণ করার জন্যও সেট আপ করা হয়েছে।

সুতরাং, পরিবর্তে

console.log("my","log");

ব্যবহার

logger("my","log");

3

আমি আগে উইনস্টন লগার ব্যবহার করেছি

আজকাল আমি অভিজ্ঞতা থেকে নীচে সহজ কোড ব্যবহার করছি:

  1. সেন্টিমিডি / কমান্ড লাইন (উইন্ডোতে) থেকে পরিবেশের পরিবর্তনশীল সেট করুন:

    cmd
    setx LOG_LEVEL info

অথবা, আপনি যদি চান তবে আপনার কোডটিতে একটি পরিবর্তনশীল থাকতে পারে, তবে উপরে ভাল।

  1. সেন্টিমিডি / কমান্ড লাইন, বা, নেটবিনের মতো আইডিই / সম্পাদক পুনরায় চালু করুন

  2. কোডের মতো নীচে থাকুন:

    console.debug = console.log;   // define debug function
    console.silly = console.log;   // define silly function
    
    switch (process.env.LOG_LEVEL) {
        case 'debug':
        case 'silly':
            // print everything
            break;
    
        case 'dir':
        case 'log':
            console.debug = function () {};
            console.silly = function () {};
            break;
    
        case 'info':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            break;
    
        case 'trace':   // similar to error, both may print stack trace/ frames
        case 'warn':    // since warn() function is an alias for error()
        case 'error':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            console.info = function () {};
            break;
    }
  3. এখন সমস্ত কনসোল ব্যবহার করুন। * নীচের মত:

    console.error(' this is a error message '); // will print
    console.warn(' this is a warn message '); // will print
    console.trace(' this is a trace message '); // will print
    console.info(' this is a info message '); // will print, LOG_LEVEL is set to this
    
    console.log(' this is a log message '); // will NOT print
    console.dir(' this is a dir message '); // will NOT print
    console.silly(' this is a silly message '); // will NOT print
    console.debug(' this is a debug message '); // will NOT print

এখন, 1 পয়েন্টে তৈরি আপনার LOG_LEVEL সেটিংসের ভিত্তিতে (যেমন, setx LOG_LEVEL logএবং কমান্ড লাইন পুনরায় চালু করুন) উপরের কিছু মুদ্রণ করবে, অন্যরা মুদ্রণ করবে না

আশা করি যে সাহায্য করেছে।


2

সতর্কতা: নির্লজ্জ প্লাগ!

আপনি যে সময়ে দেখতে চান তা কেবল চালু করতে মডিউল-স্তরের "স্যুইচিং" সক্ষমতার সাথে মডুলার ট্রেসিং করতে আপনি আমার জাসট্রেস অবজেক্টের মতো কিছু ব্যবহার করতে পারেন।

http://jstrace.codeplex.com

(যারা যত্ন করে তাদের জন্য একটি নিউগেট প্যাকেজও রয়েছে)

সমস্ত স্তরের "ত্রুটি" এ ডিফল্ট, যদিও আপনি এগুলি "বন্ধ" করতে পারেন। যদিও, আপনি কেন ত্রুটি দেখতে চান না তা আমি ভাবতে পারি না

আপনি তাদের এগুলি পরিবর্তন করতে পারেন:

Trace.traceLevel('ModuleName1', Trace.Levels.log);
Trace.traceLevel('ModuleName2', Trace.Levels.info);

আরও ডক্সের আগে ডকুমেন্টেশন পরীক্ষা করে দেখুন

টি


2

আমি এই url জাভাস্ক্রিপ্ট টিপটিতে কোডের থেকে আরও কিছু উন্নত টুকরো পেয়েছি : কনস্টেল.লাস্ট এবং অক্ষম করুন :

var DEBUG_MODE = true; // Set this value to false for production

if(typeof(console) === 'undefined') {
   console = {}
}

if(!DEBUG_MODE || typeof(console.log) === 'undefined') {
   // FYI: Firebug might get cranky...
   console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time =    console.timeEnd = console.assert = console.profile = function() {};
}

2

আমি এই ব্যবহারের জন্য একটি লাইব্রেরি তৈরি করেছি: https://github.com/sunnykgapt/jsLogger

বৈশিষ্ট্য:

  1. এটি নিরাপদে কনসোল.লগকে ওভাররাইড করে।
  2. কনসোলটি উপলব্ধ না হলে যত্ন নেয় (ওহ হ্যাঁ, আপনাকেও এটির ফ্যাক্টর করা দরকার))
  3. পরবর্তী পুনরুদ্ধারের জন্য সমস্ত লগ সংরক্ষণ (এমনকি তারা দমন করা হলেও) রাখে।
  4. হ্যান্ডলগুলি প্রধান কনসোল ফাংশন পছন্দ log, warn, error, info

পরিবর্তনের জন্য উন্মুক্ত এবং যখনই নতুন প্রস্তাবনা আসে তখন আপডেট করা হবে।


2

এটি উইন্ডো কনসোলের সমস্ত পদ্ধতিকে ওভাররাইড করে। আপনি এটিকে আপনার স্ক্রিপ্ট বিভাগের একেবারে শীর্ষে রাখতে পারেন এবং আপনি যদি পিএইচপি ফ্রেমওয়ার্কে থাকেন তবে আপনি কেবল তখনই এই কোডটি মুদ্রণ করতে পারবেন যখন আপনার অ্যাপ্লিকেশন পরিবেশের উত্পাদন হয়, বা যদি কোনও ধরণের ডিবাগ পতাকা অক্ষম থাকে। তারপরে আপনার কোডে আপনার সমস্ত লগগুলি বিকাশ পরিবেশে বা ডিবাগ মোডে কাজ করবে।

window.console = (function(originalConsole){
    var api = {};
    var props = Object.keys(originalConsole);
    for (var i=0; i<props.length; i++) {
        api[props[i]] = function(){};
    }
    return api;
})(window.console);

1

আমি এটি লিখেছি:

//Make a copy of the old console.
var oldConsole = Object.assign({}, console);

//This function redefine the caller with the original one. (well, at least i expect this to work in chrome, not tested in others)
function setEnabled(bool) {
    if (bool) {
        //Rewrites the disable function with the original one.
        console[this.name] = oldConsole[this.name];
        //Make sure the setEnable will be callable from original one.
        console[this.name].setEnabled = setEnabled;
    } else {
        //Rewrites the original.
        var fn = function () {/*function disabled, to enable call console.fn.setEnabled(true)*/};
        //Defines the name, to remember.
        Object.defineProperty(fn, "name", {value: this.name});
        //replace the original with the empty one.
        console[this.name] = fn;
        //set the enable function
        console[this.name].setEnabled = setEnabled

    }
}

দুর্ভাগ্যক্রমে এটি কঠোর মোডের ব্যবহারে কাজ করে না।

সুতরাং ব্যবহার করে console.fn.setEnabled = setEnabledএবং তারপর console.fn.setEnabled(false)যেখানে fnপ্রায় কোনও কনসোল ফাংশন হতে পারে। আপনার ক্ষেত্রে জন্য হবে:

console.log.setEnabled = setEnabled;
console.log.setEnabled(false);

আমি এটিও লিখেছি:

var FLAGS = {};
    FLAGS.DEBUG = true;
    FLAGS.INFO = false;
    FLAGS.LOG = false;
    //Adding dir, table, or other would put the setEnabled on the respective console functions.

function makeThemSwitchable(opt) {
    var keysArr = Object.keys(opt);
    //its better use this type of for.
    for (var x = 0; x < keysArr.length; x++) {
        var key = keysArr[x];
        var lowerKey = key.toLowerCase();
        //Only if the key exists
        if (console[lowerKey]) {
            //define the function
            console[lowerKey].setEnabled = setEnabled;
            //Make it enabled/disabled by key.
            console[lowerKey].setEnabled(opt[key]);
        }
    }
}
//Put the set enabled function on the original console using the defined flags and set them.
makeThemSwitchable(FLAGS);

সুতরাং আপনাকে কেবল FLAGSপূর্বনির্ধারিত মান (উপরের কোডটি কার্যকর করার আগে) লাগাতে হবে , যেমন FLAGS.LOG = falseএবং লগ ফাংশনটি ডিফল্টরূপে অক্ষম হয়ে যায়, এবং তবুও আপনি এটি কল করতে সক্ষম করতে পারেনconsole.log.setEnabled(true)


আপনি কি মনে করেন যে এটি ফ্লাইতে উত্পাদন পরিবেশে কনসোল.লগ সক্ষম করতে ব্যবহার করা যেতে পারে? ওপেন ক্রোম কনসোলের মতো, চালান console.log.setEnabled(true)এবং লগগুলি দেখতে শুরু করুন
রড্রিগো অ্যাসিস

1
@ রড্রিগোআসিস হ্যাঁ, এটি কার্যকর হবে। আমি এটিকে কেবল কলার লাইনটি হারাতে এবং যে কোনও জায়গায় সক্ষম না করার জন্য এটি তৈরি করেছি, তবে এটি করার সর্বোত্তম উপায় এটি নয়। লগগুলির জন্য সর্বোত্তম উপায় হ'ল শর্ট সার্কিট উপায়টি ব্যবহার করা: var debug = false; debug && console.log(1/3)কারণ লগ সামগ্রীটি সক্ষম না করা থাকলে আপনার মূল্যায়ন করার প্রয়োজন নেই (এই ক্ষেত্রে 1/3মূল্যায়ন করা হবে না), কলার লাইনটি হারাবেন না এবং সক্ষম করতে পারবেন এটি খুব সহজেই (যদি স্বরূপ হিসাবে যুদ্ধ না করে)।
গ্যাব্রিয়েল ডি অলিভিরা রোহডেন

1

সমস্ত console.*ফাংশনগুলি অক্ষম / ওভাররাইড করার জন্য আমার বিস্তৃত সমাধান এখানে

অবশ্যই, প্রয়োজনীয় প্রসঙ্গটি যাচাই করার পরে আপনি এটি অন্তর্ভুক্ত করছেন তা নিশ্চিত করুন। উদাহরণস্বরূপ, কেবলমাত্র উত্পাদন মুক্তির সাথে এটি অন্য কোনও গুরুত্বপূর্ণ উপাদানগুলিতে বোমা ফাটাচ্ছে না ইত্যাদি etc.

এটি এখানে উদ্ধৃত:

"use strict";
(() => {
  var console = (window.console = window.console || {});
  [
    "assert", "clear", "count", "debug", "dir", "dirxml",
    "error", "exception", "group", "groupCollapsed", "groupEnd",
    "info", "log", "markTimeline", "profile", "profileEnd", "table",
    "time", "timeEnd", "timeStamp", "trace", "warn"
  ].forEach(method => {
    console[method] = () => {};
  });
  console.log("This message shouldn't be visible in console log");
})();


1

আপনি যদি ঝাল ব্যবহার করছেন তবে আপনি এই প্লাগইনটি ব্যবহার করতে পারেন :

কমান্ডটি সহ এই প্লাগইনটি ইনস্টল করুন:

npm install gulp-remove-logging

এরপরে, আপনার গল্পফাইলে এই লাইনটি যুক্ত করুন:

var gulp_remove_logging = require("gulp-remove-logging");

শেষ অবধি, আপনার গলফিলিতে কনফিগারেশন সেটিংস যুক্ত করুন (নীচে দেখুন)।

টাস্ক কনফিগারেশন

gulp.task("remove_logging", function() {
     return gulp.src("src/javascripts/**/*.js")
    .pipe(
      gulp_remove_logging()
    )
    .pipe(
      gulp.dest(
        "build/javascripts/"
      )
    ); });


0

কনসোল.দেবগ / লগ (চারপাশে) সমস্ত কল আটকাতে আপনি জাভাস্ক্রিপ্ট এওপি (যেমন jquery-aop ) ব্যবহার করতে পারেন এবং কিছু বিশ্বব্যাপী ভেরিয়েবল মিথ্যাতে সেট করা থাকলে প্রকৃত প্রার্থনাটির সাথে এগিয়ে যান না।

এমনকি আপনি একটি আজাক্স কলও করতে পারেন (এখন এবং তারপরে) তাই আপনি সার্ভারে লগ সক্ষম / অক্ষম আচরণটি পরিবর্তন করতে পারেন যা কোনও মঞ্চ পরিবেশে বা এ জাতীয় সমস্যার মুখোমুখি হওয়ার সময় ডিবাগিং সক্ষম করার জন্য অত্যন্ত আকর্ষণীয় হতে পারে।


আমি এরকম সমাধান প্রয়োগ করি নি, দেখিনিও। এটি এখন পর্যন্ত তাত্ত্বিক।
স্টিজন গিউকেনস

0

আপনি লজেক ব্যবহার করতে পারেন , এটি আপনাকে আপনার লগ বার্তাগুলির দৃশ্যমানতা নিয়ন্ত্রণ করতে দেয়। আপনি এটি কীভাবে করেন তা এখানে:

<script src="bower_components/dist/logeek.js"></script>

logeek.show('security');

logeek('some message').at('copy');       //this won't be logged
logeek('other message').at('secturity'); //this would be logged

আপনি logeek.show('nothing')প্রতিটি লগ বার্তা সম্পূর্ণ নিষ্ক্রিয় করতে পারেন ।


0

এই সমস্যার জন্য কিছু গবেষণা এবং উন্নয়ন করার পরে, আমি এই সমাধানটি পেয়েছি যা আপনার পছন্দ অনুসারে সতর্কতা / ত্রুটি / লগগুলি গোপন করবে।

    (function () {
    var origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function () {        
        console.warn = function () { };
        window['console']['warn'] = function () { };
        this.addEventListener('load', function () {                        
            console.warn('Something bad happened.');
            window['console']['warn'] = function () { };
        });        
    };
})();

এই কোডটি JQuery প্লাগইন (যেমন /../jquery.min.js) এর আগে যুক্ত করুন এমনকি এটি জাভাস্ক্রিপ্ট কোড যেমন JQuery প্রয়োজন হয় না। কারণ কিছু সতর্কতা নিজেই জ্যাকিউরে রয়েছে।

ধন্যবাদ !!


0

আমি একটি ES2015 সমাধান লিখেছি (কেবল ওয়েবপ্যাক দিয়ে ব্যবহার করুন )।

class logger {
  static isEnabled = true;

  static enable () {
    if(this.constructor.isEnabled === true){ return; }

    this.constructor.isEnabled = true;
  }

  static disable () {
    if(this.constructor.isEnabled === false){ return; }

    this.constructor.isEnabled = false;
  }

  static log () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['log'].apply(this, copy);
  }

  static warn () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['warn'].apply(this, copy);
  }

  static error () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['error'].apply(this, copy);
  }
}

বর্ণনা:

  1. Logger.enable এবং logger.dableable এর সাথে আপনি কনসোল ব্যবহার করতে পারেন [['লগ', 'সতর্কতা', 'ত্রুটি'] পদ্ধতি পাশাপাশি লগার ক্লাস ব্যবহার করে।
  2. বার্তা প্রদর্শন, সক্ষম বা অক্ষম করার জন্য লগার ক্লাস ব্যবহার করে কোডটি অনেক বেশি পরিচ্ছন্ন এবং রক্ষণাবেক্ষণযোগ্য করে তোলে।
  3. নীচের কোডটি আপনাকে কিভাবে লগার ক্লাসটি ব্যবহার করবেন তা দেখায়:
    • logger.disable() - সমস্ত কনসোল বার্তা অক্ষম করুন
    • logger.enable() - সমস্ত কনসোল বার্তা সক্ষম করুন
    • logger.log('message1', 'message2') - কনসোল.লগের মতো কাজ করে।
    • logger.warn('message1', 'message2') - ঠিক কনসোল.ওয়ার্নের মতো কাজ করে।
    • logger.error('message1', 'message2')- কনসোল.অররের মতো ঠিক কাজ করে। শুভ কোডিং ..
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.