Java 日志

一、基本日志

       使用全局日志记录器(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可以将日志发送到特定的主机和端口。

猜你喜欢

转载自blog.csdn.net/hefrankeleyn/article/details/86592734