2012-03-07 63 views
2

我在我的java應用程序中使用嵌入式tomcat。下面是我的源代碼。但是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日誌記錄。

回答

2

默認情況下,嵌入式Tomcat使用JDK提供的日誌記錄配置。如果您尚未更改配置,則只配置ConsoleHandler。如果您想以編程方式添加FileHandler,則可以將其添加到根記錄器。下面是一個通過在INFO級別附加消息寫入文件catalina.out的示例。這適用於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); 
+0

如何爲多個嵌入式tomcat實例執行此操作?我有一個應用程序,爲每個給定的戰爭文件創建一個tomcat實例並部署它,但我不知道如何分離每個實例的輸出。你有什麼主意嗎?謝謝 – Jorj 2017-01-20 09:27:49

1

對我來說,這只是部分工作。這需要增加一個行:

java.util.logging.Logger logger = java.util.logging.Logger.getLogger("").setLevel(Level.ALL); 

我想表明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 
} 
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

您也可以使用java.util.logging.FileHandler這也與炬力的形式給出了一個兼容的還有一個高級配置選項:java.util.logging.FileHandler

還有另一個使用log4j的jar,但對我來說這很好。 注意:我使用的是嵌入式8.0.15的tomcat,但現在有新版本。