Explorar el Código

使用logback

tianyun hace 3 años
padre
commit
db9e9f86ae

+ 0 - 13
springboot-main/pom.xml

@@ -50,7 +50,6 @@
         </plugins>
     </build>
     <properties>
-        <log4j2.version>2.17.0</log4j2.version>
         <jackson.version>2.11.0</jackson.version>
     </properties>
     <dependencies>
@@ -80,18 +79,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
-        <!--log4j2 依赖-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-log4j2</artifactId>
-        </dependency>
-        <!--异步日志依赖-->
-        <dependency>
-            <groupId>com.lmax</groupId>
-            <artifactId>disruptor</artifactId>
-            <version>3.3.7</version>
-        </dependency>
-
 
         <!-- lombok -->
         <dependency>

+ 0 - 3
springboot-main/src/main/java/com/alvin/Application.java

@@ -9,15 +9,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 @MapperScan("com.alvin.dao.mapper")
 public class Application implements CommandLineRunner {
     public static void main(String[] args) {
-        //日志异步
-        System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
         SpringApplication.run(Application.class, args);
     }
 
 
     @Override
     public void run(String... args) throws Exception {
-
         System.out.println("启动成功");
     }
 

+ 0 - 67
springboot-main/src/main/resources/log4j2.xml

@@ -1,67 +0,0 @@
-<?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">
-    <properties>
-        <property name="logDir" value="log"/>
-    </properties>
-    <!--先定义所有的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="${logDir}/test.log" append="false">
-            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
-        </File>
-        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
-        <RollingRandomAccessFile name="RollingFileInfo" fileName="${logDir}/info.log"
-                     filePattern="${logDir}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"
-                                 immediateFlush="false">
-            <!--控制台只输出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="500 MB"/>
-            </Policies>
-        </RollingRandomAccessFile>
-        <RollingRandomAccessFile name="RollingFileWarn" fileName="${logDir}/warn.log"
-                     filePattern="${logDir}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"
-                                 immediateFlush="false">
-            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
-            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
-            <Policies>
-                <TimeBasedTriggeringPolicy/>
-                <SizeBasedTriggeringPolicy size="500 MB"/>
-            </Policies>
-            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
-            <DefaultRolloverStrategy max="20"/>
-        </RollingRandomAccessFile>
-        <RollingRandomAccessFile name="RollingFileError" fileName="${logDir}/error.log"
-                     filePattern="${logDir}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"
-                                 immediateFlush="false">
-            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
-            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
-            <Policies>
-                <TimeBasedTriggeringPolicy/>
-                <SizeBasedTriggeringPolicy size="500 MB"/>
-            </Policies>
-        </RollingRandomAccessFile>
-    </appenders>
-    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
-    <loggers>
-        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
-        <logger name="org.springframework" level="INFO"/>
-        <logger name="org.mybatis" level="INFO"/>
-        <root level="all" includeLocation="true">
-            <appender-ref ref="Console"/>
-            <appender-ref ref="RollingFileInfo"/>
-            <appender-ref ref="RollingFileWarn"/>
-            <appender-ref ref="RollingFileError"/>
-        </root>
-    </loggers>
-</configuration>

+ 143 - 0
springboot-main/src/main/resources/logback.xml

@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="true" scanPeriod="30 seconds">
+
+    <jmxConfigurator/>
+    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss:SSS}:[%c:%L] [%thread] %-5level %msg%n"/>
+    <property name="log.home" value="./log"/>
+    <property name="log.level" value="INFO"/>
+    <property name="log.max.file.size" value="100MB"/>
+    <property name="log.max.history" value="72"/>
+    <!-- 控制台输出日志 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+    <!--文件日志 -->
+    <appender name="FILE-INFO"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <OnMatch>ACCEPT</OnMatch>
+            <OnMismatch>DENY</OnMismatch>
+        </filter>
+        <File>${log.home}/info.log</File>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <FileNamePattern>${log.home}/%d{yyyy-MM-dd}/info/info-%d{yyyy-MM-dd}-.log</FileNamePattern>
+            <MaxHistory>${log.max.history}</MaxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${FILE_LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+    <!-- WARN文件输出日志 (文件小时大小策略进行文件输出,超过指定大小对文件备份) -->
+    <appender name="FILE-WARN"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>WARN</level>
+            <OnMatch>ACCEPT</OnMatch>
+            <OnMismatch>DENY</OnMismatch>
+        </filter>
+        <File>${log.home}/warn.log</File>
+        <append>true</append>
+        <!--日志归档策略 -->
+        <rollingPolicy
+                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <FileNamePattern>${log.home}/%d{yyyy-MM-dd}/warn/warn-%d{yyyy-MM-dd}-%i.log
+            </FileNamePattern>
+            <MaxFileSize>${log.max.file.size}</MaxFileSize>
+            <MaxHistory>${log.max.history}</MaxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${FILE_LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+    <!-- ERROR文件输出日志 (文件小时大小策略进行文件输出,超过指定大小对文件备份) -->
+    <appender name="FILE-ERROR"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <OnMatch>ACCEPT</OnMatch>
+            <OnMismatch>DENY</OnMismatch>
+        </filter>
+        <File>${log.home}/error.log</File>
+        <append>true</append>
+        <!--日志归档策略 -->
+        <rollingPolicy
+                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <FileNamePattern>${log.home}/%d{yyyy-MM-dd}/error/error-%d{yyyy-MM-dd}-%i.log
+            </FileNamePattern>
+            <MaxFileSize>${log.max.file.size}</MaxFileSize>
+            <MaxHistory>${log.max.history}</MaxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${FILE_LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 异步输出,异步的log片段必须在同步段后面,否则不起作用 -->
+    <appender name="FILE-INFO-ASYNC" class="ch.qos.logback.classic.AsyncAppender">
+        <!--阙值  当队列大小低于这个将丢弃日志 为0的话用不丢弃 -->
+        <discardingThreshold>0</discardingThreshold>
+        <!-- 队列的大小-->
+        <queueSize>1024</queueSize>
+        <!-- 不设置neverBolck的话调用的是put方法是阻塞的,设置后调用offer方法是不阻塞的-->
+        <neverBlock>true</neverBlock>
+        <appender-ref ref="FILE-INFO"/>
+    </appender>
+    <appender name="FILE-WARN-ASYNC" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>0</discardingThreshold>
+        <queueSize>512</queueSize>
+        <neverBlock>true</neverBlock>
+        <appender-ref ref="FILE-WARN"/>
+    </appender>
+    <appender name="FILE-ERROR-ASYNC" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>0</discardingThreshold>
+        <queueSize>512</queueSize>
+        <neverBlock>true</neverBlock>
+        <appender-ref ref="FILE-ERROR"/>
+    </appender>
+
+
+    <!--文件日志 -->
+    <root level="${log.level}">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="FILE-INFO-ASYNC"/>
+        <appender-ref ref="FILE-WARN-ASYNC"/>
+        <appender-ref ref="FILE-ERROR-ASYNC"/>
+    </root>
+
+    <!-- 配置UserController日志输出至单独的日志文件中 -->
+    <appender name="UserController" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!--日志归档策略 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${log.home}/%d{yyyy-MM-dd}/info/userController-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
+            <MaxFileSize>${log.max.file.size}</MaxFileSize>
+            <MaxHistory>${log.max.history}</MaxHistory>
+        </rollingPolicy>
+        <encoder
+                class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+            <!-- 日志输出编码 -->
+            <layout class="ch.qos.logback.classic.PatternLayout">
+                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
+                <pattern>${FILE_LOG_PATTERN}</pattern>
+            </layout>
+        </encoder>
+        <!--日志文件最大的大小-->
+        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <MaxFileSize>10MB</MaxFileSize>
+        </triggeringPolicy>-->
+    </appender>
+
+    <!--需要将日志单独输出的包路径-->
+    <logger name="com.leaveword.controller.UserController" additivity="false">
+        <appender-ref ref="UserController"/>
+        <!--同时控制台打印-->
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+
+
+</configuration>