我在 log4j 中是绝对新的,我有以下问题。
进入名为 Mailer 的类我以这种方式声明了我的log4j Logger 对象:
private static final org.apache.log4j.Logger logger = Logger.getLogger(Mailer.class);
然后我将一个日志记录放入类构造函数中(以测试记录器是否正常工作),这样:
public Mailer() {
super();
logger.debug("LOGGER IN ACTION !!! INTO Mailer CONSTRUCTOR !!!");
setTimeoper();
}
问题是,当进入类construcor时,记录器似乎不能正常工作并且不打印我的消息,而是我获取此记录器错误(进入控制台):
log4j:WARN No appenders could be found for logger (utility.Mailer).
log4j:WARN Please initialize the log4j system properly.
在我的项目中,我有一个 config 包,其中包含 log4j.properties 文件,该文件具有简洁内容,可显示 DEBUG log4j statment进入控制台:
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
# now define the layout for the appender
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
# now map our console appender as a root logger, means all log messages will go to this appender
log4j.rootLogger = DEBUG, consoleAppender
我认为这是正确的但我从未指明log4j必须这样做(我不知道我该怎么做以及我必须做什么)
我错过了什么?如何解决此问题并正确配置log4j?
TNX
答案 0 :(得分:2)
log4j documentation状态
确切的默认初始化算法定义如下:
- 将log4j.defaultInitOverride系统属性设置为任何其他值,然后" false"将导致log4j跳过默认初始化 程序(本程序)。
- 将资源字符串变量设置为log4j.configuration系统属性的值。指定的首选方法 默认初始化文件是通过log4j.configuration系统实现的 属性。 如果系统属性log4j.configuration不是 define,然后将字符串变量资源设置为其默认值 " log4j.properties" 强>
- 尝试将资源变量转换为URL。
- 如果资源变量无法转换为URL,例如由于MalformedURLException,则从中搜索资源 classpath通过调用 org.apache.log4j.helpers.Loader.getResource(resource,Logger.class) 返回一个URL。注意字符串" log4j.properties" 构成格式错误的网址。
- 如果找不到URL,则中止默认初始化。 否则,请从网址配置log4j。
醇>
由于您尚未指定此类属性,因此log4j将在类路径的根目录中查找log4j.properties
。您的属性文件位于config
,因此log4j无法找到它。移动它或提供系统属性及其位置。