在Ubuntu系统中,Java应用程序的日志级别设置主要依赖所使用的日志框架(如Log4j、Logback、java.util.logging等)。以下是常见框架的具体配置方法,覆盖从基础到进阶的场景:
在配置前,需先确定项目使用的日志框架(可通过pom.xml(Maven)或build.gradle(Gradle)中的依赖判断,或检查项目是否包含框架的配置文件,如log4j.properties、logback.xml、logging.properties)。
src/main/resources目录下创建log4j.properties文件(若已存在则修改)。# 设置根日志级别为INFO,输出到控制台(stdout)和文件(file)
log4j.rootLogger=INFO, stdout, file
# 控制台输出配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# 文件输出配置
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/var/log/myapp.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# 设置com.yourpackage包的日志级别为DEBUG(更详细的调试信息)
log4j.logger.com.yourpackage=DEBUG
resources目录下的文件)。java -jar your-application.jar
启动应用时,通过-D参数指定Log4j配置文件路径:
java -Dlog4j.configuration=file:/path/to/log4j.properties -jar your-application.jar
src/main/resources目录下创建logback.xml文件(若已存在则修改)。<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出Appender -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 文件输出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 %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 设置根日志级别为INFO,输出到控制台和文件 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
<!-- 设置com.yourpackage包的日志级别为DEBUG -->
<logger name="com.yourpackage" level="DEBUG" additivity="false" />
</configuration>
logback.xml文件。java -jar your-application.jar
若不想修改配置文件,可通过环境变量临时设置根日志级别:
export LOGBACK_ROOT_LOGLEVEL=DEBUG
java -jar your-application.jar
src/main/resources目录下创建logging.properties文件(若已存在则修改)。# 设置全局日志级别为INFO
.level=INFO
# 配置控制台Handler(输出到控制台)
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=INFO
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %2$s %5$s%6$s%n
# 配置文件Handler(输出到文件)
java.util.logging.FileHandler.pattern=/var/log/myapp.log
java.util.logging.FileHandler.limit=50000 # 单个文件最大大小(字节)
java.util.logging.FileHandler.count=5 # 保留的文件数量
java.util.logging.FileHandler.level=INFO
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java -Djava.util.logging.config.file=/path/to/logging.properties -jar your-application.jar
在Java类中直接设置日志级别:
import java.util.logging.Logger;
import java.util.logging.Level;
public class MyApplication {
private static final Logger logger = Logger.getLogger(MyApplication.class.getName());
public static void main(String[] args) {
// 设置根日志级别为INFO
Logger.getLogger("").setLevel(Level.INFO);
// 设置com.yourpackage包的日志级别为FINE(DEBUG级别)
Logger.getLogger("com.yourpackage").setLevel(Level.FINE);
logger.info("This is an info message");
logger.fine("This is a debug message"); // 仅在设置为FINE及以上时输出
}
}
日志级别从低到高依次为:
src/main/resources)中,否则框架无法加载。INFO或WARN级别,避免过多的DEBUG日志影响性能;开发环境使用DEBUG或TRACE级别,便于排查问题。RollingFileAppender(Log4j/Logback)或FileHandler的limit/count参数(JUL),避免日志文件过大占用磁盘空间。通过以上步骤,可根据项目需求灵活设置Ubuntu下Java应用的日志级别,实现对日志输出的精准控制。