কীভাবে পদ্ধতির নাম এবং লাইন নম্বর প্রিন্ট করবেন এবং শর্তসাপেক্ষে এনএসএলজি অক্ষম করবেন?


446

আমি এক্সকোডে ডিবাগিং সম্পর্কিত একটি উপস্থাপনা করছি এবং এনএসএলগকে দক্ষতার সাথে ব্যবহার করার জন্য আরও তথ্য পেতে চাই।

বিশেষত, আমার দুটি প্রশ্ন রয়েছে:

  • বর্তমান পদ্ধতির নাম / রেখা নম্বরটি সহজেই এনএসএলগ করার কোনও উপায় আছে?
  • রিলিজ কোডের সংকলনের আগে সহজেই সমস্ত এনএসএলোগগুলি "অক্ষম" করার কোনও উপায় আছে কি?

12
প্রথম প্রশ্ন যেখানে ফেভারিট (তারকা) আরও বেশি তারপরে ... +1 ..
ফাহিম পার্কার

উত্তর:


592

এনএসএলগের চারপাশে কয়েকটি দরকারী ম্যাক্রোগুলি এখানে আমি ব্যবহার করি:

#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#   define DLog(...)
#endif

// ALog always displays output regardless of the DEBUG setting
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

ডিএলগ ম্যাক্রো কেবলমাত্র আউটপুট ব্যবহার করা হয় যখন ডিইবিইউজি ভেরিয়েবলটি সেট করা হয় (-ডাব্যাগ কনফার্মেশনটির জন্য প্রকল্পগুলির সি পতাকাগুলিতে -DDEBUG)।

ALOL সর্বদা পাঠ্য আউটপুট (নিয়মিত এনএসএলগের মতো) করবে।

আউটপুট (উদাঃ ALog (@ "হ্যালো ওয়ার্ল্ড")) ​​এর মতো দেখতে পাবেন:

-[LibraryController awakeFromNib] [Line 364] Hello world

আপনার কাছে একটি ## কেন? আমি ভেবেছিলাম এটি একসাথে আর্গুমেন্টের জন্য ছিল, তবে আপনি কোনও কিছুর প্রতি আকস্মিক নন।
কেসব্যাশ

1
এটি যুক্তিগুলির সম্ভাব্য ম্যাক্রো সম্প্রসারণ রোধ করে
59

সাধারণভাবে ম্যাক্রোগুলির সাথে এটি ঘটতে পারে; কিছু ম্যাক্রো একাধিক লাইন দেয় yield সর্বদা ব্রেস ব্যবহার করার জন্য কেবল অন্য যুক্তি ;-)।
গেছেন

গ্রেট এবং কোকোস 2 ডি এপিআইয়ের অনুরূপ লগ স্টেটমেন্ট রয়েছে।
ইউন লি

এটি কীভাবে নিয়ন্ত্রণ স্ট্রিংগুলিতে যুক্ত হওয়ার (@"%s [Line %d] " fmt)কারণ হয় fmt? এই ডিবাগ ম্যাক্রো ব্যতীত আমি এই সিনট্যাক্সটি দেখিনি।
রবার্ট আল্টম্যান

141

আমি উপরে থেকে নিয়েছি DLogএবং ALogযুক্ত করেছি ULogযা একটি UIAlertViewবার্তা উত্থাপন করে ।

সংক্ষেপ:

  • DLogNSLogকেবলমাত্র DEBUG ভেরিয়েবল সেট করা হলে আউটপুট আসবে
  • ALog সর্বদা মত আউটপুট হবে NSLog
  • ULogUIAlertViewকেবলমাত্র যখন DEBUG ভেরিয়েবল সেট করা থাকে তা দেখায়
#ifdef DEBUG
# ডিএলগ (এফএমটি, ...) সংজ্ঞায়িত করুন (এনএসএলজি (@ "% s [লাইন% ডি]" এফএমটি)), __PRETTY_FUNCTION__, __LINE__, ## __ VA_ARGS__);
#else
# ডিএলগ সংজ্ঞায়িত করুন (...)
#শেষ যদি
# নির্ধারিত এলোগ (এফএমটি, ...) এনএসএলগ ((@ "% s [লাইন% ডি]" এফএমটি)), __PRETTY_FUNCTION__, __LINE__, ## __ VA_ARGS__);
#ifdef DEBUG
# এলওগ (এফএমটি, ...) সংজ্ঞায়িত করুন {ইউআইএলআর্টভিউ * সতর্কতা = [[ইউআইএলআর্টভিউ বরাদ্দ] টিউইথ শিরোনাম: [এনএসএস স্ট্রিংউইথ ফরমেট: @ "% s \ n [লাইন% ডি]", __প্রিটিটি_ফানક્શન__, __LINE__] বার্তা: [এনএসএস স্ট্রিংটাইম: , ## __ ভিএ_আরজিএস__] প্রতিনিধি: শূন্য বাতিললটনটন: @ "ওকে" অন্যান্য বাটন টিটলস: শূন্য]; [সতর্কতা শো]; }
#else
# আলগ সংজ্ঞা দিন (...)
#শেষ যদি

