在Java中,静态最终变量是常量,惯例是它们应该是大写的.但是,我已经看到大多数人声称记录器是小写的,这在PMD中是违规的.
例如:
private static final Logger logger = Logger.getLogger(MyClass.class);
我们应该使用LOGGER吗?
记录器是否应声明为静态?通常我会看到两种类型的记录器声明:
    protected Log log = new Log4JLogger(aClass.class);
要么
    private static Log log = new Log4JLogger(aClass.class);
应该使用哪一个?这两者的专业和概念是什么?
此评论是在代码审核中进行的,而制作该评论的人不再在我们的团队中.
在运行时必须由类加载器解析的任何类型都不应该具有被声明为final和static的引用保持的实例.
这是代码行:
private final static Logger log = LoggerFactory.getLogger(MyClass.class);
我熟悉声明loggers静态或非静态的争论,但这个评论似乎更为通用.我找不到为什么静态和最终都不好的任何解释.有人可以详细说明吗?
我目前正在用java编写一个大项目,有很多类,有些类很小,只用很少的方法代表对象.我的主类中有一个记录器,它工作正常.我希望能够只使用一个记录器(带有一个控制台appender)和所有类.我试图将对记录器的引用传递给不同的类,但它看起来不正确.此外,有时候我在没有运行main的情况下对类运行测试,因此没有为其他类初始化记录器.
实现这一目标的最佳方法是什么,我的意思是,如何从不同的类登录到一个日志,类之间没有硬依赖关系,并且能够独立地使用每个类的日志?
可以从许多线程访问类.在这种情况下必须是记录器也是最终的和静态的吗?谢谢.
我正在努力提高我的Java优化技能.为了实现这一目标,我制作了一个旧程序,并且我正在尽力使其变得更好.在这个程序中,我使用SL4J进行日志记录.为了得到我做的记录器:
private static final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
在我编写代码的时候,我认为这是最好的选择,因为我删除了对类名的引用(可能会被重构).但现在我不再那么肯定了......
private static final Logger logger = LoggerFactory.getLogger(ClassName.class);
另一方面,保留对类名的引用,但它会删除一个方法调用.对于一个班级来说,这可能不是一个很大的改进,但是当你有很多班级时,这可能就是一个问题.
所以我的问题是:
哪种方法更好?使用类名还是通过反射获取?
请用正反面来激励你的答案.谢谢.
当我尝试将用户登录到我的系统时,我在Tomcat中收到此错误:
    org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 1967 ms
Sau 14, 2013 7:39:17 PM org.apache.catalina.session.StandardManager doLoad
SEVERE: IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.log4j.Logger
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.log4j.Logger
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
    at java.io.ObjectInputStream.readSerialData(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at java.util.LinkedList.readObject(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
    at java.io.ObjectInputStream.readSerialData(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.defaultReadFields(Unknown …java ×7
logging ×4
final ×2
log4j ×2
static ×2
classloader ×1
exception ×1
optimization ×1
reflection ×1
slf4j ×1
tomcat ×1