日志工厂 - LogFactory
# 日志工厂 - LogFactory
介绍
LogFactory
是 Hutool-log 日志系统的核心类,它提供了创建日志对象的统一接口。LogFactory
通过自动识别当前引入的日志框架(如 Log4j、Slf4j 等),并创建对应的日志实现对象,使得日志系统能够灵活适应不同的环境。
主要功能:
- 自动识别日志框架:
LogFactory.get
方法能够自动识别当前项目中引入的日志框架,并创建相应的Log
对象。 - 自定义日志实现:通过
LogFactory.setCurrentLogFactory
方法,可以自定义当前使用的日志框架,优先使用指定的实现。 - 单例缓存:对于同一个类,
LogFactory.get
会缓存创建的日志对象,确保每个类的Log
对象都是单例。
# 1. LogFactory.get
- 获取当前类对应的 Log
对象
LogFactory.get
方法是最常用的方法,它会根据传入的类自动创建并返回一个 Log
对象。通常在类中使用静态成员变量来保存这个 Log
对象,确保它是不可变的且全局可用。
# 示例:获取当前类的 Log
对象
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
public class LogFactoryExample {
// 静态成员变量,获取当前类的日志对象
private static final Log log = LogFactory.get();
public static void main(String[] args) {
log.info("这是一条信息日志");
log.error("这是一条错误日志");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 方法签名:
public static Log get()
public static Log get(String name)
- 参数说明:
name
:自定义的日志名称(可选)。如果不传入,则使用调用类的类名作为日志名称。
- 作用:用于快速获取当前类的
Log
对象,适用于大多数场景的日志输出。
# 2. LogFactory.createLog
- 创建新的 Log
对象
与 get
方法不同,createLog
每次都会创建一个新的 Log
对象,而不会使用缓存。它适用于需要动态生成日志对象的场景。
# 示例:创建自定义名称的 Log
对象
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
public class LogFactoryExample {
public static void main(String[] args) {
Log log = LogFactory.createLog("自定义日志名称");
log.info("自定义日志的输出信息");
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 方法签名:
public static Log createLog(String name)
- 参数说明:
name
:指定日志的名称。
- 作用:用于在特定情况下,每次生成一个新的日志对象,适合需要动态管理日志的应用。
# 3. LogFactory.setCurrentLogFactory
- 自定义日志实现
当项目中引入了多个日志框架时,可以通过 setCurrentLogFactory
方法自定义优先使用的日志实现类。这一方法会全局影响 LogFactory.get
方法生成的日志对象。
# 示例:自定义日志实现为 Apache Commons Logging
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import cn.hutool.log.dialect.apache.ApacheCommonsLogFactory;
public class LogFactoryExample {
static {
// 设置当前日志实现为 Apache Commons Logging
LogFactory.setCurrentLogFactory(new ApacheCommonsLogFactory());
}
private static final Log log = LogFactory.get();
public static void main(String[] args) {
log.info("使用 Apache Commons Logging 输出日志");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- 方法签名:
public static void setCurrentLogFactory(LogFactory logFactory)
- 参数说明:
logFactory
:指定的日志工厂实现类,例如ApacheCommonsLogFactory
、JdkLogFactory
、ConsoleLogFactory
等。
- 作用:用于自定义当前使用的日志框架,实现对项目中日志输出的灵活控制。
# 4. 自定义日志工厂与日志门面实现
LogFactory
是一个抽象类,用户可以通过继承该类并实现 createLog
方法来自定义日志门面。自定义的日志工厂可以用于特殊的日志处理需求。
# 示例:自定义日志工厂
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
public class CustomLogFactory extends LogFactory {
@Override
public Log createLog(String name) {
// 自定义创建 Log 的逻辑,可以将其包装成特定的日志实现
return new CustomLog(name);
}
@Override
public Log createLog(Class<?> clazz) {
return createLog(clazz.getName());
}
}
class CustomLog implements Log {
private final String name;
public CustomLog(String name) {
this.name = name;
}
@Override
public void info(String format, Object... arguments) {
// 自定义日志输出实现
System.out.println("[INFO] [" + name + "] " + format);
}
@Override
public void error(String format, Object... arguments) {
System.out.println("[ERROR] [" + name + "] " + format);
}
// 省略其他方法实现...
}
public class LogFactoryExample {
static {
// 设置当前日志工厂为自定义实现
LogFactory.setCurrentLogFactory(new CustomLogFactory());
}
private static final Log log = LogFactory.get();
public static void main(String[] args) {
log.info("自定义日志工厂输出信息");
log.error("自定义日志工厂输出错误");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
- 作用:通过自定义日志工厂,实现特定需求下的日志输出策略和格式,适用于需要高度自定义日志行为的场景。
:: tip 实际应用场景
- 统一管理日志输出:在复杂项目中,通过
LogFactory
管理不同模块的日志输出,统一配置和格式化。 - 多日志框架兼容:在项目中引入多个日志框架时,通过
LogFactory
自定义日志实现,确保日志系统的灵活性。 - 定制化日志输出:在需要自定义日志格式、输出位置或策略时,使用自定义日志工厂实现定制化需求。
:::
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08