এটি দেখতে এটির মতো:

ডিবাগ ইউআইএলার্টভিউ

+1 ডিয়েডেরিক


আমি আমার আলগ + ডিএলওগ কোডটিও ইউলোগের সাথে প্রসারিত করব। খুব দরকারী.
নিউনি

এই কোডটি
ডিবিবিজে

কেন কিছু # নির্দিষ্ট নির্দেশাবলী সেমিকোলন দিয়ে শেষ হয়?
মনস্টিওর

@ লোকুটাস তাই আপনাকে DLogবিবৃতি দেওয়ার পরে একটি সেমিকোলন লাগাতে হবে না । এটি দরকারী কারণ আপনি যদি মুক্তির বিনিময়ে DLogকিছু করেন না তবে এটি সংকলিত থাকে এবং আপনার কোডে ঝোলা অর্ধকোলন রেখে যায়। এটি কোনও ত্রুটি নয়, তবে এটি আপনার সেটিংসের উপর নির্ভর করে একটি সতর্কতা ছুঁড়ে দিতে পারে, যদি এটি অন্য কোনও অর্ধসীমা অনুসরণ করে।
জেভ আইজেনবার্গ

74
NSLog(@"%s %d %s %s", __FILE__, __LINE__, __PRETTY_FUNCTION__, __FUNCTION__);

আউটপুট ফাইলের নাম, লাইন নম্বর এবং ফাংশনের নাম:

/proj/cocoa/cdcli/cdcli.m 121 managedObjectContext managedObjectContext

__FUNCTION__সি ++ শোতে মঙ্গলের নামগুলি দুর্দান্ত __PRETTY_FUNCTION__ফাংশনটির নাম দেখায়, কোকোতে তারা দেখতে একই রকম।

এনএসএলগ নিষ্ক্রিয় করার সঠিক উপায় কী তা আমি নিশ্চিত নই, আমি এটি করেছি:

#define NSLog

এবং কোনও লগিং আউটপুট প্রদর্শিত হয়নি, তবে এর কোনও পার্শ্ব প্রতিক্রিয়া আছে কিনা তা আমি জানি না।


20

এখানে আমরা ব্যবহার করা ডিবাগ কনস্ট্যান্টগুলির একটি বড় সংগ্রহ। উপভোগ করুন।

// Uncomment the defitions to show additional info.

//  #define DEBUG

//  #define DEBUGWHERE_SHOWFULLINFO

//  #define DEBUG_SHOWLINES
//  #define DEBUG_SHOWFULLPATH
//  #define DEBUG_SHOWSEPARATORS
//  #define DEBUG_SHOWFULLINFO


