Java-日志管理
Java-日志管理
JUL(内置)
-
基本使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24package com.coderitl.test;
import org.junit.jupiter.api.Test;
import java.util.logging.Level;
import java.util.logging.Logger;
public class JUTDemo {
public void testJUL() {
// 获取日志记录器对象 => 需要一个唯一标识(一般以当前类的全限定名称)
Logger logger = Logger.getLogger("com.coderitl.test.JUTDemo");
// 日志输出
logger.info("日志记录输出");
// 通用方法进行日志记录
logger.log(Level.INFO, "info msg");
// 通用占位符 方式输出变量
String userName = "coder-itl";
// 占位符索引要存在
logger.log(Level.INFO, "用户信息: {0}", userName);
logger.log(Level.INFO, "用户信息: {0}", new Object[]{userName});
}
} -
自定义日志级别
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
public void testJULLevelConfig() throws IOException {
// 获取日志记录器对象
Logger logger = Logger.getLogger("com.coderitl.test.JUTDemo");
// 关闭系统默认配置
logger.setUseParentHandlers(false);
// 自定义配置日志级别
// 创建 ConsoleHandler 对象 => 控制台输出
ConsoleHandler consoleHandler = new ConsoleHandler();
// 创建简单格式转换对象
SimpleFormatter simpleFormatter = new SimpleFormatter();
// 进行关联
consoleHandler.setFormatter(simpleFormatter);
logger.addHandler(consoleHandler);
// 配置具体日志级别
logger.setLevel(Level.ALL);
consoleHandler.setLevel(Level.ALL);
// 文件输出
FileHandler fileHandler = new FileHandler("E:\\log-demo\\logs\\jul.log");
// 进行关联
fileHandler.setFormatter(simpleFormatter);
logger.addHandler(fileHandler);
logger.severe("severe");
logger.warning("warning");
// jul 默认日志级别(低于 info 的日志信息不会显示)
logger.info("info");
logger.config("config");
logger.fine("fine");
logger.finer("finer");
logger.finest("finest");
} -
读取配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void testJUL_ConfigProperties() throws IOException {
// 读取配置文件
InputStream ins = JUTDemo.class.getClassLoader().getResourceAsStream("logging.properties");
// 创建 logManager
LogManager logManager = LogManager.getLogManager();
// 通过
logManager.readConfiguration(ins);
// 获取日志记录器对象
Logger logger = Logger.getLogger("com.coderitl.test");
// 日志级别
logger.severe("severe");
logger.warning("warning");
// jul 默认日志级别(低于 info 的日志信息不会显示)
logger.info("info");
logger.config("config");
logger.fine("fine");
logger.finer("finer");
logger.finest("finest");
}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# RootLogger 顶级父元素默认的处理器为: ConsoleHandler
handlers=java.util.logging.ConsoleHandler
# RootLogger 级父元素默认的日志级别为: ALL
.level=ALL
# 自定义 Logger 使用
com.coderitl.test.handlers=java.util.logging.ConsoleHandler
com.coderitl.test.level=CONFIG
# 关闭默认配置
com.coderitl.test.useParentHandlers=false
# 向日志文件输出的 handler 对象
# 指定日志文件路径 /logs/java0.log
java.util.logging.FileHandler.pattern=/logs/java%u.log
# 指定日志文件内容大小
java.util.logging.FileHandler.limit=50000
# 指定日志文件数量
java.util.logging.FileHandler.count=1
# 指定 handler 对象日志消息格式对象
java.util.logging.FileHandler.formatter=java.util.simpleFormatter
# 指定以追加方式添加日志内容
java.util.logging.FileHandler.append=true
# 向控制台输出的 handler 对象
# 指定 handler 对象的日志级别
java.util.logging.ConsoleHandler.level=ALL
# 指定 handler 对象地消息格式对象
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
# 指定 handler 对象的字符集(有点小问题)
java.util.logging.SimpleFormatter.format=%4$s: %5$s [$l$tc]%n
LOG4J
-
添加依赖
1
2
3
4
5<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency> -
基本使用
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
28package com.coderitl.test;
import org.apache.log4j.BasicConfigurator;
import org.junit.jupiter.api.Test;
import org.apache.log4j.Logger;
public class Log4JTest {
public void testLog4J() {
// 初始化配置信息,在入门案例中暂不使用配置文件
BasicConfigurator.configure();
// 获取日志记录器对象
Logger logger = Logger.getLogger(Log4JTest.class);
// 日志记录输出
logger.info("log4j info...............");
// 日志级别
logger.fatal("fatal..."); // 严重错误,一般会造成影响系统崩溃并终止运行
// 常用 4 个
logger.error("error..."); // 错误信息,不会影响系统运行
logger.warn("warn..."); // 警告信息,可能会发生问题
logger.info("info..."); // 运行信息,数据库连接, 网络连接, IO 操作等等
logger.debug("debug..."); // 调式信息,一般在开发中使用, 记录程序变量参数传递消息等等
logger.trace("trace..."); // 追踪信息,记录程序所有的流程信息
}
} -
加载配置文件使用
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# classpath:/log4j.properties:
# Global logging configuration
# 设置日志输出级别以及输出目的地,可以设置多个输出目的地,开发环境下,日志级别要设置成DEBUG 或者 ERROR
# 前面写日志级别,逗号后面写输出目的地:我自己下面设置的目的地相对应,以逗号分开
# log4j.rootLogger = [level],appenderName1,appenderName2,…
log4j.rootLogger=DEBUG,CONSOLE,LOGFILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
# 输出到控制台
log4j.appender.CONSOLE.Target=System.out
# 指定控制台输出日志级别
log4j.appender.CONSOLE.Threshold=DEBUG
# 默认值是 true, 表示是否立即输出
log4j.appender.CONSOLE.ImmediateFlush=true
# 设置编码方式
log4j.appender.CONSOLE.Encoding=UTF-8
# 日志输出布局
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
# 如果日志输出布局为PatternLayout 自定义级别,需要使用 ConversionPattern 指定输出格式
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p (%c:%L) - %m%n
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
# 指定输出文件路径
#log4j.appender.LOGFILE.File =F://Intellij idea/logs/error.log
log4j.appender.LOGFILE.File=./logs/error.log
#日志输出到文件,默认为true
log4j.appender.LOGFILE.Append=true
# 指定输出日志级别
log4j.appender.LOGFILE.Threshold=ERROR
# 是否立即输出,默认值是 true,
log4j.appender.LOGFILE.ImmediateFlush=true
# 设置编码方式
log4j.appender.LOGFILE.Encoding=UTF-8
# 日志输出布局
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
# 如果日志输出布局为PatternLayout 自定义级别,需要使用 ConversionPattern 指定输出格式
log4j.appender.LOGFILE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
SLF4J
-
依赖添加
1
2
3
4
5
6
7
8
9
10<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
</dependency> -
测试使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23package com.coderitl.test;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Slf4jTest {
public static final Logger LOGGER = LoggerFactory.getLogger(Slf4jTest.class);
public void testSlf4j() {
// 日志级别
LOGGER.error("error");
LOGGER.warn("error");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
// 参数输出
String username = "coder-itl";
LOGGER.info("用户信息: {}", username);
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 coder-itl!
评论