Java日志框架负责日志的生成、格式化和输出,Debian环境下常用以下框架:
配置文件需放在项目的src/main/resources目录下(Maven/Gradle项目),以下是常见框架的配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>["是", "%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n", "%msg%n"]</pattern>
</encoder>
</appender>
<!-- 文件输出(带滚动策略) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/myapp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留30天日志 -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 根日志级别(INFO)及输出目标 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</Console>
<File name="File" fileName="/var/log/myapp.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</File>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
/etc/java-XX/logging.properties(XX为Java版本,如11)或项目内的logging.properties:.level=INFO
handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler
java.util.logging.ConsoleHandler.level=INFO
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level=INFO
java.util.logging.FileHandler.pattern=/var/log/myapp.log
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
注意:若使用SLF4J,需在项目中添加对应依赖(如Logback需ch.qos.logback:logback-classic,Log4j2需org.apache.logging.log4j:log4j-core),并确保无其他日志框架冲突。
通过SLF4J API记录日志(推荐),示例:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
public void myMethod() {
log.info("This is an info message"); // 信息日志
log.debug("Debugging: userId={}", 123); // 带参数的调试日志(避免字符串拼接)
try {
// 业务代码
} catch (Exception e) {
log.error("Error occurred: {}", e.getMessage(), e); // 记录异常堆栈
}
}
}
关键技巧:
{}占位符代替字符串拼接,提升性能;error日志记录异常堆栈(e),便于排查问题;INFO,开发环境设为DEBUG。Debian下Java日志通常输出到/var/log/目录(如/var/log/myapp.log),可使用以下命令管理:
tail -f /var/log/myapp.log(动态显示新增内容);grep "error" /var/log/myapp.log(查找错误日志);less /var/log/myapp.log(按空格翻页,q退出);journalctl(查看所有系统日志)、journalctl -u my-java-app(查看指定服务的日志)。使用logrotate工具自动轮转日志(Debian默认安装),步骤如下:
sudo nano /etc/logrotate.d/myapp;/var/log/myapp.log {
daily # 每天轮转
rotate 30 # 保留30个旧日志
compress # 压缩旧日志(.gz格式)
delaycompress # 延迟压缩(避免当天日志被压缩)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件并设置权限
}
sudo logrotate --debug /etc/logrotate.d/myapp(模拟轮转过程);sudo logrotate -f /etc/logrotate.d/myapp(强制立即轮转)。对于生产环境,建议使用日志管理工具实现集中监控与告警:
sudo apt install logwatch,配置/etc/logwatch/conf/logwatch.conf)。sudo chown root:adm /var/log/myapp.log # 所有者:root,组:adm
sudo chmod 640 /var/log/myapp.log # 用户可读写,组可读
%replace过滤器)。通过以上步骤,可在Debian系统上高效管理Java应用的日志,确保日志的可维护性、可分析性及安全性。