相关疑难解决方法(0)

为什么我们声明Loggers静态最终?

在Java中,为什么最佳做法是声明记录器static final

private static final Logger S_LOGGER
Run Code Online (Sandbox Code Playgroud)

java logging

120
推荐指数
4
解决办法
8万
查看次数

在静态和非静态上下文中创建SLF4J记录器的开销是多少?

我总是使用以下模式构建(SLF4J)记录器:

private static final Logger log = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

到目前为止这已经奏效了,但我想知道static某些情况下的上下文以及需要一直传递具体的类文字,而不是仅仅使用非静态记录器

private final Logger log = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)

这之前基本上已经问过(并回答)了LOG4J

记录器应该是私有静态还是非静态

和这里

记录器应该是最终的和静态的吗?

我意识到final基本上是强制性的,所以我想知道在非静态环境中使用SLF4J的开销实际上有多高.

问:

使用是否有任何重大的实际开销

private final Logger log = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)

过度

private static final Logger log = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

普通(网络)应用程序?(这里不需要"讨论"高端,重载的webapps)


注意,我最终计划使用更好的方法使用CDI获得SLF4J记录器

@Inject private final Logger log;
Run Code Online (Sandbox Code Playgroud)

http://www.seamframework.org/Weld/PortableExtensionsPackage#H-TtLoggerttInjection所述,但我需要先了解记录器缓存.

子问题:甚至可以使用?:

@Inject private static final Logger log;
Run Code Online (Sandbox Code Playgroud)

(刚开始用CDI开头)

java logging static slf4j cdi

26
推荐指数
1
解决办法
1万
查看次数

在不使用Exceptions的情况下获取调用类的名称

是的,通过使用异常获取类名是一个合理的解决方案,但我正在寻找更优雅的东西.

String className = new Exception().getStackTrace()[1].getClassName();
Run Code Online (Sandbox Code Playgroud)

这将主要用于日志记录目的,并确保我的缓存关键字是特定于组件/调用者类的.

java

3
推荐指数
1
解决办法
1万
查看次数

如何在构造函数中通过依赖注入应用logger而没有框架

我正在做依赖注入没有框架(没有spring/guice)只是简单的java(我需要).我的问题是关于伐木工的记录器怎么样?我经常将它实例化

private static logger = Logger.getLogger(myclass); 
Run Code Online (Sandbox Code Playgroud)

但是这不是依赖注入,我应该将记录器传递给每个ctor吗?这看起来很奇怪...那么如何处理记录器和依赖注入呢?

PS我喜欢DI与ctor而不是setter这样我知道我的课程需要什么.

谢谢

java oop

2
推荐指数
1
解决办法
2650
查看次数

标签 统计

java ×4

logging ×2

cdi ×1

oop ×1

slf4j ×1

static ×1