当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-07-14
11.5.5 处理器 其实通俗的说,这里的处理器就是日志输出的位置,以及对应此输出位置独立的配置内容,比如 FileHandler 是 输出到文件, ConsoleHandler 是输出到控制台。 public class Main { p


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

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");

}
}

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

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

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

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

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

可以看到常用的 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");

}
}

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

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");

}
}

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

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

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

评论

网友评论