0:pom.xml中添加依賴
<!--log4j--> <!--
有錯誤時,可能版本不對,或者依賴沒有加全
'org.apache.logging.log4j:log4j-core:2.10.0',
'org.apache.logging.log4j:log4j-api:2.10.0',
'org.apache.logging.log4j:log4j-to-slf4j:2.10.0'
--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version>
</dependency>
1:配置 log4j2.xml到classpath路徑下,名字固定,系統自動加載
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd"> <Configuration status="WARN"> <Appenders> <!--ConsoleAppender輸出器--> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <!-- <span class="comments" /> --><!--FileAppender輸出器--> <File name="MyFile" append="true" fileName="src/main/resources/logs/debug.log" bufferedIO="true" bufferSize="512"> <!--后面各種參數,定義輸出器的行為--> <PatternLayout> <Pattern>%d{MM-dd-yyyy} %p %c{1.} [%t] %m%n</Pattern> </PatternLayout> </File> </Appenders> <Loggers> <Logger name="test" level="debug"> <AppenderRef ref="MyFile"/> </Logger> <Logger name="test" level="debug"> <AppenderRef ref="Console"/> </Logger> </Loggers> <Loggers> <root level="debug"> <!--如果沒有配置時,就使用這個默認配置--> <AppenderRef ref="Console"/> </root> </Loggers> </Configuration>
2:在工程中使用logger。
package test; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class LogTest { /** * @param args * @throws IOException * @throws FileNotFoundException */ public static void main(String[] args) throws FileNotFoundException, IOException { Logger log=LogManager.getLogger(LogTest.class); log.trace("trace"); log.debug("debug"); log.info("info"); log.warn("warn"); log.error("error"); log.fatal("fatal"); } }
3:成功
一個比較全面的配置,定義不同輸出級別
<?xml version="1.0" encoding="UTF-8"?> <!--日志級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status,這個用於設置log4j2自身內部的信息輸出,可以不設置,當設置成trace時,你會看到log4j2內部各種詳細輸出--> <!--monitorInterval:Log4j能夠自動檢測修改配置 文件和重新配置本身,設置間隔秒數--> <configuration status="WARN" monitorInterval="30"> <!--先定義所有的appender--> <appenders> <!--這個輸出控制台的配置--> <console name="Console" target="SYSTEM_OUT"> <!--輸出日志的格式--> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> </console> <!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用--> <File name="log" fileName="src/main/resources/logs/log.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!-- 這個會打印出所有的info及以下級別的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面並進行壓縮,作為存檔--> <RollingFile name="RollingFileInfo" fileName="src/main/resources/logs/info.log" filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"> <!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> </RollingFile> <RollingFile name="RollingFileWarn" fileName="src/main/resources/logs/warn.log" filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件,這里設置了20 --> <DefaultRolloverStrategy max="20"/> </RollingFile> </appenders> <!--然后定義logger,只有定義了logger並引入的appender,appender才會生效--> <loggers> <!--過濾掉spring和mybatis的一些無用的DEBUG信息--> <logger name="org.springframework" level="INFO"></logger> <logger name="org.mybatis" level="INFO"></logger> <root level="all"> <appender-ref ref="Console"/> <appender-ref ref="log"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileWarn"/> </root> </loggers> </configuration>
有時候直接將文件打印到硬盤文件里面了,idea工程中的log日志沒加載出來。
參考鏈接 https://www.cnblogs.com/xuange306/p/7999484.html