Browse Source

定义logback的Layout以及Converter,用于日志打印

dark 4 years ago
parent
commit
11cf3853c7

+ 3 - 1
src/main/java/cn/iocoder/dashboard/framework/tracer/core/util/TracerUtils.java

@@ -30,7 +30,9 @@ public class TracerUtils {
             }
         } catch (Throwable ignore) {}
         // TODO 芋艿 多次调用会问题
-        return UUID.randomUUID().toString();
+
+        // TODO 麻薯 定义一个给外部扩展的接口,默认在未接入Skywalking时,输出UUID
+        return "UUID:" + UUID.randomUUID().toString();
     }
 
 }

+ 42 - 0
src/main/java/cn/iocoder/dashboard/framework/tracer/skywalking/LocalLogbackPatternConverter.java

@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package cn.iocoder.dashboard.framework.tracer.skywalking;
+
+import ch.qos.logback.classic.pattern.ClassicConverter;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils;
+
+/**
+ * Created by mashu on 2021/3/6.
+ */
+public class LocalLogbackPatternConverter extends ClassicConverter {
+    /**
+     * 作为默认的方式, 从{@link TracerUtils}中获取traceId,
+     * 需要用这个去替代logback的Layout,
+     * 同时避免了sky-walking agent生效的情况下仍然输出定值的问题.
+     *
+     * @param iLoggingEvent the event
+     * @return the traceId: UUID, or the real traceId.
+     */
+    @Override
+    public String convert(ILoggingEvent iLoggingEvent) {
+        return TracerUtils.getTraceId();
+    }
+}

+ 36 - 0
src/main/java/cn/iocoder/dashboard/framework/tracer/skywalking/TraceIdPatternLogbackLayout.java

@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package cn.iocoder.dashboard.framework.tracer.skywalking;
+
+import ch.qos.logback.classic.PatternLayout;
+
+/**
+ * Based on the logback-compoenent convert register mechanism,
+ * register {@link LocalLogbackPatternConverter} as a new convert, match to "tid".
+ * You can use "%tid" in logback config file, "Pattern" section.
+ * If sky-walking agent is not active mode, it will use UUID as tid.
+ * <p>
+ * Created by mashu on 2021/3/6.
+ */
+public class TraceIdPatternLogbackLayout extends PatternLayout {
+    static {
+        defaultConverterMap.put("tid", LocalLogbackPatternConverter.class.getName());
+    }
+}

+ 55 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,55 @@
+<configuration>   
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">     
+        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+            <layout class="cn.iocoder.dashboard.framework.tracer.skywalking.TraceIdPatternLogbackLayout">
+                <pattern>%d{ISO8601} | %tid | %thread | %-5level | %msg%n</pattern>
+            </layout>
+        </encoder>
+    </appender>
+    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <FileNamePattern>./logs/ruoyi-vue-pro-%d{yyyy-MM-dd_HH}.log</FileNamePattern>
+            <MaxHistory>3</MaxHistory>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+                <pattern>%d{ISO8601} | %tid | %thread | %-5level | %msg%n</pattern>
+            </layout>
+        </encoder>
+        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <MaxFileSize>10MB</MaxFileSize>
+        </triggeringPolicy>
+    </appender>
+    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>0</discardingThreshold>
+        <queueSize>10</queueSize>
+        <appender-ref ref="FILE"/>
+    </appender>
+
+    <springProfile name="dev">
+        <logger name="cn.iocoder.dashboard" level="INFO" additivity="false">
+            <appender-ref ref="STDOUT"/>
+            <appender-ref ref="ASYNC"/>
+        </logger>
+    </springProfile>
+    <springProfile name="local">
+        <logger name="cn.iocoder.dashboard" level="INFO" additivity="false">
+            <appender-ref ref="STDOUT"/>
+        </logger>
+    </springProfile>
+    <springProfile name="default">
+        <logger name="cn.iocoder.dashboard" level="INFO" additivity="false">
+            <appender-ref ref="STDOUT"/>
+            <appender-ref ref="ASYNC"/>
+        </logger>
+    </springProfile>
+
+    <root level="DEBUG">      
+        <appender-ref ref="STDOUT"/>   
+        <appender-ref ref="ASYNC"/> 
+    </root>
+
+    <logger name="cn.iocoder.dashboard" level="INFO">
+        <appender-ref ref="STDOUT"/>
+    </logger>
+</configuration>