0
点赞
收藏
分享

微信扫一扫

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

司马吹风 2022-03-22 阅读 70
javaidea

 

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

修改一下,屏蔽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");
    }
}

父级别可以正常打印

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;
    }
}

文本日志结果:

11.5.3 修改日志管理器配置

启动时修改配置文件:

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

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

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

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

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

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

这个位置修改一下配置:

-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》查找相关笔记

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

举报

相关推荐

0 条评论