maven配置
<properties> <logback.version>1.2.3</logback.version> <slf4j.api.version>1.7.5</slf4j.api.version> <junit.version>4.12</junit.version> </properties>
<dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.api.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency>
</dependencies> |
logback.xml配置
<?xmlversion="1.0"encoding="UTF-8"?>
<!-- debug=false启动时不打印logback信息 --> <!-- scanPeriod为动态加载配置文件的时间间隔 --> <configurationscan="true"scanPeriod="180 seconds">
<!-- 日志级别,按日志输出内容多少排序 --> <!-- TRACE > DEBUG > INFO > WARN > ERROR -->
<!-- ===============静态变量=============== --> <!-- 工程名 --> <propertyname="project.name"value="TestWithMaven"/>
<!-- 日志文件输出目录 --> <propertyname="log.base.path"value="logs"/> <!-- 日志文件附加策略 --> <propertyname="log.appender.append"value="true"/> <!-- 多JVM往同一文件写策略 --> <propertyname="log.appender.prudent"value="true"/> <!-- 日志文件字符集 --> <propertyname="log.charset"value="UTF-8"/> <!-- 日志格式:2017-09-18 17:07:44.108 [ERROR] [main] log.b.LogB:15 - Error: debuging in class Log B --> <propertyname="log.format" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{200}.%method:%line - %msg %n"/>
<!-- 滚动日志每个文件大小 --> <propertyname="rolling.log.max.file.size"value="100KB"/> <!-- 滚动日志保留天数 --> <propertyname="rolling.log.max.history"value="90"/> <!-- 滚动日志总大小 --> <propertyname="rolling.log.total.size.cap"value="20GB"/> <!-- 滚动日志名称 --> <propertyname="rolling.log.file.name"value="${log.base.path}/${project.name}-rolling"/>
<!-- 窗口滚动日志文件起始值 --> <propertyname="window.rolling.log.min.index"value="1"/> <!-- 窗口滚动日志文件起始值 --> <propertyname="window.rolling.log.max.index"value="10"/> <!-- 窗口滚动日志每个文件大小 --> <propertyname="window.rolling.log.max.file.size"value="100KB"/> <!-- 窗口滚动日志名称 --> <propertyname="window.rolling.log.file.name"value="${log.base.path}/${project.name}-window"/>
<!-- ===============Appender配置=============== --> <!-- 控制台输出 --> <appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder> <pattern>${log.format}</pattern> <charset>${log.charset}</charset> </encoder> </appender>
<!-- 文件输出 --> <!-- <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <append>${log.appender.append}</append> <prudent>${log.appender.prudent}</prudent> <file>${log.base.path}/${project.name}-file.log</file> <encoder> <pattern>${log.format}</pattern> <charset>${log.charset}</charset> </encoder> </appender> -->
<!-- 基于时间的回滚文件输出 --> <appendername="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>${log.appender.append}</append> <prudent>${log.appender.prudent}</prudent> <File>${rolling.log.file.name}.log</File> <rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${rolling.log.file.name}-%d{yyyy-MM-dd}.log </fileNamePattern> <maxFileSize>${rolling.log.max.file.size}</maxFileSize> <maxHistory>${rolling.log.max.history}</maxHistory> <totalSizeCap>${rolling.log.total.size.cap}</totalSizeCap> </rollingPolicy> <!-- 必须指定,否则不会往文件输出内容 --> <encoder> <pattern>${log.format}</pattern> <charset>${log.charset}</charset> </encoder> </appender>
<!-- 基于窗口的回滚文件输出 --> <appendername="WINDOW" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>${log.appender.append}</append> <File>${window.rolling.log.file.name}.log</File> <rollingPolicyclass="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${window.rolling.log.file.name}-%i.log.zip</fileNamePattern> <minIndex>${window.rolling.log.min.index}</minIndex> <maxIndex>${window.rolling.log.max.index}</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>${window.rolling.log.max.file.size}</maxFileSize> </triggeringPolicy> <!-- 必须指定,否则不会往文件输出内容 --> <encoder> <pattern>${log.format}</pattern> <charset>${log.charset}</charset> </encoder> </appender>
<!-- ===============Logger配置=============== --> <!-- 所有logger的始祖是ROOT,默认会继承ROOT的配置,因此在其他logger中的日志会打印两次。 解决:logger的additivity属性设置为false --> <loggername="log.a"additivity="false"> <levelvalue="TRACE"/> <appender-refref="STDOUT"/> </logger> <loggername="log.b"additivity="false"> <levelvalue="DEBUG"/> <appender-refref="STDOUT"/> <appender-refref="ROLLING"/> </logger> <loggername="log.c"additivity="false"> <levelvalue="DEBUG"/> <appender-refref="WINDOW"/> </logger>
<rootlevel="DEBUG"> <appender-refref="STDOUT"/> <appender-refref="WINDOW"/> </root>
</configuration>
|
代码
package log;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
import log.a.LogA; import log.b.LogB; import log.c.LogC;
public class LogMain { private staticfinal Logger log = LoggerFactory.getLogger(LogMain.class);
public staticvoid main(String[] args) {
LogA a = new LogA(); LogB b = new LogB(); LogC c = new LogC();
//TRACE < DEBUG < INFO < WARN < ERROR log.trace("Main trace start"); log.debug("Main debug start"); log.info("Main info start"); log.warn("Main warn start"); log.error("Main error start");
a.logWithA(); b.logWithB(); c.logWithC(); } }
-------------------------------------------------------------------------------------------------------------
package log.a;
-------------------------------------------------------------------------------------------------------------
package log.b;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
public class LogB { private staticfinal Logger log = LoggerFactory.getLogger(LogB.class);
public void logWithB() { String wordI ="infoing in class Log B 中国"; String wordD ="debuging in class Log B 中国";
log.debug("Debug: {}",wordD); log.info("Info: {}",wordI); log.error("Error: {}",wordD); } } |
-------------------------------------------------------------------------------------------------------------
package log.c;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogC {
private staticfinal Logger log = LoggerFactory.getLogger(LogC.class);
public void logWithC() {
String wordI ="infoing in class Log C 中国";
String wordD ="debuging in class Log C 中国";
log.debug("Debug: {}",wordD);
log.info("Info: {}",wordI);
log.warn("Warn: {}",wordD);
}
}