// Definition of DEBUG functions. Only work if DEBUG is defined.
#ifdef DEBUG 

    #define debug_separator() NSLog( @"────────────────────────────────────────────────────────────────────────────" );

    #ifdef DEBUG_SHOWSEPARATORS
        #define debug_showSeparators() debug_separator();
    #else
        #define debug_showSeparators()
    #endif

    /// /// /// ////// ///// 

    #ifdef DEBUG_SHOWFULLPATH
        #define debug_whereFull() debug_showSeparators(); NSLog(@"Line:%d : %s : %s", __LINE__,__FILE__,__FUNCTION__); debug_showSeparators(); 
    #else
        #define debug_whereFull() debug_showSeparators(); NSLog(@"Line:%d : %s : %s", __LINE__,[ [ [ [NSString alloc] initWithBytes:__FILE__ length:strlen(__FILE__) encoding:NSUTF8StringEncoding] lastPathComponent] UTF8String ] ,__FUNCTION__); debug_showSeparators(); 
    #endif

    /// /// /// ////// ///// 

    #define debugExt(args,...) debug_separator(); debug_whereFull(); NSLog( args, ##__VA_ARGS__); debug_separator();

    /// /// /// ////// ///// Debug Print Macros

    #ifdef DEBUG_SHOWFULLINFO
        #define debug(args,...) debugExt(args, ##__VA_ARGS__);
    #else
        #ifdef DEBUG_SHOWLINES
            #define debug(args,...) debug_showSeparators(); NSLog([ NSString stringWithFormat:@"Line:%d : %@", __LINE__, args ], ##__VA_ARGS__); debug_showSeparators();
        #else
            #define debug(args,...) debug_showSeparators(); NSLog(args, ##__VA_ARGS__); debug_showSeparators();
        #endif
    #endif

    /// /// /// ////// ///// Debug Specific Types

    #define debug_object( arg ) debug( @"Object: %@", arg );
    #define debug_int( arg ) debug( @"integer: %i", arg );
    #define debug_float( arg ) debug( @"float: %f", arg );
    #define debug_rect( arg ) debug( @"CGRect ( %f, %f, %f, %f)", arg.origin.x, arg.origin.y, arg.size.width, arg.size.height );
    #define debug_point( arg ) debug( @"CGPoint ( %f, %f )", arg.x, arg.y );
    #define debug_bool( arg )   debug( @"Boolean: %@", ( arg == YES ? @"YES" : @"NO" ) );

    /// /// /// ////// ///// Debug Where Macros

    #ifdef DEBUGWHERE_SHOWFULLINFO
        #define debug_where() debug_whereFull(); 
    #else
        #define debug_where() debug(@"%s",__FUNCTION__); 
    #endif

    #define debug_where_separators() debug_separator(); debug_where(); debug_separator();

    /// /// /// ////// /////

#else
    #define debug(args,...) 
    #define debug_separator()  
    #define debug_where()   
    #define debug_where_separators()  
    #define debug_whereFull()   
    #define debugExt(args,...)
    #define debug_object( arg ) 
    #define debug_int( arg ) 
    #define debug_rect( arg )   
    #define debug_bool( arg )   
    #define debug_point( arg )
    #define debug_float( arg )
#endif

19

একটি নতুন কৌশল আছে যা কোনও উত্তর দেয় না। printfপরিবর্তে আপনি ব্যবহার করতে পারেন NSLog। এটি আপনাকে একটি পরিষ্কার লগ দেবে:

সঙ্গে NSLogআপনি পেতে ভালো জিনিস:

2011-11-03 13:43:55.632 myApp[3739:207] Hello Word

তবে printfআপনি কেবল পান:

Hello World

এই কোড ব্যবহার করুন

#ifdef DEBUG
    #define NSLog(FORMAT, ...) fprintf(stderr,"%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
    #define NSLog(...) {}              
#endif

16

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

#define DEBUG_MODE

#ifdef DEBUG_MODE
    #define DebugLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, 
              [[NSString stringWithUTF8String:__FILE__] lastPathComponent], 
              __LINE__, 
              [NSString stringWithFormat:(s), 
              ##__VA_ARGS__] )
#else
    #define DebugLog( s, ... ) 
#endif

কারণ আপনি %sফর্ম্যাট স্পেসিফিকে ডড করেছেন যা অ্যাপল -Wcstring-format-directive2015 সালে নতুনভাবে প্রবর্তিত কলংয়ের সতর্কতা অবমূল্যায়ন এবং এড়িয়ে চলা চেষ্টা করছে ।
জেফ

13

সমস্ত এনএসলোগগুলি অক্ষম করা, কারও জন্য ম্যাক্রোসের সাথে অ্যালার্জি রয়েছে, এখানে এমন কিছু যা আপনিও সংকলন করতে পারেন:

void SJLog(NSString *format,...)
{
    if(LOG)
    {   
        va_list args;
        va_start(args,format);
        NSLogv(format, args);
        va_end(args);
    }
}

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

SJLog(@"bye bye NSLogs !");

এই ব্লগ থেকে: https://whackylabs.com/logging/ios/2011/01/19/ios-moving-in-and-out-of-nslogs/


11

উপরের উত্তরগুলির পরিপূরক হিসাবে, কিছু পরিস্থিতিতে বিশেষত ডিবাগ করার সময় এনএসএলগের প্রতিস্থাপন ব্যবহার করা বেশ কার্যকর হতে পারে। উদাহরণস্বরূপ, প্রতিটি লাইনে সমস্ত তারিখ এবং প্রক্রিয়া নাম / আইডি তথ্য থেকে মুক্তি পাওয়ার ফলে আউটপুট আরও পঠনযোগ্য এবং দ্রুত বুটে যেতে পারে।

সাধারণ লগইন অনেক ভাল করার জন্য নিম্নলিখিত লিঙ্কটি বেশ কিছুটা কার্যকর বারুদ সরবরাহ করে।

http://cocoaheads.byu.edu/wiki/a-different-nslog


11

আপনার বিদ্যমান এনএসএলগগুলি লাইন নম্বর এবং শ্রেণি যেখানে প্রদর্শিত হয় সেগুলি প্রদর্শন করা তাদের পক্ষে পরিবর্তন করা সহজ। আপনার উপসর্গ ফাইলটিতে কোডের একটি লাইন যুক্ত করুন:

#define NSLog(__FORMAT__, ...) NSLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

3
এটা অসাধারণ! আপনি কীভাবে তাড়াতাড়ি করবেন?
uplearnedu.com 22'15

@ অ্যাডিসডেভ আমি এইটি পছন্দ করি। খুব পরিষ্কার এবং সহজ। আমি কেবল এনএসলগ ব্যবহার করি। DLog এবং ULog যাই হোক না কেন আমার কোনও ধারণা নেই! ধন্যবাদ। ভোট দিয়েছেন ...
চার্লস রবার্টসন

@ অ্যাডিসডেভ আমি সত্যিই বুঝতে পারি না কেন অ্যাপল ডিফল্টরূপে এনএসএলগ () এ এই অতি গুরুত্বপূর্ণ ডেটা যোগ করে না? উদ্ভট ...
চার্লস রবার্টসন

8

উদাহরণস্বরূপ এটি সহজ

- (শূন্য) অ্যাপ্লিকেশনউইলএফটারগ্রাউন্ড: (ইউআইএএপ্লিকেশন *) আবেদন

    NSLog(@"%s", __PRETTY_FUNCTION__);

}

