欢迎加入DUBBO交流群:259566260
这里将对如何在本身的项目里面开启dubbo框架本身的日志,并对输出的日志进行控制。在讲这些以前,先看看dubbo在处理日志的时候是怎么作的? java
在dubbo框架内全部的日志输出都是经过 LoggerFactory这个静态工厂类来得到Logger的对象实体,而且抽离了一个LoggerAdapter用于对接第三方日志框架,因此就有了JDKLoggerAdapter,Log4jLoggerAdapter,SLF4JLoggerAdapter等一些实现子类,分别对接了不一样Log第三方实现。既然dubbo可以支持这么多log实现,那么这些实如今dubbo中优先级是在呢么样的呢?这里的优先级是只未配置指定的logger提供方的状况下,由dubbo框架本身选择。优先级以下:第三方日志框架 | 优先级 |
Log4j | 最高(默认就用这个) |
SLF4J | 次高(上面没有采用这个) |
Common Logging(jcl就是common logging) | 次低(Log4j和SLF4J在项目中均没有就用这个) |
JDK log | 最低(最后的选择) |
上面说的有和没有是指你的项目classpath下面有没有对应的jar包,若是有则表示支持对应的日志实现。下面粘贴出Dubbo选择日志提供方的代码: spring
// 查找经常使用的日志框架 static { String logger = System.getProperty("dubbo.application.logger"); if ("slf4j".equals(logger)) { setLoggerAdapter(new Slf4jLoggerAdapter()); } else if ("jcl".equals(logger)) { setLoggerAdapter(new JclLoggerAdapter()); } else if ("log4j".equals(logger)) { setLoggerAdapter(new Log4jLoggerAdapter()); } else if ("jdk".equals(logger)) { setLoggerAdapter(new JdkLoggerAdapter()); } else { try { setLoggerAdapter(new Log4jLoggerAdapter()); } catch (Throwable e1) { try { setLoggerAdapter(new Slf4jLoggerAdapter()); } catch (Throwable e2) { try { setLoggerAdapter(new JclLoggerAdapter()); } catch (Throwable e3) { setLoggerAdapter(new JdkLoggerAdapter()); } } } } }
<appender name="dubboAppender" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="E:/dubbo.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n" /> </layout> </appender> <logger name="com.alibaba.dubbo" additivity="false"> <priority value ="info"/> <appender-ref ref="dubboAppender" /> </logger>
public class CustomContextLoaderListener extends ContextLoaderListener { static{ //设置dubbo使用slf4j来记录日志 System.setProperty("dubbo.application.logger","slf4j"); } }
<listener> <listener-class> com.xxx.xxx.CustomContextLoaderListener</listener-class> </listener>
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <substitutionProperty name="LOG_HOME_DUBBO" value="C:/wls/dubbo"/> <timestamp key="byDate" datePattern="yyyyMMdd"/> <!-- dubbo log --> <appender name="dubboRolling" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Encoding>UTF-8</Encoding> <file>${LOG_HOME_DUBBO}/MTP-DUBBO.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME_DUBBO}/DEMO-%d{yyyy-MM-dd}.%i-DUBBO.zip</fileNamePattern> <maxHistory>30</maxHistory> <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <MaxFileSize>100MB</MaxFileSize> </TimeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> <immediateFlush>true</immediateFlush> </encoder> </appender> <logger name="com.alibaba.dubbo" level="DEBUG"> <appender-ref ref="dubboRolling"/> </logger> </configuration>