Difference between NSLog and DLog
Asked Answered
H

5

25

Can anyone tell me what the difference is between NSLog and DLog?

I found about this DLog when I was looking over this project code: http://code.google.com/p/iphone-socks-proxy/

Hedi answered 11/3, 2012 at 22:59 Comment(4)
What is DLog out of curiosity?Epitaph
google.com/search?q=DLog+vs+NSLog 989,000 results.Libertarian
The Evolution of a Replacement for NSLogKetosis
@Libertarian and this is the top hit.Gardol
C
9

NSLog is a function that's built into the Foundation framework that Apple provides. I've never heard of DLog, so I assume that it's a non-standard function that's implemented by the code you're looking at.

Caldwell answered 11/3, 2012 at 23:4 Comment(3)
DLog stands for 'Debug Log' (I'm assuming) and is usually a macro that evaluates to nothing if the DEBUG environment flag is turned off - mostly in shipping apps.Echinate
@Kurt: Even I thought that in first place but I could not find anything in that project. And Here is the project link which I am looking at: code.google.com/p/iphone-socks-proxyHedi
It's defined in SocksProxy_Prefix.pch.Caldwell
W
70

DLog is a commonly used "Debug NSLog" alternative (just Google for it)

Here is a complete set of Log #define directives (including ULog, a UIAlertView based Logging feature)

// DLog will output like NSLog only when the DEBUG variable is set

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

// ALog will always output like NSLog

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

// ULog will show the UIAlertView only when the DEBUG variable is set 

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

Just put them in your precompile header (.pch) file.

(source: http://overbythere.co.uk/blog/2012/01/alternatives-nslog)

Winnie answered 12/9, 2012 at 7:1 Comment(5)
Hello my project don't have a PCH file. So where to put it?Junia
@Rocotilos maybe you are using swift (so, no pch file..)Winnie
Actually I am using ObjC. Xcode 7.3.1. Project is single view and storyboard mode. If no PCH, do u know where to put this code to use them?Junia
@Rocotilos create your pch as explained here #24159148Winnie
Pascal, thanks that clarifies it nicely. I think it is weird to put in PCH too. Each project should have its own headers. Or maybe one can make static library and use that for most projects.Junia
L
13

DLog is a macro meant to conditionalize the behavior of NSLog() in debug and release builds. For release builds it will print nothing. NSLog() is meant to print format strings to the console.

Here is its definition for reference:

#ifdef DEBUG
#    define DLog(...) NSLog(__VA_ARGS__)
#else
#    define DLog(...) /* */
#endif
#define ALog(...) NSLog(__VA_ARGS__)
Libertarian answered 11/3, 2012 at 23:5 Comment(1)
That's not true. NSLog isn't meant to be used to print string literals to console - for that, you can use printf (or fputs) and friends if you'd like. The point of NSLog is to print useful and valid information to the system log.Echinate
C
9

NSLog is a function that's built into the Foundation framework that Apple provides. I've never heard of DLog, so I assume that it's a non-standard function that's implemented by the code you're looking at.

Caldwell answered 11/3, 2012 at 23:4 Comment(3)
DLog stands for 'Debug Log' (I'm assuming) and is usually a macro that evaluates to nothing if the DEBUG environment flag is turned off - mostly in shipping apps.Echinate
@Kurt: Even I thought that in first place but I could not find anything in that project. And Here is the project link which I am looking at: code.google.com/p/iphone-socks-proxyHedi
It's defined in SocksProxy_Prefix.pch.Caldwell
T
8

Hi, Below the macro cmd for NSLOG replacement file format and also below i mentioned undef Macro as well as

Definition:

#define _LOG_TO_CONSOLE_ //#undef _LOG_TO_CONSOLE_
#ifdef _LOG_TO_CONSOLE_
#define DLog(format, ...) NSLog(format, ##__VA_ARGS__)
#else
#define DLog(format, ...)
#endif
Tully answered 21/6, 2014 at 10:1 Comment(0)
D
0

I think an important difference between NSLog and DLog is that NSLog lags the execution of the program (imagine forgetting to remove all NSLog calls in production/publishing), so for debug purposes DLog should be used.

Duodecillion answered 30/3, 2016 at 10:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.