আউটপুট: - [অ্যাপ্লিকেশন অ্যাপ্লিকেশনওয়ালইন্টারফোরগ্রাউন্ড:]


5

উপরের উত্তরের উপরে বিল্ডিং, এখানে আমি যা চুরি করেছি এবং সামনে এসেছি। মেমরি লগিং যুক্ত।

#import <mach/mach.h>

#ifdef DEBUG
#   define DebugLog(fmt, ...) NSLog((@"%s(%d) " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DebugLog(...)
#endif


#define AlwaysLog(fmt, ...) NSLog((@"%s(%d) " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);


#ifdef DEBUG
#   define AlertLog(fmt, ...)  { \
    UIAlertView *alert = [[UIAlertView alloc] \
            initWithTitle : [NSString stringWithFormat:@"%s(Line: %d) ", __PRETTY_FUNCTION__, __LINE__]\
                  message : [NSString stringWithFormat : fmt, ##__VA_ARGS__]\
                 delegate : nil\
        cancelButtonTitle : @"Ok"\
        otherButtonTitles : nil];\
    [alert show];\
}
#else
#   define AlertLog(...)
#endif



#ifdef DEBUG
#   define DPFLog NSLog(@"%s(%d)", __PRETTY_FUNCTION__, __LINE__);//Debug Pretty Function Log
#else
#   define DPFLog
#endif


#ifdef DEBUG
#   define MemoryLog {\
    struct task_basic_info info;\
    mach_msg_type_number_t size = sizeof(info);\
    kern_return_t e = task_info(mach_task_self(),\
                                   TASK_BASIC_INFO,\
                                   (task_info_t)&info,\
                                   &size);\
    if(KERN_SUCCESS == e) {\
        NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; \
        [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; \
        DebugLog(@"%@ bytes", [formatter stringFromNumber:[NSNumber numberWithInteger:info.resident_size]]);\
    } else {\
        DebugLog(@"Error with task_info(): %s", mach_error_string(e));\
    }\
}
#else
#   define MemoryLog
#endif

4

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

সংক্ষিপ্ত সংস্করণ: গ্লোবাল ভেরিয়েবল তৈরি করুন (হ্যাঁ, অলস এবং সহজ সমাধান) এবং এর মতো ডিএলওগ সংশোধন করুন:

BOOL myDebugEnabled = FALSE;
#define DLog(fmt, ...) if (myDebugEnabled) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

জিমনিয়াস আইলেসনস-এর দীর্ঘ উত্তর iLearned: প্রকাশিত অ্যাপ্লিকেশনটিতে ডায়নামিক ডিবাগ লগিং কীভাবে করবেন


3

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

প্রথমত, আমি উপরের রডরিগো দ্বারা বর্ণিত হিসাবে প্রিন্টফের সাথে এনএসএলগকে optionচ্ছিকভাবে প্রতিস্থাপন করব

