《Java 核心技术 卷1》 笔记 第11章 异常、日志、断言和调试(5)日志高级+日志配置文件_idea

11.5.2 高级日志

日志等级:设置日志名称与包名类似,但是不存在约束实际的权限关系,它的作用在于属性共享。

比如setLevel:

public class Main {
public static void main(String[] args) {
Main solution = new Main();
Logger logger = Logger.getLogger("com.a.b");
Logger loggerParent = Logger.getLogger("com.a");
loggerParent.setLevel(Level.WARNING);
logger.info("123");
loggerParent.info("123");
}
}

《Java 核心技术 卷1》 笔记 第11章 异常、日志、断言和调试(5)日志高级+日志配置文件_日志管理_02

修改一下,屏蔽INFO级别日志:

public class Main {
public static void main(String[] args) {
Main solution = new Main();
Logger logger = Logger.getLogger("com.a.b");
Logger loggerParent = Logger.getLogger("com.a");
logger.setLevel(Level.WARNING);
logger.info("logger");
loggerParent.info("loggerParent");
}
}

《Java 核心技术 卷1》 笔记 第11章 异常、日志、断言和调试(5)日志高级+日志配置文件_java_03

父级别可以正常打印

setLevel 这个功能其实就是一种日志过滤的功能,它的作用是屏蔽它的等级以下的日志,日志级别如下:

严重:SEVERE

警告:WARING

消息:INFO

配置:CONFIG

好的:FINE

较好:FINER

最好:FINEST

另外,Level.OFF 表示关闭日志。通常只需要前3个级别(其实常见的其他框架级别是 error/warn/info/debug,类似,一般只用区分到这个程度),不改控制台就试试输出到文件:

public class Main {
public static void main(String[] args) throws IOException {
Main solution = new Main();
solution.test(new String[]{"123","12345"});
}

private int test(String[] args) throws IOException {
Logger logger = Logger.getLogger(getClass().getName());
FileHandler handler
= new FileHandler("logs.txt");
handler.setFormatter(new SimpleFormatter());
logger.addHandler(handler);

logger.setLevel(Level.FINER);
String clazzName = getClass().getName();
String methodName = Thread.currentThread() .getStackTrace()[1].getMethodName();

Object[] arr = null;
if(args!=null){
arr = Arrays.copyOf(args,args.length);
}
logger.entering(clazzName,methodName, arr);
int c = 5;
logger.exiting(clazzName,methodName,c);
return c;
}
}

文本日志结果:

《Java 核心技术 卷1》 笔记 第11章 异常、日志、断言和调试(5)日志高级+日志配置文件_包名_04

11.5.3 修改日志管理器配置

启动时修改配置文件:

Java -Djava.util.loggin.conf.file=configFile MainClass

进入路径 JAVA_HOME/jre/lib/找到 logging.properties

《Java 核心技术 卷1》 笔记 第11章 异常、日志、断言和调试(5)日志高级+日志配置文件_idea_05

我们把这个日志随便拷贝到系统内任意一个路径,然后修改配置

包名.level=FINER
java.util.logging.ConsoleHandler.level = FINER

少量修改上一节的内容:为:

Logger logger = Logger.getLogger(getClass().getPackage().getName());

《Java 核心技术 卷1》 笔记 第11章 异常、日志、断言和调试(5)日志高级+日志配置文件_包名_06

这个位置修改一下配置:

-Djava.util.logging.config.file=路径\logging.properties
public class Main {
public static void main(String[] args) throws IOException {
Main solution = new Main();
solution.test(new String[]{"123","12345"});
}

private int test(String[] args) throws IOException {
Logger logger = Logger.getLogger(getClass().getPackage().getName());
logger.setLevel(Level.FINER);
String clazzName = getClass().getName();
String methodName = Thread.currentThread() .getStackTrace()[1].getMethodName();

Object[] arr = null;
if(args!=null){
arr = Arrays.copyOf(args,args.length);
}
logger.entering(clazzName,methodName, arr);
int c = 5;
logger.exiting(clazzName,methodName,c);
return c;
}
}

运行:

《Java 核心技术 卷1》 笔记 第11章 异常、日志、断言和调试(5)日志高级+日志配置文件_日志管理_07

可输出到控制台了

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

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

公众号 钰娘娘知识汇总