如何启用嵌入式tomcat日志记录

时间:2012-03-07 14:14:46

标签: tomcat logging

我在我的java应用程序中使用嵌入式tomcat。下面是我的源代码。但是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日志记录。

5 个答案:

答案 0 :(得分:3)

默认情况下,嵌入式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);

答案 1 :(得分:1)

对我而言,这只是部分工作。这需要再添加一行:

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
}

答案 2 :(得分:0)

您需要在类路径中包含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 loggingorg.apache.juli.FileHandler

此外,您可以使用与juli aproach兼容的java.util.logging.FileHandler,并具有其他高级配置选项:java.util.logging.FileHandler

还有另一个使用log4j的jar但对我来说这很好用。 注意:我使用的是tomcat嵌入式8.0.15,但现在有了新版本。

答案 3 :(得分:0)

我只想弄明白,我如何控制嵌入式Tomcat的日志记录,就像独立版本一样。

您需要tomcat-juli.jar,因为其中包含自定义LogManager。这个LogManager具有优势,因为它能够注册多个FileHandlers。因此,它使您可以按WebApp分隔日志。

仅包含tomcat-juli.jar是不够的,但您还需要激活LogManager。这将通过JVM参数:

完成

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

现在可以注册Tomcat documentation中显示的FileHandlers

使用额外的JVM参数,您可以设置logging.properties - 文件:

的路径

-Djava.util.logging.config.file=/logs/logging.properties

也可以以编程方式加载.properties - 文件,但是你需要设置一个带有JVM参数的java.util.logging.config.class,如上所述。在它的构造函数中,您必须调用LogManager.readProperties(...)。查看here了解更多信息。

祝你好运

答案 4 :(得分:0)

这是对我有用的(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