Java 日志

本文介绍了Java的日志操作,包括基本日志记录、高级日志管理如自定义日志记录器,详细讲解了七个日志级别及其设置,以及如何使用其他配置文件和处理器。重点讨论了文件处理器FileHandler的使用,阐述了如何将日志写入文件,并讨论了日志记录器的层次结构和级别继承特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本日志

       使用全局日志记录器(global logger),调用info方法:

    public static void baseLog(){
        Logger.getGlobal().info("File->Open menu item selected.");
    }

将在控制台打印如下内容:

二、高级日志(企业级)

      在专业的应用程序中,不要将所有的日志都记录在一个全局日志记录器中,可以自定义日志记录器:

未被任何变量引用的日志记录器可能会被垃圾回收,所以用一个静态变量存储日志记录器的一个引用。

private static final Logger myLogger = Logger.getLogger("exceptions.logging");

        日志记录其有层次结构:如果对com.mycompany日志记录器设置了日志级别,它的子记录器也会继承这个级别。

2.1 七个日志记录器级别

  • SEVERE
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

默认只记录前三个级别:SEVERE、WARNING、INFO。

2.2 设置日志级别

myLogger.setLevel(Level.CONFIG);

这样就设置了日志级别,但要想在控制台看到(日志记录器默认将记录发送给控制台处理器ConsoleHandler),还要修改日志管理配置:jre\lib\logging.properties

比如:F:\Java\jdk1.8.0_191\jre\lib\logging.properties

2.3 使用其他的配置文件

使用如下命令运行:

三、日志处理器

      默认情况下,日志记录器将记录发送给ConsoleHandler中。和日志记录器一样,处理器也有日志记录级别。控制台处理器的默认日志记录级别为:

java.util.logging.ConsoleHandler.level = INFO

    要改变处理器的日志记录级别,除了修改配置文件外,还可以安装自己的处理器,绕过配置文件:

public class LogTest {
    // industrial-strength log
    private static final Logger myLogger = Logger.getLogger("exceptions.logging");
    

    public static void main(String[] args) {
        //baseLog();
        myLogger.setLevel(Level.FINER);
        finerLog();
        
        logHandler(Level.FINER);
        finerLog();
    }
    public static void finerLog(){
        myLogger.finer("finer log...");
    }

    public static void logHandler(Level lev){
        myLogger.setUseParentHandlers(false);
        Handler handler = new ConsoleHandler();
        handler.setLevel(lev);
        myLogger.addHandler(handler);
    }
}

此时会打印:

注意,如果不设置myLogger.setUseParentHandlers(false);  那么可能打印出两条相同的记录。因为日志记录器会将记录发送到自定义的处理器(自定义处理器是原始处理器的子类)和原始处理器,而原始处理器会将记录发送到控制台,如果原始记录器的日志记录级别达到了,也会记录一条和自定义处理器记录一样的日志。

    public static void main(String[] args) {

        myLogger.setLevel(Level.FINER);
        
        logHandler(Level.FINER);
        configLog();
    }
    public static void configLog(){
        myLogger.config("config log...");
    }
    public static void logHandler(Level lev){
       // myLogger.setUseParentHandlers(false);
        Handler handler = new ConsoleHandler();
        handler.setLevel(lev);
        myLogger.addHandler(handler);
    }

将打印出两条相同的日志:

除了控制台处理器(ConsoleHandler)外,还有文件处理器(FileHandler)和插槽处理器(SocketHandler)。FileHandler可以将日志写入到文件中,SocketHandler可以将日志发送到特定的主机和端口。

四、文件处理器(FileHandler)

       以下是FileHandler的记录,通过打断点可以发现日志生成之后,存储的位置:

public class LogTest {
    // industrial-strength log
    private static final Logger myLogger = Logger.getLogger("exceptions.logging");
    
    public static void main(String[] args) {
        fileHandler();
        threeClassLogLevel();
    }
    public static void threeClassLogLevel(){
        myLogger.severe("severe log....");
        myLogger.warning("warning  log...");
        myLogger.info("info log...");
    }
    public static void fileHandler(){
        try {
            FileHandler fileHandler = new FileHandler();
            myLogger.addHandler(fileHandler);
        } catch (SecurityException | IOException e) {
            e.printStackTrace();
        }

    }
}

查询默认日志文件存放的目录:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值