Как включить встроенное ведение журнала 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(...), Смотрите здесь для получения дополнительной информации.

С наилучшими пожеланиями

Другие вопросы по тегам