Java中日志的含义
日志记录是指记录应用程序运行时状态、事件和信息的过程。日志可以包括各种级别的信息,例如普通信息、警告、错误。通过记录日志,开发人员和系统管理员可以了解应用程序的运行情况,追踪问题,以及监控系统的状态。
日志存放位置
日志通常被输出到文件、控制台或数据库等存储位置,方便后续分析和审查。
开发中常用的日志级别:DEBUG,INFO,WARN,ERROR。
①TRACE: 用于输出非常详细的日志信息,通常用于跟踪代码的执行流程。
②DEBUG: 用于输出调试信息,通常用于在开发和调试阶段输出详细的调试日志。
③INFO: 用于输出一般信息,通常用于在应用程序正常运行时输出重要的状态信息。
④WARN: 用于输出警告信息,通常用于输出一些可能会导致问题的情况,但不会影响应用程序的正常运行。
⑤ERROR: 用于输出错误信息,通常用于输出一些严重的错误情况,可能会影响应用程序的正常运行。
⑥OFF: 用于关闭所有日志输出,通常用于禁用日志记录。
这里是我学习过程中产生的几个疑问:
①日志有哪些级别
②springboot中怎么使用日志
③怎么查看日志信息
④怎么通过日志信息排错
⑤怎么输出日志到具体文件
只需要在项目的pom.xml文件中添加spring-boot-starter-web依赖(其实默认就有也不用我们添加),即可使用日志功能。Spring Boot默认使用SLF4J作为日志门面,并提供了对Logback等日志记录框架的集成支持。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在application.properties或application.yaml文件中配置,
这里在yaml文件中配置以下命令:在同级目录中查找logback.xml文件
loggong:
config:classpath:logback.xml
①创建日志对象
②使用日志对象的info()等方法输出日志
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
//创建日志对象
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public void doSomething() {
//输出日志
logger.debug("这是一个调试信息。");
logger.info("这是一个信息性消息。");
logger.warn("这是一个警告消息。");
logger.error("这是一个错误消息。");
}
}
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
setting–>plugins–>右侧marketplace 搜索Lombok–>
点击install–>安装完了点击restartIDE
就可以直接使用log对象进行日志记录,无需手动创建Logger实例。
@Slf4j
public class Example {
public void doSomething() {
log.debug("Debug message");
log.info("Info message");
log.warn("Warning message");
log.error("Error message"); } }
示例:
<!-- -->
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--输出日志的时间显示格式 -->
<pattern>%d{yyyy-MM-dd-HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<!-- 字符编码 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
<appender>标签,名称是STUDOUT,表示日志将被输出到控制台。它的类型是ch.qos.logback.core.ConsoleAppender。配置文件的最后<appender-ref>标签将STDOUT输出目的地引用到了根日志记录器。
Logback配置文件中的几种常见appender类型
ConsoleAppender:将日志输出到控制台。
FileAppender:将日志输出到文件。
RollingFileAppender:按照一定的规则将日志输出到滚动的文件中,例如按文件大小或日期进行滚动。
SocketAppender:将日志通过网络套接字发送到远程服务器。
SMTPAppender:通过电子邮件发送日志。
DBAppender:将日志输出到数据库。
<encoder>标签定义了一个格式编码,其中:
%d表示时间戳,
%thread表示线程名,
%-5level表示日志级别(左对齐,宽度为5),
%logger{36}表示日志记录器名称(最大长度为36),
%msg表示日志消息。
这个格式编码将会应用于STDOUT的控制台输出中。
使用<logger>元素为特定的包或类设置日志级别。例如,要将特定包下的日志级别设置为ERROR:
<logger name="com.example.package" level="ERROR" />
使用<root>元素设置根日志级别。根日志级别被设置为INFO,这意味着只有INFO级别及以上的日志会被输出。<appender-ref>标签将STDOUT输出目的地引用到了根日志记录器。例如:
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
示例为:把DEBUG级别的日志输出到控制台,把ERROR级别的输出到文件。
<configuration>
<!-- 属性标签,其他地方可以引用,当然这里没有引用只是作为示例-->
<property name="log.path" value="/var/log/app" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd-HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${log.path}/app.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd-HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.example" level="DEBUG">
<appender-ref ref="STDOUT" />
</logger>
<logger name="com.example" level="ERROR">
<appender-ref ref="FILE" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
标签定义了一个名为log.path的属性,它的值是/var/log/app。然后在标签中使用${log.path}来引用这个属性,从而动态地设置日志文件的路径。
<property name="log.path" value="/var/log/myapp" />
file标签用于指定日志输出的文件路径。通过标签,你可以设置日志输出的文件路径,然后这里还引用了前面的property属性。
使用<logger>元素为特定的包或类设置日志级别。例如,要将特定包下的日志级别设置为ERROR:
<logger name="com.example.package" level="ERROR" />
Logback需要以下三个表来存储日志信息:logging_event、logging_event_property和logging_event_exception。这些表需要在使用DBAppender之前创建。表字段信息如下
BEGIN;
DROP TABLE IF EXISTS logging_event_property;
DROP TABLE IF EXISTS logging_event_exception;
DROP TABLE IF EXISTS logging_event;
COMMIT;
BEGIN;
CREATE TABLE logging_event
(
timestmp BIGINT NOT NULL,
formatted_message TEXT NOT NULL,
logger_name VARCHAR(254) NOT NULL,
level_string VARCHAR(254) NOT NULL,
thread_name VARCHAR(254),
reference_flag SMALLINT,
arg0 VARCHAR(254),
arg1 VARCHAR(254),
arg2 VARCHAR(254),
arg3 VARCHAR(254),
caller_filename VARCHAR(254) NOT NULL,
caller_class VARCHAR(254) NOT NULL,
caller_method VARCHAR(254) NOT NULL,
caller_line CHAR(4) NOT NULL,
event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
COMMIT;
BEGIN;
CREATE TABLE logging_event_property
(
event_id BIGINT NOT NULL,
mapped_key VARCHAR(254) NOT NULL,
mapped_value TEXT,
PRIMARY KEY(event_id, mapped_key),
FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;
BEGIN;
CREATE TABLE logging_event_exception
(
event_id BIGINT NOT NULL,
i SMALLINT NOT NULL,
trace_line VARCHAR(254) NOT NULL,
PRIMARY KEY(event_id, i),
FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="db" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>org.postgresql.Driver</driverClass>
<url>jdbc:postgresql://localhost:5432/simple</url>
<user>postgres</user>
<password>root</password>
</connectionSource>
</appender>
<root level="INFO">
<appender-ref ref="db" />
</root>
</configuration>
查看日志文件
①日志服务器:
专门的日志服务器有ui界面,直接搜索。
②直接打开文件查看
③日志在数据库里,查询数据库
通过查找日志排错
具体的查找方式可以:在日志文件中搜索关键字,如异常信息、错误代码或特定操作的日志记录。
①通过用户账号检索,
②通过发生错误的时间检索,
③通过错误信息检索