如何启用嵌入式tomcat日志记录
我在java应用程序中使用嵌入式tomcat。下面是我的源代码。但是,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
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实例并进行部署,但我不知道如何为每个实例分离输出。你知道吗?谢谢你能在哪里实现它?它对我也有用谢谢你。所有的原木我都用最好的