java中宏替换的替代方法

时间:2011-02-09 17:50:31

标签: java macros constants

我有一个日志语句,我总是使用this.getClass().getSimpleName()作为第一个参数。 我想把它放在某种宏常量中,并在我的所有日​​志语句中使用它。 但我了解到Java没有像C ++那样简单的机制。

在Java中实现此类功能的最佳方法是什么?

我的示例日志语句(来自Android)如下..

Log.v(this.getClass().getSimpleName(),"Starting LocIden service...");

4 个答案:

答案 0 :(得分:5)

Java没有宏,但您可以缩短代码:

Log.v(this, "Starting LocIden service...");

Log课程中:

public void v(Object object, String s)
{
    _v(object.getClass().getSimpleName(), s);
}

另一种方法可能是检查调用堆栈。

答案 1 :(得分:1)

Karthik,大多数日志工具允许您指定输出的格式,其中一个参数是类名,它使用Mark提到的方法(堆栈检查)

例如,在log4j中,参数为%C以引用类名。

答案 2 :(得分:0)

另一种方法是遵循Android建议的日志记录功能。

Log.v(TAG, "Message");

其中TAG是您班级中的私有静态最终字符串。

答案 3 :(得分:0)

使用适当的日志框架(例如slf4j)。每个记录的类都有自己的记录器,因此不需要将类名传递给log方法调用。

Logger logger = LoggerFactory.getLogger(this.getClass());

logger.debug("Starting service");
//...
logger.debug("Service started");