<!-- Generated by javadoc (build 1.6.0-beta2) on Fri Mar 09 12:53:26 CST 2007 -->
java.util.logging (不用log4j配置,自己写log文件)
FileHandler 可以写入指定的文件,也可以写入文件轮换集。
对于文件轮换集而言,到达每个文件的给定大小限制后,就关闭该文件,将其轮换出去,并打开新的文件。通过在基本文件名中添加 "0"、"1"、"2" 等来依次命名旧文件。
默认情况下,IO 库中启用了缓冲,但当缓冲完成时,每个日志记录都要被刷新。
默认情况下,XMLFormatter 类用于格式化。
配置: 默认情况下,每个 FileHandler 都是使用以下 LogManager 配置属性执行初始化的。如果没有定义属性(或者属性具有非法值),则使用指定的默认值。
- java.util.logging.FileHandler.level 为 Handler 指定默认的级别(默认为 Level.ALL )。
- java.util.logging.FileHandler.filter 指定要使用的 Filter 类的名称(默认为无 Filter )。
- java.util.logging.FileHandler.formatter 指定要使用的 Formatter 类的名称(默认为 java.util.logging.XMLFormatter )。
- java.util.logging.FileHandler.encoding 指定要使用的字符集编码的名称(默认使用默认的平台编码)。
- java.util.logging.FileHandler.limit 指定要写入到任意文件的近似最大量(以字节为单位)。如果该数为 0,则没有限制(默认为无限制)。
- java.util.logging.FileHandler.count 指定有多少输出文件参与循环(默认为 1)。
- java.util.logging.FileHandler.pattern 为生成的输出文件名称指定一个模式。有关细节请参见以下内容(默认为 "%h/java%u.log")。
- java.util.logging.FileHandler.append 指定是否应该将 FileHandler 追加到任何现有文件上(默认为 false)。
模式由包括以下特殊组件的字符串组成,则运行时要替换这些组件:
- "/" 本地路径名分隔符
- "%t" 系统临时目录
- "%h" "user.home" 系统属性的值
- "%g" 区分循环日志的生成号
- "%u" 解决冲突的唯一号码
- "%%" 转换为单个百分数符号"%"
如果未指定 "%g" 字段,并且文件计数大于 1,那么生成号将被添加到所生成文件名末尾的小数点后面。
例如,文件计数为 2 的 "%t/java%g.log" 模式通常导致在 Solaris 系统中将日志文件写入 /var/tmp/java0.log 和 /var/tmp/java1.log,而在 Windows 95 中,则将其写入 C:\TEMP\java0.log 和 C:\TEMP\java1.log。
按照 0、1、2 等的序列安排生成号。
通常,将唯一字段 "%u" 设置为 0。但是如果 FileHandler 试图打开文件名并查找当前被另一个进程使用的文件,则增加唯一的字段号并再次重试。重复此操作直到 FileHandler 找到当前没有被使用的文件名。如果有冲突并且没有指定 "%u" 字段,则将该字段添加到文件名末尾的小数点后(它将位于所有自动添加的生成号后面)。
因此,如果三个进程都试图将日志记录到 fred%u.%g.txt,那么它们可能将 fred0.0.txt、fred1.0.txt、fred2.0.txt 作为其循环序列中的首个文件而结束。
注意,使用本地磁盘文件系统时,使用唯一的 id 以避免冲突是系统可靠运行的唯一保证。
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
/**
*
* public FileHandler(String pattern,
* int limit,
* int count,
* boolean append)
* throws IOException,
* SecurityException初始化要写入文件集的 FileHandler(使用可选的 append)。
* 已向某个文件写入给定限制的数据量(近似)后,则打开另一个文件。输出将在计数文件集中进行循环。
* 根据 LogManager 属性(或其默认值)来配置 FileHandler(给定的模式参数用作文件名模式的情况除外),
* 将文件限制设置为限制参数,将文件计数设置为给定的计数参数,将 append 模式设置为给定的 append 参数。
*
* 计数必须至少为 1。
* 参数:
* pattern - 为输出文件命名的模式。
* limit - 写入到任何一个文件的最大字节数。
* count - 要使用的文件数。
* append - 指定 append 模式。
*
*/
public class TestLogger {
public static void main(String[] args) throws IOException {
Logger log = Logger.getLogger("lavasoft");
log.setLevel(Level.INFO);
Logger log1 = Logger.getLogger("lavasoft");
// System.out.println(log == log1); //true
Logger log2 = Logger.getLogger("lavasoft.blog");
// log2.setLevel(Level.WARNING);
FileHandler fileHandler = new FileHandler("c:/testlogger%g.log" ,10000,11,true);
fileHandler.setLevel(Level.INFO);
fileHandler.setFormatter(new MyLogHander());
log.addHandler(fileHandler);
log.info("aaaaaaaddfdfd11111");
// log2.info("bbb");
// log2.fine("fine");
}
}
class MyLogHander extends Formatter {
@Override
public String format(LogRecord record) {
Date date = new Date();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String d = sd.format(date);
return "[" + d + "]" + "[" +record.getLevel() + "]" + record.getClass() + " :" + record.getMessage()+"\n";
}
}