Eğer herhangi bir formatter verilmezse Console'a log aşağıdaki formatta atılır :
pre:/listing
Nis 27, 2013 5:20:31 PM com.fibiler.log.LogHelloWorldToFileTestApp main
INFO: Hello World
pre/:
Bu format değiştirilebilir. Aşağıda bir formetter örneği görülmektedir :
code:/java
package com.fibiler.log;
import java.io.*;
import java.text.*;
import java.util.*;
import java.util.logging.*;
public class LogFormatter extends java.util.logging.Formatter {
@Override
public String format(LogRecord record) {
SimpleDateFormat dateFormat=new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
String formatDate=dateFormat.format(new Date());
StringBuilder sb = new StringBuilder();
sb.append(formatDate).append(" - ").
append(formatMessage(record)).
append(System.getProperty("line.separator"));
if (record.getThrown() != null) {
try {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
record.getThrown().printStackTrace(pw);
pw.close();
sb.append(sw.toString());
} catch (Exception ex) {
ex.printStackTrace();
}
}
return sb.toString();
}
}
code/:
Bu formatter ile tarih formatı dd.MM.yyyy HH:mm:ss şeklinde yapılmaktadır. Önce tarih yazılmakta ardından mesajın varsayılan biçimlendirmes yapılmakta ve yeni satır karakteri eklenmektedir. Örneğin üç kere peşpeşe HelloWorld yapıldığında eski sistem aşağıdaki gibi basacaktır :
pre:/listing
Nis 27, 2013 5:24:44 PM com.fibiler.log.LogHelloWorldToFileTestApp main
INFO: Hello World
Nis 27, 2013 5:24:44 PM com.fibiler.log.LogHelloWorldToFileTestApp main
INFO: Hello World2
Nis 27, 2013 5:24:44 PM com.fibiler.log.LogHelloWorldToFileTestApp main
INFO: Hello World3
pre/:
Yeni yapılan LogFormatter aşağıdaki örnekte görüldüğü gibi set edilebilir :
code:/java
package com.fibiler.log;
import java.io.*;
import java.util.logging.*;
public class LogHelloWorldToFileTestApp
{
public static void main( String[] args )
throws SecurityException, IOException
{
Logger logger = Logger.
getLogger("com.fibiler.log.LogHelloWorldTestApp");
FileHandler fileHandler=new FileHandler("C:/Log",true);
logger.addHandler(fileHandler);
ConsoleHandler consoleHandler=new ConsoleHandler();
consoleHandler.setFormatter(new LogFormatter());
logger.setUseParentHandlers(false);
logger.addHandler(consoleHandler);
logger.log(Level.INFO, "Hello World");
logger.log(Level.INFO, "Hello World2");
logger.log(Level.INFO, "Hello World3");
}
}
code/:
Yeni bir ConsoleHandler yaratılıp formatter olarak daha önce yarattığımız formatter verilmektedir. setUseParentHandlers ile üst sınıfın console handler'ı devre dışı bırakılmıştır. Yukarıdaki örnek çalıştırıldığında ise aşağıdaki gibi bir ekran görüntüsü olacaktır :
pre:/listing
27.04.2013 17:25:44 - Hello World
27.04.2013 17:25:44 - Hello World2
27.04.2013 17:25:44 - Hello World3
pre/:
Örneğin Level bilgisi aşağıdaki gibi bir kod değişikliğiyle eklenebilir :
code/:java
sb.append(formatDate).append(" - ").
append(record.getLevel()).append(" - ").
append(formatMessage(record)).
append(System.getProperty("line.separator"));
code/:
Bu ekleme yaptıktan sonra aşağıdaki gibi görülecektir:
pre:/listing
27.04.2013 17:28:51 - INFO - Hello World
27.04.2013 17:28:51 - INFO - Hello World2
27.04.2013 17:28:51 - INFO - Hello World3
pre/: