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);
}
}