Как включить встроенное ведение журнала Tomcat
Я использую встроенный Tomcat в моем Java-приложении. ниже мой исходный код. однако tomcat не создает никаких журналов.
embedded = new Embedded();
embedded.setDebug(3);
org.apache.catalina.logger.FileLogger embeddedFileLogger = new org.apache.catalina.logger.FileLogger();
embeddedFileLogger.setDirectory(tomcatHome+"/log");
embeddedFileLogger.setPrefix("Embedded_log_");
embeddedFileLogger.setSuffix(".txt");
embeddedFileLogger.setTimestamp(true);
embeddedFileLogger.setVerbosity(3);
//embedded.setLogger(new SystemOutLogger());
engine = embedded.createEngine();
//engine.setLogger(embeddedFileLogger);
embeddedFileLogger.setContainer(engine);
engine.setDefaultHost("localhost");
host = embedded.createHost("localhost", tomcatHome + "/webapps");
//host.setLogger(embeddedFileLogger);
engine.addChild(host);
_context = embedded.createContext("", tomcatHome + "/webapps/ROOT");
host.addChild(_context);
embedded.addEngine(engine);
CoyoteConnector connector = (CoyoteConnector)embedded.createConnector(InetAddress.getByName(ipAddress), port, false);
embedded.addConnector(connector);
embedded.setLogger(embeddedFileLogger);
embedded.start();
Пожалуйста, дайте мне знать, как я могу включить встроенную регистрацию Tomcat через код или конфигурацию Tomcat.
4 ответа
Вот что у меня сработало (Tomcat 9.0.38):
Добавьте системное свойство, указывающее на мою конфигурацию ведения журнала:
-Djava.util.logging.config.file=/absolute/path/to/logging.properties
И содержание
logging.properties
является:
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8
handlers = java.util.logging.ConsoleHandler
org.apache.coyote.http2.level = FINE
По умолчанию встроенный Tomcat использует конфигурацию ведения журнала, предоставляемую JDK. Если вы не изменили конфигурацию только ConsoleHandler
настроен. Если вы хотите программно добавить FileHandler
Вы можете добавить его в корневой логгер. Вот пример, который пишет в файл catalina.out
добавив сообщения на INFO
уровень. Это работает для Tomcat 6.x и 7.x.
Logger logger = Logger.getLogger("");
Handler fileHandler = new FileHandler("catalina.out", true);
fileHandler.setFormatter(new SimpleFormatter());
fileHandler.setLevel(Level.INFO);
fileHandler.setEncoding("UTF-8");
logger.addHandler(fileHandler);
Для меня это сработало только частично. Это требует добавления еще одной строки:
java.util.logging.Logger logger = java.util.logging.Logger.getLogger("").setLevel(Level.ALL);
Я хотел показать ВСЕ журналы и сделать уровень регистрации настраиваемым. Вот что сработало для меня:
public static void main(String[] args) throws Exception {
// Tuning log level
if (args.length > 0) {
Level level = Level.parse(args[0]);
java.util.logging.Logger logger = java.util.logging.Logger.getLogger("");
logger.setLevel(level);
Handler[] handlers = logger.getHandlers();
Handler handler;
if (handlers.length == 1 && handlers[0] instanceof ConsoleHandler) {
handler = handlers[0];
} else {
handler = new ConsoleHandler();
}
handler.setFormatter(new SimpleFormatter());
handler.setLevel(level);
handler.setEncoding("UTF-8");
logger.addHandler(handler);
}
//... some code here
}
Вам нужно включить tomcat-embed-logging-juli-8.0.15.jar в ваш путь к классам.
Я использовал этот код, чтобы загрузить файл logging.properties и настроить внешнее ведение журнала с использованием обычного подхода к ведению журнала Java:
//Loads custom logging configuration located in a properties file named logging.properties
try (InputStream inputStream = new FileInputStream("logging.properties")) {
LogManager.getLogManager().readConfiguration(inputStream);
System.out.println("Custom logging configuraton loaded successfully");
} catch (Exception exception) {
System.err.println ("Custom logging configuration don't found using default system logging configuration.");
}
Для более подробной информации о настройке logging.properties используйте следующие страницы: регистрация Tomcat, org.apache.juli.FileHandler
Также вы можете использовать java.util.logging.FileHandler, который также совместим с juli aproach и имеет другие дополнительные параметры конфигурации: java.util.logging.FileHandler
Есть еще одна банка для использования log4j, но для меня это работает нормально. Примечание: я использовал встроенный tomcat 8.0.15, но сейчас есть новые версии.
Мне нужно было просто выяснить, как я могу контролировать ведение журнала встроенного Tomcat так же, как это делает автономная версия.
Вам понадобится tomcat-juli.jar
потому что у него есть обычай LogManager
в этом. это LogManager
имеет преимущества, так как он способен регистрировать несколько FileHandlers
, Таким образом, он позволяет вам отделять журналы для каждого веб-приложения.
Недостаточно просто включить tomcat-juli.jar
, но вам также нужно активировать его LogManager
, Это будет сделано через JVM-параметр:
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Теперь можно зарегистрироваться FileHandlers
как показано в документации Tomcat.
С помощью дополнительного JVM-параметра вы можете установить путь к logging.properties
-Файл:
-Djava.util.logging.config.file=/logs/logging.properties
Также возможно загрузить .properties
- Файл программно, но тогда вам нужно установить java.util.logging.config.class
с JVM-параметром, как указано выше. В этом конструкторе вы должны вызвать LogManager.readProperties(...)
, Смотрите здесь для получения дополнительной информации.
С наилучшими пожеланиями