【发布时间】:2016-09-20 08:10:08
【问题描述】:
我有一堆小服务,方便地称为微服务 ;-),它们都有相同的启动行为。它们被安排在包装中 - 每一种都用于一项服务。包命名是这样的:
com.foo.bar.Application
com.foo 是域部分,bar 是实际的服务名称,Application 是我的主要实例类和 main 方法。
现在我想做的是在它们启动时打印出标准化的日志消息,显示用户可以查询的 URL 以获取有关服务的一些信息。根据定义,获取服务信息的 URL 应构造如下:
IP:PORT/bar/admin/info
我尝试使用 getClass()... 等获取此 bar.name,但这不起作用。所以我尝试了这个:
LOG.info("Access URLs:\n----------------------------------------------------------\n" +
"\tLocal: \t\thttp://127.0.0.1:{}/" + getMyClass() + "/info\n" +
"\tExternal: \thttp://{}:{}/" + getMyClass() + "/info\n----------------------------------------------------------",
env.getProperty("server.port"),
InetAddress.getLocalHost().getHostAddress(),
env.getProperty("server.port")
);
/**
* Get the name of the application class as a static value, so we can show it in the log
*/
public static final Class[] getClassContext() {
return new SecurityManager() {
protected Class[] getClassContext(){return super.getClassContext();}
}.getClassContext();
};
public static final Class getMyClass() { return getClassContext()[2];}
但正如您可能已经猜到的那样,这打印出来的东西太多了:
class com.foo.bar.Application
我最想得到的是
bar
我怎样才能做到这一点???
顺便说一句,我正在使用 Java 8 和 Spring boot - 如果有帮助的话
最好的问候,
克里斯
【问题讨论】:
标签: java spring logging packages classname