z***e 发帖数: 5393 | 1 就是要在production上设一个debug flag,然后把所有细节都能log下来。
问题是这个所有细节就有很多,而且很多步。
本来简单的做法就是
void debug(boolean debugFlag, String message) {
if (debugFlag) {
log(message);
}
}
那么caller就会有很多种这种:
debug(flag, "Data1: "+ ...+....+...);
debug(flag, "Data2: "+ ...+....+...);
debug(flag, "Data3: "+ ...+....+...);
但是如果没有设置debugflag,我不知道"Data1: "+ ...+....+...这种string concat
会不会执行。如果是C/C++的话,这种直接inline就好了,但是java又不能inline。
我把它改成:
void debug(boolean debugFlag, String... message) {
...
}
然后在里面再去concat string,这样是不是好点? |
m****r 发帖数: 6639 | 2 这个我们家里刚刚奋战过.
java里面, 就是需要caller去检查那个flag.
【在 z***e 的大作中提到】 : 就是要在production上设一个debug flag,然后把所有细节都能log下来。 : 问题是这个所有细节就有很多,而且很多步。 : 本来简单的做法就是 : void debug(boolean debugFlag, String message) { : if (debugFlag) { : log(message); : } : } : 那么caller就会有很多种这种: : debug(flag, "Data1: "+ ...+....+...);
|
g*****g 发帖数: 34805 | 3 Use log4j, and write code like
if(logger.isDebugEnabled() {
logger.debug(xxx)
}
This is the standard practice. You can change logging level with
log4j configuration in runtime.
【在 z***e 的大作中提到】 : 就是要在production上设一个debug flag,然后把所有细节都能log下来。 : 问题是这个所有细节就有很多,而且很多步。 : 本来简单的做法就是 : void debug(boolean debugFlag, String message) { : if (debugFlag) { : log(message); : } : } : 那么caller就会有很多种这种: : debug(flag, "Data1: "+ ...+....+...);
|
S****h 发帖数: 558 | 4 I think log4j will automatically short-circuit. Your code will also do the
short-circuit on "if".
【在 z***e 的大作中提到】 : 就是要在production上设一个debug flag,然后把所有细节都能log下来。 : 问题是这个所有细节就有很多,而且很多步。 : 本来简单的做法就是 : void debug(boolean debugFlag, String message) { : if (debugFlag) { : log(message); : } : } : 那么caller就会有很多种这种: : debug(flag, "Data1: "+ ...+....+...);
|
g*****g 发帖数: 34805 | 5 log.debug( "a" + "b"), concatenation occurs before the debug call.
that's why you need isDebugEnabled()
【在 S****h 的大作中提到】 : I think log4j will automatically short-circuit. Your code will also do the : short-circuit on "if".
|
r*****l 发帖数: 2859 | 6 What do you mean?
【在 S****h 的大作中提到】 : I think log4j will automatically short-circuit. Your code will also do the : short-circuit on "if".
|
S****h 发帖数: 558 | 7 You are right.
【在 g*****g 的大作中提到】 : log.debug( "a" + "b"), concatenation occurs before the debug call. : that's why you need isDebugEnabled()
|
c******n 发帖数: 4965 | 8 I hate this stupid idiom of
if (log.isDebugEnabled()) {
log.debug()
}
just wrap all log.debug() with AspectJ and the code will be automatically re
-written
【在 z***e 的大作中提到】 : 就是要在production上设一个debug flag,然后把所有细节都能log下来。 : 问题是这个所有细节就有很多,而且很多步。 : 本来简单的做法就是 : void debug(boolean debugFlag, String message) { : if (debugFlag) { : log(message); : } : } : 那么caller就会有很多种这种: : debug(flag, "Data1: "+ ...+....+...);
|
r*****y 发帖数: 264 | |