千家信息网

JDK日志框架之如何自定义日志Formatter

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍JDK日志框架之如何自定义日志Formatter,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JDK日志可以被格式化为一定格式的文本,也可以成为 XML 或者
千家信息网最后更新 2026年11月02日JDK日志框架之如何自定义日志Formatter

这篇文章主要介绍JDK日志框架之如何自定义日志Formatter,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

JDK日志可以被格式化为一定格式的文本,也可以成为 XML 或者 Html 这样标准的格式。这取决于 Formatter 类的具体实现。 Formatter 抽象类提供了 format 成员函数用于扩展。一个典型的自定义 Formatter 类实现如清单 3 所示:

清单 3 LogRecord 类定义

public class MyFormatter extends Formatter {   private final String lineSeparator = System.getProperty("line.separator");   @Override   public String format(LogRecord record) {   StringBuffer sb = new StringBuffer();   String message = formatMessage(record);   sb.append(record.getLevel().getLocalizedName());   sb.append(message);   sb.append(lineSeparator);   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) {   }   }   return sb.toString();   }   }

其中 formatMessage 方法提供了默认的将日志记录本地化和格式化的方法。它还能支持 java.text 风格的文本格式化,这只需要在调用 Logger 对象的 setMessage 方法设定 java.text 风格的格式字符串,同时通过 setParameters 方法设置参数,这样 formatMessage 将会根据所设置的 java.text 风格的格式字符串来格式化日志消息。总之,formatMessage 方法方便了子类格式化字符串。使子类只需要定义输出文本的格式而无需考虑本地化等问题。

自定义日志消息级别

JDK日志框架默认提供了 SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST 这几种日志级别。如果我们需要定义更多的日志级别,只需要继承 java.util.logging.Level 类,然后将自定义的级别作为静态成员变量声明即可。一个典型的自定义的消息类如清单 4 所示。

清单 4 自定义 Level 类

public class MyLevel extends Level {    protected MyLevel(String name, int value) {   super(name, value);   }    public static final Level Level1 = new MyLevel("Level1", 123);   ... // 其他自定义级别  }


权重值 value 是一个整型数。在默认的 JDK日志级别中,SEVERE 的权重是 1000,FINEST 是 300,可以根据具体的需求来定义每个自定义级别的权重。例如在 WARNING 和 INFO 级别中加入一个新的级别,该级别的权重必须介于 800 到 900 之间。

自由的日志配置

和其他日志框架一样,JDK日志框架同样提供了强大的日志配置功能。你既可以通过代码进行动态配置,也可以通过配置文件来实现自由灵活的配置。通过代码动态配置,应用程序可以实现在运行过程中改变日志类的配置,动态地改变不同的配置组合。一个简单的动态配置代码如清单 5 所示。

清单 5 动态配置 Logger 对象

public static void main(String[] args){   Handler fh = new FileHandler("%t/wombat.log");   Logger.getLogger("logname").addHandler(fh);   Logger.getLogger("com.wombat").setLevel("com.wombat",Level.FINEST);   ...   }

配置文件的配置方法则同样灵活多变。它主要是在应用程序启动时根据一个指定的配置文件来设置日志对象。在配置文件中,日志对象是由其名称来标识的。一个典型的日志配置文件如清单 6 所示。

清单 6 jdk Logger 配置文件

# 设置日志对象的 Handler,日志对象的名称是 com.xyz.fOO

com.xyz.fOO.handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler

# 设置日志对象的基本输出级别

com.xyz.fOO.level = INFO

#FileHandler 只允许输出 SEVERE 以上级别的JDK日志

java.util.logging.ConsoleHandler.level = SEVERE

#ConsoleHandler 允许输出 INFO 以上级别的JDK日志

java.util.logging.ConsoleHandler.level = INFO

当设置好一个日志配置文件后,在Java 程序的启动参数中,我们可以通过添加 -Djava.util.logging.config.file 参数来定义配置文件路径,一个典型的Java 命令行如下:

java -Djava.util.logging.config.file=logger.properties -cp . Mainclass

JDK日志框架之自定义日志Formatter就介绍到这里,这些组件要使用其实只需要能够在 classpath 中找到即可。

以上是"JDK日志框架之如何自定义日志Formatter"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

日志 配置 级别 格式 文件 清单 对象 框架 方法 动态 典型 权重 输出 代码 参数 可以通过 字符 字符串 文本 消息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 广州百单互联网科技有限公司 互联网科技活动banner 互联网品科技 港股互联网科技股 中正互联网科技招聘 上海电发互联网科技有限公司 受益于互联网科技的高速发展 移动互联网科技公司 晓花互联网科技有限公司网址 中国科技创新与世界互联网大会 浙南科技城互联网大厦建设工程 互联网科技如何创业 合肥互联网科技公司公章图片 广州千川互联网科技有限公司 广州富喜互联网络科技 陕西云淼互联网科技公司 广州有谷有贝互联网科技有限公司 神州科技互联网有限公司 华人运通互联网科技公司 科技创新与互联网经济 科技信息互联网 期待互联网科技 天津摩尔互联网科技 青海省互联网新科技 互联网对科技的发展 注册互联网科技公司经营范围大全 图游互联网科技 科技互联网公司两年变化 互联网 科技节活动 微视频大赛
0