阅读量:3
Java日志在 Ubuntu 的最佳实践
一 核心选型与依赖管理
- 使用SLF4J作为日志门面,绑定Logback作为实现,做到代码与实现解耦,便于在不改代码的情况下切换日志框架。Logback原生实现SLF4J,性能与功能完善,适合大多数场景。Maven依赖示例:
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.3version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.30version>
dependency>
- 如需使用Log4j 2,可替代组合为SLF4J + Log4j 2,依赖示例:
<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>
- 老项目存在JCL(commons-logging)/JUL/log4j 1.x等依赖时,使用桥接统一到SLF4J:jcl-over-slf4j、jul-to-slf4j、log4j-over-slf4j,避免日志重复或丢失。
二 日志格式与级别
- 统一日志格式,建议包含:时间戳、线程、级别、类名/方法、行号、消息、异常栈。示例(Logback):
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%line - %msg%npattern>
encoder>
- 合理使用日志级别:DEBUG/INFO/WARN/ERROR。开发环境可用DEBUG,生产环境建议INFO及以上,按需为特定包设置更细粒度级别。
- 避免字符串拼接开销,使用SLF4J的占位符:
logger.debug("id: {}, name: {}", id, name);。 - 高并发场景开启异步日志(Log4j 2 Async、Logback Async),显著降低I/O阻塞对吞吐的影响。
三 滚动与保留策略
- 采用按时间+按大小的滚动策略,限制单个文件与保留数量,防止磁盘被撑满。示例(Logback):
<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>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>250MBmaxFileSize>
triggeringPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%line - %msg%npattern>
encoder>
appender>
- 示例(Log4j 2):
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%nPattern>
PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB"/>
Policies>
<DefaultRolloverStrategy max="20"/>
RollingFile>
- 建议将日志目录设为**/var/log/yourapp/,并按保留天数/数量与压缩归档**策略管理历史日志。
四 系统级管理与权限
- 使用logrotate作为系统级兜底(对未按框架策略滚动的日志或外部进程日志有效)。示例配置**/etc/logrotate.d/yourapp**:
/var/log/yourapp/*.log {
daily
rotate 14
compress
missingok
notifempty
create 640 yourapp adm
copytruncate
}
- 目录与权限建议:创建日志目录并设定属主属组,例如:
sudo mkdir -p /var/log/yourapp && sudo chown yourapp:adm /var/log/yourapp,确保应用有写入权限。 - 如需将应用日志写入journald/syslog,可在框架中配置相应Appender(如SyslogAppender),便于与系统日志统一采集与转发。
五 查看与运维命令
- 实时查看:
tail -f /var/log/yourapp/app.log - 查看末尾N行:
tail -n 200 /var/log/yourapp/app.log - 分页查看大文件:
less /var/log/yourapp/app.log - 检索关键字:
grep -n "ERROR" /var/log/yourapp/app.log或grep -C 5 "Exception" /var/log/yourapp/app.log - 结合系统日志:
sudo tail -f /var/log/syslog | grep java - 建议为常用视图建立aliases或简单的logrotate/postrotate脚本,减少人工操作成本。
以上就是关于“Java日志在Ubuntu中的最佳实践”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm