Use a Log fileTag(s): Environment
Since 1.4, a logging functionnality is included with the JDK. It's the java.util.logging package.
import java.util.logging.*; import java.io.*; public class TestLog { public static Logger logger; static { try { boolean append = true; FileHandler fh = new FileHandler("TestLog.log", append); //fh.setFormatter(new XMLFormatter()); fh.setFormatter(new SimpleFormatter()); logger = Logger.getLogger("TestLog"); logger.addHandler(fh); } catch (IOException e) { e.printStackTrace(); } } public static void main(String args[]) { logger.severe("my severe message"); logger.warning("my warning message"); logger.info("my info message"); } }
2005-02-28 21:19:28 TestLog main GRAVE: my severe message 2005-02-28 21:19:28 TestLog main ATTENTION: my warning message 2005-02-28 21:19:28 TestLog main INFO: my info message
<?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2005-02-28T21:21:09</date> <millis>1109643669250</millis> <sequence>0</sequence> <logger>TestLog</logger> <level>SEVERE</level> <class>TestLog</class> <method>main</method> <thread>10</thread> <message>my severe message</message> </record> <record> <date>2005-02-28T21:21:09</date> <millis>1109643669328</millis> <sequence>1</sequence> <logger>TestLog</logger> <level>WARNING</level> <class>TestLog</class> <method>main</method> <thread>10</thread> <message>my warning message</message> </record> <record> <date>2005-02-28T21:21:09</date> <millis>1109643669328</millis> <sequence>2</sequence> <logger>TestLog</logger> <level>INFO</level> <class>TestLog</class> <method>main</method> <thread>10</thread> <message>my info message</message> </record> </log>
import java.util.logging.*; import java.io.*; public class TestLog { public static Logger logger; static { try { boolean append = true; FileHandler fh = new FileHandler("TestLog.log", append); fh.setFormatter(new Formatter() { public String format(LogRecord rec) { StringBuffer buf = new StringBuffer(1000); buf.append(new java.util.Date()); buf.append(' '); buf.append(rec.getLevel()); buf.append(' '); buf.append(formatMessage(rec)); buf.append('\n'); return buf.toString(); } }); logger = Logger.getLogger("TestLog"); logger.addHandler(fh); } catch (IOException e) { e.printStackTrace(); } } public static void main(String args[]) { logger.severe("my severe message"); logger.warning("my warning message"); logger.info("my info message"); } }
Mon Feb 28 21:30:54 EST 2005 SEVERE my severe message Mon Feb 28 21:30:54 EST 2005 WARNING my warning message Mon Feb 28 21:30:54 EST 2005 INFO my info message
To limit the log file size and set a rolling pattern
int limit = 1000000; // 1 Mb int numLogFiles = 3; FileHandler fh = new FileHandler("TestLog%g.log", limit, numLogFiles);
Default values are defined in JRE_HOME/lib/logging.properties. To use a different properties file, you specify a filename with the java.util.logging.config.file system property.
java -Djava.util.logging.config.file=mylogging.props TestLog
To suppress the logging output to the console
Logger rootLogger = Logger.getLogger(""); Handler[] handlers = rootLogger.getHandlers(); if (handlers[0] instanceof ConsoleHandler) { rootLogger.removeHandler(handlers[0]); }
Look for the property handlers and remove the value java.util.logging.ConsoleHandler
You may want to take a look at another popular logging mechanism : Log4J.
See also this HowTo and this one