栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

《Java 核心技术 卷1》 笔记 第11章 异常、日志、断言和调试(7)处理器、过滤器、格式化器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《Java 核心技术 卷1》 笔记 第11章 异常、日志、断言和调试(7)处理器、过滤器、格式化器

11.5.5 处理器

其实通俗的说,这里的处理器就是日志输出的位置,以及对应此输出位置独立的配置内容,比如 FileHandler 是 输出到文件, ConsoleHandler 是输出到控制台。

public class Main {
    public static void main(String[] args) throws IOException {
        Main solution = new Main();
        Logger logger = Logger.getLogger("com.dyy.jdk8");
//
        FileHandler handler
                = new FileHandler("logs.txt");
        handler.setFormatter(new SimpleFormatter());
        handler.setLevel(Level.WARNING);
        logger.addHandler(handler);

//        ConsoleHandler consoleHandler = new ConsoleHandler();
//        consoleHandler.setLevel(Level.WARNING);
//        logger.addHandler(consoleHandler);


        logger.info("123");
        logger.warning("456");

    }
}

所有处理器,最终都源于 StreamHandler

双击 shift 输入 StreamHandler,跳到源码。光标移动到 StreamHandler 按住 F4

可以看到常用的 FileHandler 和 ConsoleHandler 都继承了这个类,自定义处理器继承 StreamHandler 即可。

11.5.6 过滤器

级别问题,可以通过 日志记录器 和 处理器 两者过滤。对于信息的细节,可以使用过滤器,比如日志中只保留含有123的,其他的不要:

public class Main {
    public static void main(String[] args) throws IOException {
        Main solution = new Main();
        Logger logger = Logger.getLogger("com.dyy.jdk8");
//
        FileHandler handler
                = new FileHandler("logs.txt");
        handler.setFormatter(new SimpleFormatter());
        handler.setFilter(new Filter() {
            @Override
            public boolean isLoggable(LogRecord record) {
                String message = record.getMessage();
                return message.contains("123");
            }
        });
        handler.setLevel(Level.INFO);
        logger.addHandler(handler);

        logger.info("123");
        logger.warning("456");

    }
}

11.5. 7 格式化器

简单的说就是拿到信息、级别这些信息之后怎么拼接,通过 setFormatter 方法定义:

import java.io.*;
import java.util.*;
import java.util.logging.*;
import java.util.logging.Formatter;

public class Main {
    private static final String format = LoggingSupport.getSimpleFormat();
    public static void main(String[] args) throws IOException {
        Main solution = new Main();
        Logger logger = Logger.getLogger("com.dyy.jdk8");
//
        FileHandler handler
                = new FileHandler("logs.txt");
        handler.setFormatter(new Formatter() {
            private final Date dat = new Date();
            @Override
            public synchronized String format(LogRecord record) {
                dat.setTime(record.getMillis());
                String source;
                if (record.getSourceClassName() != null) {
                    source = record.getSourceClassName();
                    if (record.getSourceMethodName() != null) {
                        source += " " + record.getSourceMethodName();
                    }
                } else {
                    source = record.getLoggerName();
                }
                String message = formatMessage(record);
                String throwable = "";
                if (record.getThrown() != null) {
                    StringWriter sw = new StringWriter();
                    PrintWriter pw = new PrintWriter(sw);
                    pw.println();
                    record.getThrown().printStackTrace(pw);
                    pw.close();
                    throwable = sw.toString();
                }
                return String.format(format,
                        dat,
                        source,
                        record.getLoggerName(),
                        "[yu_duan_hun]"+record.getLevel().getName(),
                        message,
                        throwable);
            }
        });
        handler.setLevel(Level.INFO);
        logger.addHandler(handler);

        logger.info("123");
        logger.warning("456");

    }
}

可以看到,输出信息前多了一个[yu_duan_hun] 

相关内容:选择 《Java核心技术 卷1》查找相关笔记

评论点赞收藏✨关注,是送给作者最好的礼物,愿我们共同学习,一起进步

如果对作者发布的内容感兴趣,可点击下方关注公众号 钰娘娘知识汇总 查看更多作者文章哦!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号