关于Logger

Looger是和调试方法同等重要的编程辅助利器,出道以来,维护最久的模块就是自己的Logger。最初是把它做得无比强大,支持多线程、支持多级别,引入Singleton让调用简单。后来发现几乎都用不着,最大的诉求是接口简单,不需要每次用之前复习。代码最好能简洁,最好就一个文件。

前天找到一种一句话解决问题的C版的Logger,必须记录下来,以后就它了:

Logger C版

1
2
3
4
5
#if 1
#define LOG(format, ...) printf("[%-12s:%-4d ] "format"\n", __FILE__, __LINE__, ##__VA_ARGS__)
#else
#define LOG(format, ...)
#endif

简洁吧~ 在Linux下使用很方便,Windows需要做一个Unicode字串的转换,以后用得着时再更新吧。

Logger Python版

顺道把其他版本的也备忘一下,python的logger机制做得很顺手了,只是在使用之前,需要自己配置一下log格式:

1
2
3
4
5
6
7
import logging

......
loggingFormat = '%(asctime)s %(lineno)4d %(levelname)-8s %(message)s'
logging.basicConfig(level=logging.DEBUG, format=loggingFormat, datefmt='%H:%M')

logging.debug('hello word!')

Logger objective-c版

1
2
3
4
5
#if DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"[%s:%d]\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String])
#else
#define NSLog(FORMAT, ...) nil
#endif