Таким образом, файл .jar находится в CATALINA_BASE / lib / ext
В моей установке Tomcat 8 я вижу CATALINA_BASE / lib, но нет подкаталога с именем ext. Я думаю, вы захотите убедиться, что системное свойство для common.loader
показывает ext в пути. На моей машине нет пути ext:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
Когда я запускаю Liferay, я вижу сообщение * MyClass загружено * в окне консоли, но сообщение журнала не записывается в (существующий) файл.
Итак, загрузчик классов может найти ваш класс, и ваш обработчик был создан, потому что файл существует. Измените MyClass
, чтобы включить код из DebugLogging . Включите вспомогательные функции и скопируйте тело метода main в конструктор MyClass. Это позволит отследить, как выглядит дерево логгера. Включите вывод в ответ.
package com.mypackage;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class MyClass {
private static final String CLASS_NAME = MyClass.class.getName();
private static final Logger logger = Logger.getLogger(CLASS_NAME);
public static void main(String[] args) {
new MyClass();
}
public MyClass() {
logger.log(Level.INFO, "MyClass initialized");
System.out.println("*** MyClass loaded ***");
logger.log(Level.FINEST, "Finest");
logger.log(Level.FINER, "FINER");
logger.log(Level.FINE, "FINE");
logger.log(Level.CONFIG, "CONFIG");
logger.log(Level.INFO, "INFO");
logger.log(Level.WARNING, "WARNING");
logger.log(Level.SEVERE, "SEVERE");
logger.finest("Finest Log");
logger.finer("Finer Log");
logger.fine("Fine Log");
logger.config("Config Log");
logger.info("Info Log");
logger.warning("Warning Log");
logger.severe("Severe Log");
printConfig(System.out);
}
private static void printConfig(PrintStream ps) {
LogManager lm = LogManager.getLogManager();
ps.append("LogManager=").append(lm.getClass().getName());
ps.append("@");
printLoader(lm, ps);
ps.println();
synchronized (lm) {
Enumeration<String> e = lm.getLoggerNames();
while (e.hasMoreElements()) {
Logger l = lm.getLogger(e.nextElement());
if (l != null) {
print(l, ps);
}
}
}
}
private static void print(Logger l, PrintStream ps) {
ps.append("scn=").append(l.getClass().getSimpleName());
ps.append("@");
printLoader(l, ps);
ps.append(", n=").append(String.valueOf(l.getName()));
ps.append(", uph=").append(String.valueOf(l.getUseParentHandlers()));
ps.append(", l=").append(String.valueOf(l.getLevel()));
ps.append(", fl=").println(String.valueOf(l.getFilter()));
for (Handler h : l.getHandlers()) {
ps.append("\t").append(l.getName()).append("->");
ps.append(h.getClass().getName());
ps.append("@");
printLoader(h, ps);
ps.append(", h=")
.append(String.valueOf(h.getLevel())).append(", fl=")
.append(String.valueOf(h.getFilter())).println();
}
}
private static void printLoader(Object o, PrintStream ps) {
if (o != null) {
Object cl = o.getClass().getClassLoader();
if (cl != null) {
ps.append(cl.getClass().getSimpleName());
} else {
ps.append("null");
}
} else {
ps.append("null");
}
}
}
Ваш обработчик объявлен в обработчиках . Так что этого должно быть достаточно, чтобы использовать обработчик. Наличие файла показывает, что обработчик был создан.
На моем компьютере выходные данные отладки показывают, что обработчик был настроен:
scn=Logger@null, n=com.mypackage.MyClass, uph=false, l=ALL, fl=null
com.mypackage.MyClass->org.apache.juli.AsyncFileHandler@AppClassLoader, h=FINE, fl=null
Журнал файла содержит:
2020-02-15 11:48:55 INFO [com.mypackage.MyClass <init>] MyClass initialized
2020-02-15 11:48:55 FINE [com.mypackage.MyClass <init>] FINE
2020-02-15 11:48:55 CONFIG [com.mypackage.MyClass <init>] CONFIG
2020-02-15 11:48:55 INFO [com.mypackage.MyClass <init>] INFO
2020-02-15 11:48:55 WARNING [com.mypackage.MyClass <init>] WARNING
2020-02-15 11:48:55 SEVERE [com.mypackage.MyClass <init>] SEVERE
2020-02-15 11:48:55 FINE [com.mypackage.MyClass <init>] Fine Log
2020-02-15 11:48:55 CONFIG [com.mypackage.MyClass <init>] Config Log
2020-02-15 11:48:55 INFO [com.mypackage.MyClass <init>] Info Log
2020-02-15 11:48:55 WARNING [com.mypackage.MyClass <init>] Warning Log
2020-02-15 11:48:55 SEVERE [com.mypackage.MyClass <init>] Severe Log
Согласно документации вы можете указать системное свойство org.apache.juli.ClassLoaderLogManager.debug=true
для Tomcat, которое будет отправлять информацию о конфигурации в System.err
. Это может помочь вам в дальнейшем устранении неполадок.