【发布时间】:2012-11-27 09:19:33
【问题描述】:
我想在 Tomcat6 中自定义我的日志消息,并创建了一个类“MyFormatter”,如下所示:
public class LogFormatter extends Formatter {
@Override
public String format(LogRecord record) {
StringBuilder sb = new StringBuilder();
sb.append("LOLCAT--")
.append(new Date(record.getMillis()))
.append(" \t")
.append(record.getThreadID())
.append(" \t")
.append(record.getSourceMethodName())
.append(" \t")
.append(record.getSourceClassName())
.append(" \t")
.append(record.getLevel().getLocalizedName())
.append(": ")
.append(formatMessage(record))
.append(System.getProperty("line.separator"));
return sb.toString();
}
}
我已将它打包成一个 .jar 并放在 ${catalina.home}/lib 中。
在我的 logging.properties 文件中,我添加了以下内容:
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = lolcat.
1catalina.org.apache.juli.FileHandler.formatter = my.package.LogFormatter
在多次尝试不同的包装、不同的配置之后,我决定尝试内置的“org.apache.juli.OneLineFormatter”——这非常有效。所以配置应该没问题。
问题依然存在,为什么 Tomcat6 不加载我的类?
【问题讨论】:
-
您看到了什么错误?你知道它是否可以加载它还是这仅仅是一个配置问题?
-
日志根本没有说明这一点,它只是回退到默认的日志格式。我想我已经读过它会默默地执行此回退。
-
properties 文件说它应该在 my.package 中是这样吗?因为类那里没有任何包
-
package my.package; import java.util.Date; import java.util.logging.Formatter; import java.util.logging.LogRecord;这是我遗漏的顶部。 jar 还包含文件夹结构 /my/package/LogFormatter.class -
我通过将 .jar 添加到“...\Java\jdk1.6.0_33\jre\lib\ext”来实现这一点。这可能是因为这个文件夹是在任何其他 Tomcat 内容之前加载的。但是,它可能不是将其保存在生产环境中的最佳位置。是否有任何其他文件夹/配置可以将其保留在 tomcat 文件夹中?
标签: java logging tomcat6 classloader java.util.logging