Ubuntu上Java日志级别合理设置指南
一 核心原则与级别选择
logger.info(() -> "msg " + expensive()))。二 按常见日志框架的配置要点
表:常见框架在 Ubuntu 的推荐做法与示例
handlers=java.util.logging.ConsoleHandler,java.util.logging.FileHandler
.level=INFO
java.util.logging.ConsoleHandler.level=WARNING
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.FileHandler.pattern=/var/log/myapp/app.log
java.util.logging.FileHandler.limit=10485760
java.util.logging.FileHandler.count=10
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java -Djava.util.logging.config.file=/opt/app/logging.properties -jar app.jar<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/myapp/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/myapp/app.%d{yyyy-MM-dd}.gz</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>
<logger name="com.example" level="DEBUG" additivity="false"><appender-ref ref="CONSOLE"/></logger>
<root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/></root>
</configuration>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="RollingFile" fileName="/var/log/myapp/app.log"
filePattern="/var/log/myapp/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies><SizeBasedTriggeringPolicy size="10MB"/></Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.example" level="DEBUG" additivity="false"><AppenderRef ref="Console"/></Logger>
<Root level="INFO"><AppenderRef ref="Console"/><AppenderRef ref="RollingFile"/></Root>
</Loggers>
</Configuration>
说明:以上示例均为最小可用配置,可按需增加 MDC、异步 Appender、过滤器等。
三 Ubuntu系统层面的落地与运维
/var/log/myapp/*.log {
daily
rotate 30
compress
missingok
notifempty
create 0644 myapp myapp
sharedscripts
postrotate
systemctl reload myapp.service >/dev/null 2>&1 || true
endscript
}
StandardOutput=journal 或 StandardError=journal 输出;如需落盘,仍建议应用内文件日志+logrotate。四 快速排障与常见坑