#define NSLOG_DROPCHAFF//comment out to get usual date/time ,etc:2011-11-03 13:43:55.632 myApp[3739:207] Hello Word

#ifdef NSLOG_DROPCHAFF
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#endif

এরপরে, আমি লগিং চালু বা বন্ধ করব।

#ifdef DEBUG
#define LOG_CATEGORY_DETAIL// comment out to turn all conditional logging off while keeping other DEBUG features
#endif

প্রধান ব্লকে, আপনার অ্যাপের মডিউলগুলির সাথে সম্পর্কিত বিভিন্ন বিভাগ নির্ধারণ করুন। উপরে একটি লগিং স্তর নির্ধারণ করুন যা লগিং কলগুলি কল করা হবে না। তারপরে এনএসএলগ আউটপুটটির বিভিন্ন স্বাদ নির্ধারণ করুন

#ifdef LOG_CATEGORY_DETAIL

    //define the categories using bitwise leftshift operators
    #define kLogGCD (1<<0)
    #define kLogCoreCreate (1<<1)
    #define kLogModel (1<<2)
    #define kLogVC (1<<3)
    #define kLogFile (1<<4)
    //etc

    //add the categories that should be logged...
    #define kLOGIFcategory kLogModel+kLogVC+kLogCoreCreate

    //...and the maximum detailLevel to report (use -1 to override the category switch)
    #define kLOGIFdetailLTEQ 4

    // output looks like this:"-[AppDelegate myMethod] log string..."
    #   define myLog(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%s " format), __PRETTY_FUNCTION__, ##__VA_ARGS__);}

    // output also shows line number:"-[AppDelegate myMethod][l17]  log string..."
    #   define myLogLine(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%s[l%i] " format), __PRETTY_FUNCTION__,__LINE__ ,##__VA_ARGS__);}

    // output very simple:" log string..."
    #   define myLogSimple(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"" format), ##__VA_ARGS__);}

    //as myLog but only shows method name: "myMethod: log string..."
    // (Doesn't work in C-functions)
    #   define myLog_cmd(category,detailLevel,format,...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%@: " format), NSStringFromSelector(_cmd), ##__VA_ARGS__);}

    //as myLogLine but only shows method name: "myMethod>l17: log string..."
    #   define myLog_cmdLine(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%@>l%i: " format), NSStringFromSelector(_cmd),__LINE__ , ##__VA_ARGS__);}

    //or define your own...
   // # define myLogEAGLcontext(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%s>l%i (ctx:%@)" format), __PRETTY_FUNCTION__,__LINE__ ,[EAGLContext currentContext], ##__VA_ARGS__);}

#else
    #   define myLog_cmd(...)
    #   define myLog_cmdLine(...)
    #   define myLog(...)
    #   define myLogLine(...)
    #   define myLogSimple(...)
    //#   define myLogEAGLcontext(...)
#endif

এইভাবে, কেএলজিআইএফআইপি বিভাগ এবং কলোজিফডিটেল এলটিইকিউয়ের জন্য বর্তমানের সেটিংসের মতো একটি কল

myLogLine(kLogVC, 2, @"%@",self);

মুদ্রণ করবে কিন্তু এটি হবে না

myLogLine(kLogGCD, 2, @"%@",self);//GCD not being printed

না হবে

myLogLine(kLogGCD, 12, @"%@",self);//level too high

আপনি যদি পৃথক লগ কলের জন্য সেটিংসকে ওভাররাইড করতে চান তবে একটি নেতিবাচক স্তর ব্যবহার করুন:

myLogLine(kLogGCD, -2, @"%@",self);//now printed even tho' GCD category not active.

আমি প্রতিটি লাইনে টাইপ করার জন্য কয়েকটি অতিরিক্ত অক্ষর দেখতে পাচ্ছি তার চেয়ে উপযুক্ত

  1. সম্পূর্ণ শ্রেণীর মন্তব্যের উপর বা স্যুইচ করুন (যেমন কেবলমাত্র সেই কলগুলিকে মডেল হিসাবে চিহ্নিত করুন)
  2. উচ্চ স্তরের নম্বরগুলির সাথে সূক্ষ্ম বিশদ বা কম সংখ্যার সাথে চিহ্নিত সবচেয়ে গুরুত্বপূর্ণ কলগুলির প্রতিবেদন করুন

আমি নিশ্চিত যে অনেকে এটিকে ওভারকিলের কিছুটা খুঁজে পাবেন, তবে কেবল যদি কেউ এটির উদ্দেশ্যে লক্ষ্য করে ..

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.