相关疑难解决方法(0)

是否应在UPPER-CASE中声明"静态最终记录器"?

在Java中,静态最终变量是常量,惯例是它们应该是大写的.但是,我已经看到大多数人声称记录器是小写的,这在PMD中是违规的.

例如:

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

只需搜索谷歌SO搜索"静态最终记录器",你就会看到这个.

我们应该使用LOGGER吗?

java logging static final naming-conventions

232
推荐指数
7
解决办法
6万
查看次数

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

记录器是否应声明为静态?通常我会看到两种类型的记录器声明:

    protected Log log = new Log4JLogger(aClass.class);

要么

    private static Log log = new Log4JLogger(aClass.class);

应该使用哪一个?这两者的专业和概念是什么?

java logging

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

声明变量final和static

此评论是在代码审核中进行的,而制作该评论的人不再在我们的团队中.

在运行时必须由类加载器解析的任何类型都不应该具有被声明为final和static的引用保持的实例.

这是代码行:

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

我熟悉声明loggers静态或非静态的争论,但这个评论似乎更为通用.我找不到为什么静态和最终都不好的任何解释.有人可以详细说明吗?

java classloader

22
推荐指数
2
解决办法
669
查看次数

如何使用log4j与多个类?

我目前正在用java编写一个大项目,有很多类,有些类很小,只用很少的方法代表对象.我的主类中有一个记录器,它工作正常.我希望能够只使用一个记录器(带有一个控制台appender)和所有类.我试图将对记录器的引用传递给不同的类,但它看起来不正确.此外,有时候我在没有运行main的情况下对类运行测试,因此没有为其他类初始化记录器.

实现这一目标的最佳方法是什么,我的意思是,如何从不同的类登录到一个日志,类之间没有硬依赖关系,并且能够独立地使用每个类的日志?

java log4j

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

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

可以从许多线程访问类.在这种情况下必须是记录器也是最终的和静态的吗?谢谢.

java logging static final

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

LoggerFactory.getLogger(ClassName.class)vs LoggerFactory.getLogger(this.getClass().getName())

我正在努力提高我的Java优化技能.为了实现这一目标,我制作了一个旧程序,并且我正在尽力使其变得更好.在这个程序中,我使用SL4J进行日志记录.为了得到我做的记录器:

private static final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
Run Code Online (Sandbox Code Playgroud)

在我编写代码的时候,我认为这是最好的选择,因为我删除了对类名的引用(可能会被重构).但现在我不再那么肯定了......

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

另一方面,保留对类名的引用,但它会删除一个方法调用.对于一个班级来说,这可能不是一个很大的改进,但是当你有很多班级时,这可能就是一个问题.

所以我的问题是:

哪种方法更好?使用类名还是通过反射获取?

请用正反面来激励你的答案.谢谢.

java reflection optimization logging slf4j

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

java.io.WriteAbortedException:写入已中止; java.io.NotSerializableException:org.apache.log4j.Logger

当我尝试将用户登录到我的系统时,我在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 …
Run Code Online (Sandbox Code Playgroud)

java tomcat log4j exception

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