我在我的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日志记录。
答案 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 logging,org.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