Java Logging API生成空日志文件
我试图浏览Java日志API的教程:
www.vogella.com/articles/Logging/article.html
但是生成的文件是空的(在Netbeans,Eclipse中测试以及从cmd运行jar)。 日志消息仅显示在控制台中。
以下是项目中使用的文件。 这种行为可能是什么原因?
项目:de.vogella.logger
MyHtmlFormatter.java
package de.vogella.logger; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; //This custom formatter formats parts of a log record to a single line class MyHtmlFormatter extends Formatter { // This method is called for every log records public String format(LogRecord rec) { StringBuffer buf = new StringBuffer(1000); // Bold any levels >= WARNING buf.append(""); buf.append(""); if (rec.getLevel().intValue() >= Level.WARNING.intValue()) { buf.append(""); buf.append(rec.getLevel()); buf.append(""); } else { buf.append(rec.getLevel()); } buf.append(" "); buf.append(""); buf.append(calcDate(rec.getMillis())); buf.append(' '); buf.append(formatMessage(rec)); buf.append('\n'); buf.append(" "); buf.append(" \n"); return buf.toString(); } private String calcDate(long millisecs) { SimpleDateFormat date_format = new SimpleDateFormat("MMM dd,yyyy HH:mm"); Date resultdate = new Date(millisecs); return date_format.format(resultdate); } // This method is called just after the handler using this // formatter is created public String getHead(Handler h) { return "\n\n" + (new Date()) + "\n\n\n\n" + "
\n " + "Level " + "Time " + "Log Message " + " \n"; } // This method is called just after the handler using this // formatter is closed public String getTail(Handler h) { return "
\n
\n\n"; } }
MyLogger.java
package de.vogella.logger; import java.io.IOException; import java.util.logging.FileHandler; import java.util.logging.Formatter; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; public class MyLogger { static private FileHandler fileTxt; static private SimpleFormatter formatterTxt; static private FileHandler fileHTML; static private Formatter formatterHTML; static public void setup() throws IOException { // Get the global logger to configure it Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); logger.setLevel(Level.INFO); fileTxt = new FileHandler("Logging.txt"); fileHTML = new FileHandler("Logging.html"); // Create txt Formatter formatterTxt = new SimpleFormatter(); fileTxt.setFormatter(formatterTxt); logger.addHandler(fileTxt); // Create HTML Formatter formatterHTML = new MyHtmlFormatter(); fileHTML.setFormatter(formatterHTML); logger.addHandler(fileHTML); } }
UseLogger.java
package de.vogella.logger.test; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import de.vogella.logger.MyLogger; public class UseLogger { // Always use the classname, this way you can refactor private final static Logger LOGGER = Logger.getLogger(UseLogger.class .getName()); public void doSomeThingAndLog() { // Image here some real work // Now we demo the logging // Set the LogLevel to Severe, only severe Messages will be written LOGGER.setLevel(Level.SEVERE); LOGGER.severe("Info Log"); LOGGER.warning("Info Log"); LOGGER.info("Info Log"); LOGGER.finest("Really not important"); // Set the LogLevel to Info, severe, warning and info will be written // Finest is still not written LOGGER.setLevel(Level.INFO); LOGGER.severe("Info Log"); LOGGER.warning("Info Log"); LOGGER.info("Info Log"); LOGGER.finest("Really not important"); } public static void main(String[] args) { UseLogger tester = new UseLogger(); try { MyLogger.setup(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("Problems with creating the log files"); } tester.doSomeThingAndLog(); } }
更改以下行(在de.vogella.logger.MyLogger.setup()
方法中):
// Get the global logger to configure it Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
有:
// Get the global logger to configure it Logger logger = Logger.getLogger("");
看更多:
- Java日志记录
- Java日志记录:配置
- Java日志框架