Anda perlu memperkenalkan sokongan kebergantungan untuk log4j versi yang hendak digunakan.
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> <version>2.11.2</version> </dependency>
springboot mempunyai sokongan terbina dalam untuk log secara lalai, dan kesemuanya perlu dialih keluar, jika tidak, ia akan menjejaskan penggunaan kebergantungan log4j.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
Konfigurasikan konfigurasi yang berkaitan mengikut keperluan anda sendiri untuk konfigurasi. Terdapat perangkap dalam menggunakan sifat Nama fail disesuaikan. Ia tidak akan dinyatakan dalam fail konfigurasi.
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="10 seconds"> <contextName>beordie</contextName> <property name="path" value="E:\file\javalearn\blog\src\main\resources\logs" /> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <encoder> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> <charset>UTF-8</charset> </encoder> </appender> <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${path}/debug.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>15</maxHistory> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log}/info.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>15</maxHistory> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log}/warn.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>15</maxHistory> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log}/error.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>15</maxHistory> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <springProfile name="dev"> <logger name="com.beordie" level="debug"/> </springProfile> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </configuration>
Anda juga perlu menentukan konfigurasi dalam fail konfigurasi projek but spring.
logging: config: classpath:log4j.xml
Lengkapkan konfigurasi keseluruhan log di sini Mulakan projek dan dapatkan objek log melalui pernyataan berikut untuk mencetak log.
private final Logger LOGGING = LoggerFactory.getLogger(ArticleController.class);
Mod log - segerak/tak segerak
log4j2 menyediakan AsyncAppender, AsyncLogger dan dayakan kaedah tidak segerak global seperti berikut:
Mod segerak: Konfigurasi lalai ialah mod segerak, iaitu, tiada AsyncAppender dan AsyncLogger digunakan.
Asynchronous global: Konfigurasi dikonfigurasikan dengan cara segerak Global boleh dihidupkan dengan menambahkan parameter permulaan jvm tanpa mengubah konfigurasi dan aplikasi.
Campur tak segerak: Gunakan konfigurasi campuran Logger tak segerak dan Logger segerak, dan jangan dayakan tak segerak global, iaitu sebahagian daripada konfigurasi Logger ialah AsyncLogger dan sebahagian lagi Logger.
Nota menggunakan mod log:
Jika tak segerak digunakan, adalah disyorkan untuk menggunakan pelaksanaan AsyncLogger dan bukannya AsyncAppender.
Jika anda menggunakan penyegerakan, anda hanya boleh menggunakan salah satu daripada AsyncLogger, AsyncAppender dan global async Anda tidak boleh mengkonfigurasi AsyncAppender dan AsyncLogger pada masa yang sama, atau mendayakan async global apabila async dikonfigurasikan.
Strategi rolling dan clearing log
log4j2 menyediakan strategi rolling berasaskan saiz fail dan strategi rolling berdasarkan masa, atau kedua-duanya boleh digunakan bersama-sama , berikut ialah konfigurasi strategi guling berasaskan saiz dan konfigurasi strategi dwi guling berasaskan saiz/masa:
Strategi guling berasaskan saiz: guling mengikut saiz, dayakan pemampatan, dan kekalkan paling banyak N Fail
Berdasarkan saiz/masa strategi rolling dwi rolling: rolling berdasarkan saiz dan masa, membolehkan pemampatan, mengawal bilangan maksimum log yang disimpan setiap unit masa dan mengawal jumlah masa pengekalan log.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat apabila menyepadukan log4j dengan springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!