在我们探索 Java 日志记录的世界时,Logger 类中的 getLogger() 方法是我们用来查找或创建日志记录器的一个核心工具。具体来说,如果我们传入的名称对应的日志记录器已经存在,该方法将直接返回该记录器;否则,它将创建一个具有该名称的新日志记录器并将其返回。
根据我们传入参数数量的不同,getLogger() 方法主要分为两种类型。
1. getLogger(java.lang.String)
这个方法用于查找或创建一个具有指定名称的日志记录器。如果尚不存在具有该名称的日志记录器,它将创建一个新的。当通过此方法创建新记录器时,其日志级别将根据 LogManager 的配置进行配置,并且它会被配置为也将日志输出发送到其父级的 Handlers(处理器)。它将被注册在 LogManager 全局命名空间中。
语法:
public static Logger getLogger(String name)
参数:
此方法接受单个参数 name,这是一个表示日志记录器名称的字符串。它应该是一个点分隔的名称,通常应基于子系统的包名或类名,例如 java.net 或 javax.swing。
返回值:
此方法返回一个合适的 Logger。
异常:
如果传入的名称为 null,此方法将抛出 NullPointerException。
下面的程序演示了 getLogger(java.lang.String) 方法的使用:
程序 1:
// Java program to demonstrate
// Logger.getLogger(java.lang.String) method
import java.util.logging.*;
public class GFG {
public static void main(String[] args)
{
// Create a Logger with class name GFG
Logger logger
= Logger.getLogger(GFG.class.getName());
// Call info method
logger.info("Message 1");
logger.info("Message 2");
}
}
控制台上打印的输出如下所示。
Output:
程序 2:
// Java program to demonstrate Exception thrown by
// Logger.getLogger(java.lang.String) method
import java.util.logging.*;
public class GFG {
public static void main(String[] args)
{
String LoggerName = null;
// Create a Logger with a null value
try {
Logger logger
= Logger.getLogger(LoggerName);
}
catch (NullPointerException e) {
System.out.println("Exception Thrown: "
+ e);
}
}
}
控制台上打印的输出如下所示。
Output:
2. getLogger(String name, String resourceBundleName)
此方法用于查找或创建具有传入名称的日志记录器。如果已经创建了具有给定名称的记录器,则返回该记录器。否则,将创建一个新的记录器。如果具有传入名称的 Logger 已经存在但没有本地化资源包,则给定的资源包名称将用作此记录器的本地化资源包。如果命名的 Logger 具有不同的资源包名称,则此方法将抛出 IllegalArgumentException。
语法:
public static Logger getLogger(String name, String resourceBundleName)
参数:
此方法接受两个不同的参数:
- name:这是日志记录器的名称。此名称应该是一个点分隔的名称,通常应基于子系统的包名或类名,例如 java.net 或 javax.swing。
- resourceBundleName:这是用于本地化此记录器消息的 ResourceBundle 的名称。
返回值:
此方法返回一个合适的 Logger。
异常:
此方法将抛出以下异常:
- NullPointerException: 如果传入的名称为 null。
- MissingResourceException: 如果 resourceBundleName 为非 null 但找不到相应的资源。
- IllegalArgumentException: 如果 Logger 已存在并且使用了不同的资源包名称;或者如果 resourceBundleName 为 null 但命名的记录器已设置了资源包。
下面的程序演示了 getLogger(String name, String resourceBundleName) 方法的使用:
程序 1:
// Java program to demonstrate
// getLogger(String name, String resourceBundleName) method
import java.util.ResourceBundle;
import java.util.logging.*;
public class GFG {
public static void main(String[] args)
{
// Create ResourceBundle using getBundle
// myResource is a properties file
ResourceBundle bundle
= ResourceBundle
.getBundle("resourceBundle");
// Create a Logger
// with GFG.class and resourceBundle
Logger logger
= Logger.getLogger(