Ubuntu Java日志管理实现方法
一、使用系统自带工具(rsyslog + logrotate)
1. 安装与配置rsyslog
rsyslog是Ubuntu默认的日志收集工具,可将Java应用日志发送到系统日志文件或自定义路径。
- 安装rsyslog:
sudo apt-get install rsyslog - 配置日志收集:编辑
/etc/rsyslog.conf或在/etc/rsyslog.d/下创建新文件(如java_app.conf),添加过滤规则(将包含"myapp"的日志写入指定文件):
:msg, contains, "myapp" -/var/log/myapp.log & stop - 重启服务生效:
sudo systemctl restart rsyslog
2. 配置logrotate日志轮转
避免日志文件过大,使用logrotate定期压缩、删除旧日志。 - 安装logrotate:
sudo apt-get install logrotate - 创建自定义配置(如
/etc/logrotate.d/myapp):/var/log/myapp.log { daily # 每日轮转 rotate 7 # 保留7天日志 compress # 压缩旧日志 missingok # 文件不存在时不报错 notifempty # 日志为空时不轮转 create 0644 root root # 创建新日志文件的权限 } - 手动测试:
sudo logrotate -f /etc/logrotate.d/myapp
二、使用Java原生日志框架(java.util.logging)
1. 基本代码示例
通过java.util.logging.Logger记录日志,支持控制台、文件输出。
import java.util.logging.Logger;
import java.util.logging.Level;
public class MyApp {
private static final Logger logger = Logger.getLogger(MyApp.class.getName());
public static void main(String[] args) {
logger.info("Application started."); // 记录info日志
try {
// 业务代码
} catch (Exception e) {
logger.log(Level.SEVERE, "Error occurred", e); // 记录错误日志(带堆栈)
}
}
}
2. 配置文件(logging.properties)
通过配置文件调整日志级别、输出目标和格式:
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
java.util.logging.FileHandler.pattern=%h/myapp.log # 日志文件路径(%h为用户主目录)
java.util.logging.FileHandler.limit=50000 # 单个文件最大大小(字节)
java.util.logging.FileHandler.count=1 # 保留的文件数量
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level=ALL # 控制台输出级别
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
.level=ALL # 全局日志级别
3. 启动时加载配置
通过JVM参数指定配置文件路径:
java -Djava.util.logging.config.file=logging.properties -jar myapp.jar
三、使用第三方日志框架(Log4j/Logback)
1. Log4j 2.x配置示例
Log4j 2是当前流行的日志框架,支持异步日志、动态配置等功能。
- 添加依赖(Maven):
<dependency> <groupId>org.apache.logging.log4jgroupId> <artifactId>log4j-coreartifactId> <version>2.14.1version> dependency> <dependency> <groupId>org.apache.logging.log4jgroupId> <artifactId>log4j-apiartifactId> <version>2.14.1version> dependency> - 创建
log4j2.xml配置文件(类路径下,如src/main/resources):"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="logs/app.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> - 代码中使用:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class MyApp { private static final Logger logger = LogManager.getLogger(MyApp.class); public static void main(String[] args) { logger.info("Application started."); } }
2. Logback配置示例
Logback是SLF4J的原生实现,性能优于Log4j 1.x。
- 添加依赖(Maven):
<dependency> <groupId>ch.qos.logbackgroupId> <artifactId>logback-classicartifactId> <version>1.4.11version> dependency> - 创建
logback.xml配置文件:"1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern> encoder> appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/app.logfile> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/app-%d{yyyy-MM-dd}.%i.logfileNamePattern> <maxHistory>30maxHistory> rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern> encoder> appender> <root level="info"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE"/> root> configuration> - 代码中使用(与Log4j类似):
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyApp { private static final Logger logger = LoggerFactory.getLogger(MyApp.class); public static void main(String[] args) { logger.info("Application started."); } }
四、集中式日志管理(ELK Stack)
1. 安装ELK组件
ELK(Elasticsearch + Logstash + Kibana)适合大规模日志收集与分析。
- 安装Elasticsearch:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list sudo apt-get update && sudo apt-get install elasticsearch - 安装Logstash:
sudo apt-get install logstash - 安装Kibana:
sudo apt-get install kibana
2. 配置Logstash收集Java日志
创建logstash.conf(如/etc/logstash/conf.d/java_app.conf),定义输入、过滤、输出:
input {
file {
path => "/var/log/myapp.log" # Java应用日志路径
start_position => "beginning"
}
}
filter {
grok { match => { "message" => "%{TIMESTAMP_ISO8601} %{LOGLEVEL:level} %{GREEDYDATA:msg}" } }
date { match => ["timestamp", "ISO8601"] }
}
output {
elasticsearch { hosts => ["localhost:9200"] } # 发送到Elasticsearch
stdout { codec => rubydebug } # 控制台输出(调试用)
}
3. 启动ELK服务
sudo systemctl start elasticsearch
sudo systemctl start logstash
sudo systemctl start kibana
访问http://localhost:5601(Kibana)即可可视化分析日志。
以上就是关于“Ubuntu Java日志管理如何实现”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm