java中宏替换的替代方案

java中宏替换的替代方案,java,macros,constants,Java,Macros,Constants,我有一个log语句,其中我总是使用this.getClass().getSimpleName()作为第一个参数。 我想把它放在某种宏常量中,并在我的所有日志语句中使用它。 但我知道java没有这样的简单机制,不同于C++。 在Java中实现这种功能的最佳方法是什么 我的示例日志语句(来自Android)如下所示 Log.v(this.getClass().getSimpleName(),"Starting LocIden service..."); Java没有宏,但您可以使代码更短: Log

我有一个log语句,其中我总是使用
this.getClass().getSimpleName()
作为第一个参数。 我想把它放在某种宏常量中,并在我的所有日志语句中使用它。 但我知道java没有这样的简单机制,不同于C++。 在Java中实现这种功能的最佳方法是什么

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

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

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

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

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

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

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

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

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

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

另一种方法是遵循android对其日志功能的建议

Log.v(TAG, "Message");

其中,
标记
是类中的私有静态最终字符串。

另一种方法是遵循android对其日志功能的建议

Log.v(TAG, "Message");

其中,
标记
是类中的私有静态最终字符串。

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

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

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

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

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

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

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


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

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


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

您创建这些语句是为了调试吗?如果是这样,调试器工具是否不能帮助您避免日志?您创建这些语句是为了调试目的吗?如果是这样,调试器工具是否不能帮助您避免日志?谢谢Mark。那更干净:-)谢谢马克。这要干净得多:-)谢谢你回复Augusto..我使用Android SDK的“Log”实用程序来记录日志。它似乎没有直接提供这种特殊功能。感谢您回复Augusto..我使用Android SDK的“Log”实用程序进行日志记录。它似乎没有直接提供这个特定的功能。这是我最初的方法,但我认为我可以直接使用类名,然后突然出现了一个问题:)我比较喜欢静态final string方法。如果你希望它不是类的名称,那么你可以很容易地修改它。我也是,但我只是想知道是否确实有一种方法可以实现类似宏替换的功能。这样我就可以在所有类中使用泛型调用。这是我最初的方法,但我认为我可以直接使用类名,然后突然出现了一个问题:)我比较喜欢静态final string方法。如果你希望它不是类的名称,那么你可以很容易地修改它。我也是,但我只是想知道是否确实有一种方法可以实现类似宏替换的功能。这样我就可以在所有类中使用泛型调用。