Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何启用嵌入式tomcat日志记录_Tomcat_Logging - Fatal编程技术网

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

如何启用嵌入式tomcat日志记录,tomcat,logging,Tomcat,Logging,我在java应用程序中使用嵌入式tomcat。下面是我的源代码。但是,tomcat没有生成任何日志 embedded = new Embedded(); embedded.setDebug(3); org.apache.catalina.logger.FileLogger embeddedFileLogger = new org.apache.catalina.logger.FileLogger(); embed

我在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日志记录。

默认情况下,嵌入式tomcat使用JDK提供的日志记录配置。如果未更改配置,则仅配置了
控制台手柄。如果希望以编程方式添加
文件处理程序
,可以将其添加到根记录器。下面是一个示例,它通过在
INFO
级别追加消息写入文件
catalina.out
。这适用于Tomcat6.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的更多详细信息,请使用以下页面: ,

此外,您还可以使用java.util.logging.FileHandler,它也与juli aproach兼容,并且还有另一个高级配置选项:

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

我刚刚想弄清楚,如何像独立版本那样控制嵌入式tomcat的日志记录

您将需要
tomcatjuli.jar
,因为它有一个定制的
LogManager
。此
LogManager
具有优势,因为它能够注册多个
文件处理程序。因此,它使您能够为每个WebApp分离日志

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

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

现在可以注册
文件处理程序
,如中所示

通过附加的JVM参数,您可以设置
logging.properties
-文件的路径:

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


也可以通过编程方式加载
.properties
-文件,但随后需要使用JVM参数设置
java.util.logging.config.class
,如上所述。然后必须在它的构造函数中调用
LogManager.readProperties(…)
。查看更多信息


致以最诚挚的问候

以下是对我有用的东西(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实例执行此操作?我有一个应用程序,可以为每个给定的war文件创建一个tomcat实例并进行部署,但我不知道如何为每个实例分离输出。你知道吗?谢谢你能在哪里实现它?它对我也有用谢谢你。所有的原木我都用最好的