java logger 日志文件_Java程序日志:java.util.logging.Logger类

一、Logger 的级别

比log4j的级别详细,全部定义在java.util.logging.Level里面。

各级别按降序排列如下:

SEVERE(最高值)

WARNING

INFO

CONFIG

FINE

FINER

FINEST(最低值)

此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录。

logger默认的级别是INFO,比INFO更低的日志将不显示(但也会写入文件)。

注意:

高等级的Logger不会显示(或写入)低等级的记录。

低等级的Logger会显示(或写入)高等级的记录。

二、创建 Logger 对象

static Logger getLogger(String name)

为指定子系统查找或创建一个 logger。

static Logger getLogger(String name, String resourceBundleName)

为指定子系统查找或创建一个 logger。

注意:name是Logger的名称,一般使用圆点分隔的层次命名空间来命名 Logger 。

当名称相同时候,同一个名称的Logger只创建一个(不同引用指向同一logger,这意味着不同引用可以操作同一Logger)。

三、简单实例 --- 控制台打印 Logger

public classTestLogger {public static voidmain(String[] args) {//创建SEVERE级别的Logger

Logger severeLogger = Logger.getLogger("logger.severe"); //名为logger.severe

severeLogger.setLevel(Level.SEVERE);//设置logger等级//创建WARNING级别的Logger

Logger warninglogger = Logger.getLogger("logger.warning");

warninglogger.setLevel(Level.WARNING);//创建INFO级别的Logger

Logger infoLogger = Logger.getLogger("logger.info");

infoLogger.setLevel(Level.INFO);//创建CONFIG级别的Logger

Logger configLogger = Logger.getLogger("logger.config");//比INFO等级更低的日志将不显示

configLogger.setLevel(Level.CONFIG);/*------------------------------------记录测试----------------------------------*/infoLogger.info("这是infoLogger的记录");//记录一条INFO级别的消息

infoLogger.warning("低级能显示高级信息?");//由结果可知低级别的logger能 显示/记录 高级别的信息

warninglogger.warning("这是warninglogger的记录");

warninglogger.severe("低级能显示高级信息?");

warninglogger.info("高级能显示低级信息?");//由结果可知高级别的logger不能 显示/记录 低级别的信息

severeLogger.severe("这是severeLogger的记录");

severeLogger.warning("高级能显示低级信息?");

configLogger.config("这是configLogger的记录");//INFO等级以下的Logger不会显示 同等级/更低级 的消息

Logger testLogger1= Logger.getLogger("logger.info");//当名称相同时候,同一个名称的Logger只创建一个

System.out.println("同名的logger是否相等:" + (infoLogger ==testLogger1));

testLogger1.setLevel(Level.SEVERE);//设置成高等级

infoLogger.info("这是infoLogger的记录");

infoLogger.setLevel(Level.INFO);//再设置成低等级

infoLogger.info("这是infoLogger的记录");

}

}

输出结果:

ab830b38a9ec97ed21e05d569d362ceb.png

四、Logger 的 Handler 类

Handler 对象从 Logger 中获取日志信息,并将这些信息导出。例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。

可通过执行 setLevel(Level.OFF) 来禁用 Handler,并可通过执行适当级别的 setLevel 来重新启用。

Handler 类通常使用 LogManager 属性来设置 Handler 的 Filter、Formatter 和 Level 的默认值。

java.util.logging.Handler

java.util.logging.MemoryHandler

java.util.logging.StreamHandler

java.util.logging.ConsoleHandler

java.util.logging.FileHandler

java.util.logging.SocketHandler

五、简单实例 --- 写出 Logger 文件

public classTestLogger {public static void main(String[] args) throwsIOException {//创建SEVERE级别的Logger

Logger severeLogger = Logger.getLogger("logger.severe"); //名为logger.severe

severeLogger.setLevel(Level.SEVERE);//设置logger等级//创建WARNING级别的Logger

Logger warninglogger = Logger.getLogger("logger.warning");

warninglogger.setLevel(Level.WARNING);//创建INFO级别的Logger

Logger infoLogger = Logger.getLogger("logger.info");

infoLogger.setLevel(Level.INFO);//创建CONFIG级别的Logger

Logger configLogger = Logger.getLogger("logger.config");//比INFO等级更低的日志将不显示

configLogger.setLevel(Level.CONFIG);

File logDir= new File("f:/logTest", "logDir");//创建文件对象参数:父目录,子目录

logDir.mkdirs();//创建多级目录

File logFile = new File(logDir.getAbsolutePath(),"logTest.log");//创建文件对象

FileHandler fileHandler= new FileHandler(logFile.getAbsolutePath(), 10240, 1, true);//写出日志文件,参数:路径,最大字节数,要使用的文件数,是否追加文件。(达到最大字节数后,会删掉原来所有记录,重新开始记录)

fileHandler.setLevel(Level.ALL);//同样地,高等级的FileHandler不会记录低等级的消息,ALL等级的FileHandler会记录所有等级的消息//fileHandler.setFormatter(new MyLogFormatter());//设置自定义日志记录格式(默认是XML格式),该类在后文会提到。

infoLogger.addHandler(fileHandler);//添加Handler对象

infoLogger.info("infoLogger的info记录");//将记录写入日志文件

infoLogger.config("infoLogger的config记录");//低于logger等级的记录不会被写入日志文件

configLogger.addHandler(fileHandler);

configLogger.info("configLogger的info记录");

configLogger.config("configLogger的config记录");//如果FileHandler的等级为ALL或低于INFO,config等级的Logger也会被写入日志文件,只是不会在控制台打印出来

}

}

输出结果:(在F盘中可以找到写出的日志文件)

27b70d0b00c009d621766a7552ff1629.png

同样地, Logger log()方法也能进行文件的写出,这里不再赘述。

打开文件会发现,默认的日志方式是xml格式。

我们也可以自定义logger的格式。

需要用Formatter来定义。

六、Logger 的 Formatter

Formatter 为格式化 LogRecords 提供支持。

一般来说,每个日志记录 Handler 都有关联的 Formatter。

Formatter 接受 LogRecord,并将它转换为一个字符串。

LogRecord 对象用于在日志框架和单个日志 Handler 之间传递日志请求。

几种 Formatter :

java.util.logging.Formatter

java.util.logging.SimpleFormatter

java.util.logging.XMLFormatter

注意:

是 java.util.logging.Formatter ,要与 java.util.Formatter 区分开

七、简单实例 --- 自定义 Formatter

/**用于自定义格式化的类*/

class MyLogFormatter extendsFormatter {

@OverridepublicString format(LogRecord record) {return record.getSourceClassName() + ": " + record.getSourceMethodName() + ": " + record.getLevel() + ": " + record.getMessage() + "\n";

}

}

关于其他的格式化设置,可以参考API中 java.util.Formatter 这个类

输出结果:

b408e53b38122b2b5fa1ec3d7dcaedef.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值