Ubuntu Java日志管理如何实现
导读:Ubuntu Java日志管理实现方法 一、使用系统自带工具(rsyslog + logrotate) 1. 安装与配置rsyslog rsyslog是Ubuntu默认的日志收集工具,可将Java应用日志发送到系统日志文件或自定义路径。...
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.log4j< /groupId> < artifactId> log4j-core< /artifactId> < version> 2.14.1< /version> < /dependency> < dependency> < groupId> org.apache.logging.log4j< /groupId> < artifactId> log4j-api< /artifactId> < version> 2.14.1< /version> < /dependency>
- 创建
log4j2.xml
配置文件(类路径下,如src/main/resources
):< ?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="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.logback< /groupId> < artifactId> logback-classic< /artifactId> < version> 1.4.11< /version> < /dependency>
- 创建
logback.xml
配置文件:< ?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.SSS} [%thread] %-5level %logger{ 36} - %msg%n< /pattern> < /encoder> < /appender> < appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> < file> logs/app.log< /file> < rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> < fileNamePattern> logs/app-%d{ yyyy-MM-dd} .%i.log< /fileNamePattern> < maxHistory> 30< /maxHistory> < !-- 保留30天日志 --> < /rollingPolicy> < encoder> < pattern> %d{ yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{ 36} - %msg%n< /pattern> < /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)即可可视化分析日志。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Java日志管理如何实现
本文地址: https://pptw.com/jishu/727747.html