为什么log4j的Logger.getLogger()需要传递一个Classtypes?
我读了一些关于如何使用log4j的文章。 他们中的大多数人把下面的代码作为开始:
Logger logger = Logger.getLogger("com.foo.Bar");
要么
Logger logger = Logger.getLogger(XXX.class);
这将初始化logging器对象。但我的问题是为什么需要发送类types作为参数? 看来,当我使用logging器,我不关心在哪个类我使用它。所以types似乎没有对logging器的影响。 如果我把一个logging器声明为静态和公共的,我可以在另一个类中调用这个logging器,那么作者的devise意图是什么呢? 当我使用logging器时,类types会绑定什么? 或者我可以发送任何类types的getLogger函数。
-
您可以始终使用任何string作为logging器名称而不是类别types。 这绝对没问题。
-
为什么很多人使用类的types,我猜:
-
使用方便。 在复杂的Java EE应用程序中,您不必担心logging器名称重复。 如果其他人也使用你的logging器名称,你可能有一个日志文件,不仅包括你的类的输出,
-
易于检查logging类,因为logging器名称将显示在日志文件中。 您可以快速导航到特定的课程;
-
当你分发你的课程时,人们可能希望将日志从你的class级redirect到一个特定的文件或其他地方。 在这种情况下,如果您使用特殊的logging器名称,我们可能需要检查源代码,或者如果源不可用,则无法执行此操作。
-
从javadoc : Logger.getLogger(Class)
是getLogger(clazz.getName())
的简写。 与log4j和其他日志框架一起使用的约定是为每个类定义一个静态日志logging器。 例如,
public class SomeClass { private static final Logger LOG = Logger.getLogger(SomeClass.class); ... }
我发现这个约定对组织日志输出很有效。 这当然不是必需的,但是是一个有用的做法。
1:在log4j.properties中定义之前,可以使用“class name”或“string name”,比如
log4j.logger.anything=INFO,anything
所以,你可以logging你的日志
Logger logger = Logger.getLogger("anything");
2:如果你定义了一些日志名字,你可以很容易地检查它们,因为它们是分开的。
XXX.class是命名您的logging器,即标志后续的日志语句。 让你知道某些日志语句属于哪个类。
你可以通过类的types来跟踪你的日志。
例1:
public class Bar { Logger logger = Logger.getLogger("com.foo.Bar"); ... logger.debug("debug message"); }
也许你可以看到下面的日志消息。
DEBUG: **com.foo.Bar** debug message
例2:
public class Foo { Logger logger = Logger.getLogger("com.foo.Foo"); ... logger.debug("debug message"); }
也许你可以看到下面的日志消息。
DEBUG: **com.foo.Foo** debug message
如果你有很多java类和logging器消息,那么很难find日志消息的来源。
- 从eclipse运行时,closuresmatplotlib中已有的graphics
- 如何为多个IP地址configurationpostgresql postgresql.conf listen_addresses
- Eclipse中的Java项目:无法parsingjava.lang.Objecttypes。 它是从所需的.class文件间接引用的
- 渲染过程中引发exception:java.lang.System.arraycopy
- 我应该将Git存储库存储在Home还是Eclipse Workspace中?
- 停止Maven索引更新eclipse
- Eclipse:如何在Project Explorer中隐藏自定义文件
- SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”。 错误
- Eclipse Android插件中的“debugging证书过期”错误
- Eclipse JRE系统库
- 在Eclipse中为Android开发:R.java不重新生成