Java log example
Logrecord filter
import java.util.logging.Filter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class SimpleFilter {
private static Logger logger = Logger.getLogger("SimpleFilter");
static class Duck {
};
static class Wombat {
};
static void sendLogMessages() {
logger.log(Level.WARNING, "Aduck in the house!", new Duck());
logger.log(Level.WARNING, "A Wombat at large!", newWombat());
}
public static void main(String[] args) {
sendLogMessages();
logger.setFilter(newFilter() {
public boolean isLoggable(LogRecord record){
Object[] params = record.getParameters();
if (params == null)
return true; // No parameters
if (record.getParameters()[0]instanceof Duck)
return true; // Only log Ducks
return false;
}
});
logger.info("After setting filter..");
sendLogMessages();
}
}
Output:
Aug 28,2013 11:46:04 AM SimpleFilter sendLogMessages
WARNING:A duck in the house!
Aug 28,2013 11:46:04 AM SimpleFilter sendLogMessages
WARNING:A Wombat at large!
Aug 28,2013 11:46:04 AM SimpleFilter main
INFO:After setting filter..
Aug 28,2013 11:46:04 AM SimpleFilter sendLogMessages
WARNING:A duck in the house!
注:重写isLoggable方法可以对logrecord对象进行过滤。
2.Simple for Formatter Example
import java.util.logging.ConsoleHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class SimpleFormatterExample {
private static Logger logger = Logger.getLogger("SimpleFormatterExample");
private static void logMessages() {
logger.info("Line One");
logger.info("Line Two");
}
public static void main(String[] args) {
logger.setUseParentHandlers(false);
Handler conHdlr = new ConsoleHandler();
conHdlr.setFormatter(new Formatter() {
public String format(LogRecord record) {
return record.getLevel() + " : "
+ record.getSourceClassName() + " -:- "
+ record.getSourceMethodName() + " -:- "
+ record.getMessage() + "\n";
}
});
logger.addHandler(conHdlr);
logMessages();
}
}
Output:
INFO : SimpleFormatterExample -:- logMessages -:- Line One
INFO : SimpleFormatterExample -:- logMessages -:- Line Two
注:可以对输出的log格式进行特定格式化。
3.Format log output by overriding tostring()function,
import java.util.logging.Level;
import java.util.logging.LogRecord;
public class PrintableLogRecord extends LogRecord {
public PrintableLogRecord(Level level, String str) {
super(level, str);
}
public StringtoString() {
String result = "Level\n" + "LoggerName
+ getLoggerName() + ">\n" + "Message\n"
+ "CurrentMillis\n" + "Params";
Object[] objParams = getParameters();
if (objParams == null)
result += "\n";
else
for (int i =0; i < objParams.length; i++)
result += " Param #
+ objParams[i].toString() + ">\n";
result += "ResourceBundle
+ ">\nResourceBundleName
+ ">\nSequenceNumber
+ ">\nSourceClassName
+ ">\nSourceMethodName
+ ">\nThreadId\nThrown
+ ">";
return result;
}
public static void main(String[] args) {
PrintableLogRecord logRecord = new PrintableLogRecord(Level.FINEST,
"SimpleLog Record");
System.out.println(logRecord);
}
}
Output:
Level
LoggerName
Message
CurrentMillis<1377662640451>
Params
ResourceBundle
ResourceBundleName
SequenceNumber<0>
SourceClassName
SourceMethodName
ThreadId<10>
Thrown
4.email log
importjava.util.logging.*;
importjava.io.*;
importjava.util.Properties;
importjavax.mail.*;
importjavax.mail.internet.*;
public classEmailLogger {
private staticLogger logger = Logger.getLogger("EmailLogger");
public static voidmain(String[] args) throwsException {
logger.setUseParentHandlers(false);
Handler conHdlr = newConsoleHandler();
conHdlr.setFormatter(newFormatter() {
publicString format(LogRecord record) {
returnrecord.getLevel() + " : "
+ record.getSourceClassName() + ":"
+ record.getSourceMethodName() + ":"
+ record.getMessage() + "\n";
}
});
logger.addHandler(conHdlr);
logger.addHandler(
newFileHandler("EmailLoggerOutput.xml"));
logger.addHandler(newMailingHandler());
logger.log(Level.INFO,
"Testing Multiple Handlers", "SendMailTrue");
}
}
// A handler that sends mail messages
classMailingHandler extendsHandler {
public voidpublish(LogRecord record) {
Object[] params = record.getParameters();
if(params == null) return;
// Send mail only if the parameter is true
if(params[0].equals("SendMailTrue")) {
newMailInfo("bruce@theunixman.com",
newString[] { "bruce@theunixman.com"},
"smtp.theunixman.com", "Test Subject",
"Test Content").sendMail();
}
}
public voidclose() {}
public voidflush() {}
}
classMailInfo {
privateString fromAddr;
privateString[] toAddr;
privateString serverAddr;
privateString subject;
privateString message;
publicMailInfo(String from, String[] to,
String server, String subject, String message) {
fromAddr = from;
toAddr = to;
serverAddr = server;
this.subject = subject;
this.message = message;
}
public voidsendMail() {
try{
Properties prop = newProperties();
prop.put("mail.smtp.host", serverAddr);
Session session =
Session.getDefaultInstance(prop, null);
session.setDebug(true);
// Create a message
Message mimeMsg = newMimeMessage(session);
// Set the from and to address
Address addressFrom = newInternetAddress(fromAddr);
mimeMsg.setFrom(addressFrom);
Address[] to = newInternetAddress[toAddr.length];
for(inti = 0; i
to[i] = newInternetAddress(toAddr[i]);
mimeMsg.setRecipients(Message.RecipientType.TO,to);
mimeMsg.setSubject(subject);
mimeMsg.setText(message);
Transport.send(mimeMsg);
} catch(Exception e) {
throw newRuntimeException(e);
}
}
}