一、仅LOG4J2,只需要加上这个包即可。

1.在POM.XML中引入如下包。

<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.12.1</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.12.1</version>
</dependency>

2.在resource目录下新建log4j2.xml,在log4j初始化context时会自动寻找resource下的log4j2.xml文件进行配置,其它配置无效。(log4j2.properties,lo4j2.json,log4j2.yaml这几个都可以)

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--自定义命名格式:%d:发生时间,%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2020-02-20 22:10:28,921%F:输出所在的类文件名%t:线程名称%p:日志级别%c:日志消息所在类名%m:消息内容%M:输出所在函数名%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。%l:执行的函数名(类名称:行号)com.core.LogHelper.aroundService(LogHelper.java:32)%n:换行%i:从1开始自增数字%-5level:输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0“${sys:user.home}”是HOME目录 如:C:\Users\heave, 此处指定任意目录如:D:\logs
-->
<!--设置log4j2自身log级别为warn,每间隔30秒数自动检测配置是否发生修改,并重新配置-->
<configuration status="DEBUG" monitorInterval="30"><Properties><!-- 日志显示模板,显示内容的格式如下 --><!-- [21:55:33:047] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Initializing Spring embedded WebApplicationContext --><Property name="log_pattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><!-- 保存日志文件目录 --><!--<Property name="file_path" value="${sys:user.home}/logs"/>--><Property name="file_path" value="./logs"/><!-- 日志文件的最大容量,超过该值就进行备份 --><Property name="file_max_size" value="30MB"/><!-- 备份的文件夹名称 如下为:2020-02 --><Property name="backup_folder" value="$${date:yyyy-MM}"/><!-- 备份文件的后缀,日志文件超过file_max_size会备份到filePattern指定的目录下 --><Property name="backup_file_suffix" value="-%d{yyyy-MM-dd}-%i.log"/></Properties><!--定义appender--><appenders><!--控制台的输出配置--><console name="Console" target="SYSTEM_OUT"><!-- 设置控制台只输出info及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) --><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/><!--输出日志的格式--><PatternLayout pattern="${log_pattern}"/></console><!-- 所有的日志信息会打印到此文件中,append=false每次启动程序会自动清空 --><!--<File name="all" fileName="${file_path}/all.log" append="true">--><!--<PatternLayout pattern="${log_pattern}"/>--><!--</File>--><!--该RollingFile存储INFO级别的日志,默认存储到 fileName 文件中超过SizeBasedTriggeringPolicy的设定值,则存储到 filePattern 文件中--><RollingFile name="RollingFileDebug" fileName="${file_path}/debug.log"filePattern="${file_path}/${backup_folder}/debug${backup_file_suffix}"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/><!-- 写入日志文件的模板 --><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${file_max_size}"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,超过该数量,会滚动删除前面的记录 --><DefaultRolloverStrategy max="20"/></RollingFile><RollingFile name="RollingFileInfo" fileName="${file_path}/info.log"filePattern="${file_path}/${backup_folder}/info${backup_file_suffix}"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/><!-- 写入日志文件的模板 --><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${file_max_size}"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,超过该数量,会滚动删除前面的记录 --><DefaultRolloverStrategy max="20"/></RollingFile><RollingFile name="RollingFileWarn" fileName="${file_path}/warn.log"filePattern="${file_path}/${backup_folder}/warn${backup_file_suffix}"><ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${file_max_size}"/></Policies></RollingFile><RollingFile name="RollingFileError" fileName="${file_path}/error.log"      filePattern="${file_path}/${backup_folder}/error${backup_file_suffix}"><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${file_max_size}"/></Policies></RollingFile></appenders><!-- 只有定义了logger并使用appender-ref,appender才会生效 --><loggers><!--过滤掉spring和hibernate的一些无用的debug信息--><logger name="org.springframework" level="TRACE"/><logger name="org.mybatis" level="INFO"><!-- 添加如下设置,控制台会再打印一次 --><AppenderRef ref="Console"/></logger><root level="DEBUG"><appender-ref ref="Console"/><appender-ref ref="RollingFileDebug"/><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/></root></loggers></configuration>

3.1.在log4j2-core中会强制写死在resource目录下寻找带log4j2的配置。由spring-jcl包中的apache通用日志库调用到LogFactory.getLog(Class<?> clazz)

Log4jAdapter.createLog(name),

org.apache.commons.logging.LogAdapter
public static Log createLog(String name) {switch (logApi) {case LOG4J:return Log4jAdapter.createLog(name);case SLF4J_LAL:return Slf4jAdapter.createLocationAwareLog(name);case SLF4J:return Slf4jAdapter.createLog(name);default:// Defensively use lazy-initializing adapter class here as well since the// java.logging module is not present by default on JDK 9. We are requiring// its presence if neither Log4j nor SLF4J is available; however, in the// case of Log4j or SLF4J, we are trying to prevent early initialization// of the JavaUtilLog adapter - e.g. by a JVM in debug mode - when eagerly// trying to parse the bytecode for all the cases of this switch clause.return JavaUtilAdapter.createLog(name);}}

最后调用到Log4jAdapter适配器的创建LOG。

private static class Log4jAdapter {public static Log createLog(String name) {return new Log4jLog(name);}}

上述中间会调用log4j2-api中的logcontext 进行初始化。


private static final LoggerContext loggerContext =LogManager.getContext(Log4jLog.class.getClassLoader(), false);private final ExtendedLogger logger;public Log4jLog(String name) {LoggerContext context = loggerContext;if (context == null) {// Circular call in early-init scenario -> static field not initialized yetcontext = LogManager.getContext(Log4jLog.class.getClassLoader(), false);}this.logger = context.getLogger(name);}

最终会调用到log4j2-core中的org.apache.logging.log4j.core.LoggerContext.reconfigure接口读取log4j2配置进行初始化。

log4j2内部的日志输出器为org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely,可以在这里面进行断点,查看日志加载流程。以下是加载流程。

2021-07-13 16:44:15,619 RMI TCP Connection(3)-127.0.0.1 DEBUG Apache Log4j Core 2.12.1 initializing configuration XmlConfiguration[location=E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml]
2021-07-13 16:44:15,627 RMI TCP Connection(3)-127.0.0.1 DEBUG Installed 1 script engine
2021-07-13 16:44:15,946 RMI TCP Connection(3)-127.0.0.1 DEBUG Oracle Nashorn version: 1.8.0_161, language: ECMAScript, threading: Not Thread Safe, compile: true, names: [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript], factory class: jdk.nashorn.api.scripting.NashornScriptEngineFactory
2021-07-13 16:44:15,947 RMI TCP Connection(3)-127.0.0.1 DEBUG PluginManager 'Core' found 118 plugins
2021-07-13 16:44:15,947 RMI TCP Connection(3)-127.0.0.1 DEBUG PluginManager 'Level' found 0 plugins
2021-07-13 16:44:15,956 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2021-07-13 16:44:15,977 RMI TCP Connection(3)-127.0.0.1 DEBUG PluginManager 'TypeConverter' found 26 plugins
2021-07-13 16:44:15,993 RMI TCP Connection(3)-127.0.0.1 DEBUG createProperty(name="log_pattern", value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n")
2021-07-13 16:44:15,993 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2021-07-13 16:44:15,993 RMI TCP Connection(3)-127.0.0.1 DEBUG createProperty(name="file_path", value="./logs")
2021-07-13 16:44:15,994 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2021-07-13 16:44:15,994 RMI TCP Connection(3)-127.0.0.1 DEBUG createProperty(name="file_max_size", value="30MB")
2021-07-13 16:44:15,995 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2021-07-13 16:44:15,996 RMI TCP Connection(3)-127.0.0.1 DEBUG createProperty(name="backup_folder", value="${date:yyyy-MM}")
2021-07-13 16:44:15,999 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2021-07-13 16:44:15,999 RMI TCP Connection(3)-127.0.0.1 DEBUG createProperty(name="backup_file_suffix", value="-%d{yyyy-MM-dd}-%i.log")
2021-07-13 16:44:16,000 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=properties, class=org.apache.logging.log4j.core.config.PropertiesPlugin].
2021-07-13 16:44:16,007 RMI TCP Connection(3)-127.0.0.1 DEBUG configureSubstitutor(={log_pattern=[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n, file_path=./logs, file_max_size=30MB, backup_folder=${date:yyyy-MM}, backup_file_suffix=-%d{yyyy-MM-dd}-%i.log}, Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml))
2021-07-13 16:44:16,007 RMI TCP Connection(3)-127.0.0.1 DEBUG PluginManager 'Lookup' found 13 plugins
2021-07-13 16:44:16,009 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2021-07-13 16:44:16,015 RMI TCP Connection(3)-127.0.0.1 DEBUG createFilter(level="DEBUG", onMatch="ACCEPT", onMismatch="DENY")
2021-07-13 16:44:16,016 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2021-07-13 16:44:16,022 RMI TCP Connection(3)-127.0.0.1 DEBUG PatternLayout$Builder(pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n", PatternSelector=null, Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2021-07-13 16:44:16,024 RMI TCP Connection(3)-127.0.0.1 DEBUG PluginManager 'Converter' found 44 plugins
2021-07-13 16:44:16,047 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender].
2021-07-13 16:44:16,058 RMI TCP Connection(3)-127.0.0.1 DEBUG ConsoleAppender$Builder(target="SYSTEM_OUT", follow="null", direct="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout([%d{HH:mm:ss:SSS}] [%p] - %l - %m%n), name="Console", Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), ThresholdFilter(DEBUG), ={})
2021-07-13 16:44:16,061 RMI TCP Connection(3)-127.0.0.1 DEBUG Starting OutputStreamManager SYSTEM_OUT.false.false
2021-07-13 16:44:16,061 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2021-07-13 16:44:16,061 RMI TCP Connection(3)-127.0.0.1 DEBUG createFilter(level="DEBUG", onMatch="ACCEPT", onMismatch="DENY")
2021-07-13 16:44:16,062 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2021-07-13 16:44:16,062 RMI TCP Connection(3)-127.0.0.1 DEBUG PatternLayout$Builder(pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n", PatternSelector=null, Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2021-07-13 16:44:16,063 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2021-07-13 16:44:16,068 RMI TCP Connection(3)-127.0.0.1 DEBUG TimeBasedTriggeringPolicy$Builder(interval="null", modulate="null", maxRandomDelay="null")
2021-07-13 16:44:16,069 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2021-07-13 16:44:16,069 RMI TCP Connection(3)-127.0.0.1 DEBUG createPolicy(size="30MB")
2021-07-13 16:44:16,071 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2021-07-13 16:44:16,072 RMI TCP Connection(3)-127.0.0.1 DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)})
2021-07-13 16:44:16,072 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2021-07-13 16:44:16,077 RMI TCP Connection(3)-127.0.0.1 DEBUG DefaultRolloverStrategy$Builder(max="20", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="null", tempCompressedFilePattern="null", Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml))
2021-07-13 16:44:16,078 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2021-07-13 16:44:16,081 RMI TCP Connection(3)-127.0.0.1 DEBUG RollingFileAppender$Builder(fileName="./logs/debug.log", filePattern="./logs/2021-07/debug-%d{yyyy-MM-dd}-%i.log", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=20, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", filePermissions="null", fileOwner="null", fileGroup="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout([%d{HH:mm:ss:SSS}] [%p] - %l - %m%n), name="RollingFileDebug", Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), ThresholdFilter(DEBUG), ={})
2021-07-13 16:44:16,091 RMI TCP Connection(3)-127.0.0.1 DEBUG Returning file creation time for D:\software2\tomcat\apache-tomcat-8.5.59-windows-x64\apache-tomcat-8.5.59\bin\.\logs\debug.log
2021-07-13 16:44:16,091 RMI TCP Connection(3)-127.0.0.1 DEBUG Starting RollingFileManager ./logs/debug.log
2021-07-13 16:44:16,094 RMI TCP Connection(3)-127.0.0.1 DEBUG PluginManager 'FileConverter' found 2 plugins
2021-07-13 16:44:16,097 RMI TCP Connection(3)-127.0.0.1 DEBUG Setting prev file time to 2021-07-13T16:22:18.003+0800
2021-07-13 16:44:16,102 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)])
2021-07-13 16:44:16,103 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false)
2021-07-13 16:44:16,104 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy SizeBasedTriggeringPolicy(size=31457280)
2021-07-13 16:44:16,104 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2021-07-13 16:44:16,105 RMI TCP Connection(3)-127.0.0.1 DEBUG createFilter(level="INFO", onMatch="ACCEPT", onMismatch="DENY")
2021-07-13 16:44:16,105 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2021-07-13 16:44:16,106 RMI TCP Connection(3)-127.0.0.1 DEBUG PatternLayout$Builder(pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n", PatternSelector=null, Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2021-07-13 16:44:16,107 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2021-07-13 16:44:16,108 RMI TCP Connection(3)-127.0.0.1 DEBUG TimeBasedTriggeringPolicy$Builder(interval="null", modulate="null", maxRandomDelay="null")
2021-07-13 16:44:16,108 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2021-07-13 16:44:16,109 RMI TCP Connection(3)-127.0.0.1 DEBUG createPolicy(size="30MB")
2021-07-13 16:44:16,109 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2021-07-13 16:44:16,110 RMI TCP Connection(3)-127.0.0.1 DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)})
2021-07-13 16:44:16,110 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2021-07-13 16:44:16,110 RMI TCP Connection(3)-127.0.0.1 DEBUG DefaultRolloverStrategy$Builder(max="20", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="null", tempCompressedFilePattern="null", Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml))
2021-07-13 16:44:16,111 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2021-07-13 16:44:16,111 RMI TCP Connection(3)-127.0.0.1 DEBUG RollingFileAppender$Builder(fileName="./logs/info.log", filePattern="./logs/2021-07/info-%d{yyyy-MM-dd}-%i.log", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=20, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", filePermissions="null", fileOwner="null", fileGroup="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout([%d{HH:mm:ss:SSS}] [%p] - %l - %m%n), name="RollingFileInfo", Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), ThresholdFilter(INFO), ={})
2021-07-13 16:44:16,113 RMI TCP Connection(3)-127.0.0.1 DEBUG Returning file creation time for D:\software2\tomcat\apache-tomcat-8.5.59-windows-x64\apache-tomcat-8.5.59\bin\.\logs\info.log
2021-07-13 16:44:16,113 RMI TCP Connection(3)-127.0.0.1 DEBUG Starting RollingFileManager ./logs/info.log
2021-07-13 16:44:16,113 RMI TCP Connection(3)-127.0.0.1 DEBUG PluginManager 'FileConverter' found 2 plugins
2021-07-13 16:44:16,114 RMI TCP Connection(3)-127.0.0.1 DEBUG Setting prev file time to 2021-07-13T16:22:18.026+0800
2021-07-13 16:44:16,114 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)])
2021-07-13 16:44:16,114 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false)
2021-07-13 16:44:16,114 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy SizeBasedTriggeringPolicy(size=31457280)
2021-07-13 16:44:16,114 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2021-07-13 16:44:16,115 RMI TCP Connection(3)-127.0.0.1 DEBUG createFilter(level="WARN", onMatch="ACCEPT", onMismatch="DENY")
2021-07-13 16:44:16,115 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2021-07-13 16:44:16,117 RMI TCP Connection(3)-127.0.0.1 DEBUG PatternLayout$Builder(pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n", PatternSelector=null, Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2021-07-13 16:44:16,118 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2021-07-13 16:44:16,118 RMI TCP Connection(3)-127.0.0.1 DEBUG TimeBasedTriggeringPolicy$Builder(interval="null", modulate="null", maxRandomDelay="null")
2021-07-13 16:44:16,118 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2021-07-13 16:44:16,119 RMI TCP Connection(3)-127.0.0.1 DEBUG createPolicy(size="30MB")
2021-07-13 16:44:16,120 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2021-07-13 16:44:16,120 RMI TCP Connection(3)-127.0.0.1 DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)})
2021-07-13 16:44:16,120 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2021-07-13 16:44:16,122 RMI TCP Connection(3)-127.0.0.1 DEBUG RollingFileAppender$Builder(fileName="./logs/warn.log", filePattern="./logs/2021-07/warn-%d{yyyy-MM-dd}-%i.log", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)])), Strategy=null, advertise="null", advertiseUri="null", createOnDemand="null", filePermissions="null", fileOwner="null", fileGroup="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout([%d{HH:mm:ss:SSS}] [%p] - %l - %m%n), name="RollingFileWarn", Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), ThresholdFilter(WARN), ={})
2021-07-13 16:44:16,124 RMI TCP Connection(3)-127.0.0.1 DEBUG Returning file creation time for D:\software2\tomcat\apache-tomcat-8.5.59-windows-x64\apache-tomcat-8.5.59\bin\.\logs\warn.log
2021-07-13 16:44:16,125 RMI TCP Connection(3)-127.0.0.1 DEBUG Starting RollingFileManager ./logs/warn.log
2021-07-13 16:44:16,125 RMI TCP Connection(3)-127.0.0.1 DEBUG PluginManager 'FileConverter' found 2 plugins
2021-07-13 16:44:16,125 RMI TCP Connection(3)-127.0.0.1 DEBUG Setting prev file time to 2021-07-13T16:22:18.036+0800
2021-07-13 16:44:16,126 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)])
2021-07-13 16:44:16,126 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false)
2021-07-13 16:44:16,126 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy SizeBasedTriggeringPolicy(size=31457280)
2021-07-13 16:44:16,127 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2021-07-13 16:44:16,127 RMI TCP Connection(3)-127.0.0.1 DEBUG createFilter(level="ERROR", onMatch="ACCEPT", onMismatch="DENY")
2021-07-13 16:44:16,127 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2021-07-13 16:44:16,128 RMI TCP Connection(3)-127.0.0.1 DEBUG PatternLayout$Builder(pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n", PatternSelector=null, Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2021-07-13 16:44:16,128 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2021-07-13 16:44:16,128 RMI TCP Connection(3)-127.0.0.1 DEBUG TimeBasedTriggeringPolicy$Builder(interval="null", modulate="null", maxRandomDelay="null")
2021-07-13 16:44:16,129 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2021-07-13 16:44:16,129 RMI TCP Connection(3)-127.0.0.1 DEBUG createPolicy(size="30MB")
2021-07-13 16:44:16,129 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2021-07-13 16:44:16,130 RMI TCP Connection(3)-127.0.0.1 DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)})
2021-07-13 16:44:16,130 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2021-07-13 16:44:16,131 RMI TCP Connection(3)-127.0.0.1 DEBUG RollingFileAppender$Builder(fileName="./logs/error.log", filePattern="./logs/2021-07/error-%d{yyyy-MM-dd}-%i.log", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)])), Strategy=null, advertise="null", advertiseUri="null", createOnDemand="null", filePermissions="null", fileOwner="null", fileGroup="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout([%d{HH:mm:ss:SSS}] [%p] - %l - %m%n), name="RollingFileError", Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), ThresholdFilter(ERROR), ={})
2021-07-13 16:44:16,132 RMI TCP Connection(3)-127.0.0.1 DEBUG Returning file creation time for D:\software2\tomcat\apache-tomcat-8.5.59-windows-x64\apache-tomcat-8.5.59\bin\.\logs\error.log
2021-07-13 16:44:16,132 RMI TCP Connection(3)-127.0.0.1 DEBUG Starting RollingFileManager ./logs/error.log
2021-07-13 16:44:16,133 RMI TCP Connection(3)-127.0.0.1 DEBUG PluginManager 'FileConverter' found 2 plugins
2021-07-13 16:44:16,133 RMI TCP Connection(3)-127.0.0.1 DEBUG Setting prev file time to 2021-07-13T16:22:18.045+0800
2021-07-13 16:44:16,134 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=31457280)])
2021-07-13 16:44:16,134 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false)
2021-07-13 16:44:16,134 RMI TCP Connection(3)-127.0.0.1 DEBUG Initializing triggering policy SizeBasedTriggeringPolicy(size=31457280)
2021-07-13 16:44:16,135 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin].
2021-07-13 16:44:16,135 RMI TCP Connection(3)-127.0.0.1 DEBUG createAppenders(={Console, RollingFileDebug, RollingFileInfo, RollingFileWarn, RollingFileError})
2021-07-13 16:44:16,135 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig].
2021-07-13 16:44:16,137 RMI TCP Connection(3)-127.0.0.1 DEBUG createLogger(additivity="true", level="TRACE", name="org.springframework", includeLocation="null", ={}, ={}, Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), Filter=null)
2021-07-13 16:44:16,141 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2021-07-13 16:44:16,141 RMI TCP Connection(3)-127.0.0.1 DEBUG createAppenderRef(ref="Console", level="null", Filter=null)
2021-07-13 16:44:16,142 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig].
2021-07-13 16:44:16,143 RMI TCP Connection(3)-127.0.0.1 DEBUG createLogger(additivity="true", level="INFO", name="org.mybatis", includeLocation="null", ={Console}, ={}, Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), Filter=null)
2021-07-13 16:44:16,144 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender-ref, class=org.apache.logging.log4j.core.config.AppenderRef].
2021-07-13 16:44:16,144 RMI TCP Connection(3)-127.0.0.1 DEBUG createAppenderRef(ref="Console", level="null", Filter=null)
2021-07-13 16:44:16,144 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender-ref, class=org.apache.logging.log4j.core.config.AppenderRef].
2021-07-13 16:44:16,145 RMI TCP Connection(3)-127.0.0.1 DEBUG createAppenderRef(ref="RollingFileDebug", level="null", Filter=null)
2021-07-13 16:44:16,145 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender-ref, class=org.apache.logging.log4j.core.config.AppenderRef].
2021-07-13 16:44:16,145 RMI TCP Connection(3)-127.0.0.1 DEBUG createAppenderRef(ref="RollingFileInfo", level="null", Filter=null)
2021-07-13 16:44:16,146 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender-ref, class=org.apache.logging.log4j.core.config.AppenderRef].
2021-07-13 16:44:16,146 RMI TCP Connection(3)-127.0.0.1 DEBUG createAppenderRef(ref="RollingFileWarn", level="null", Filter=null)
2021-07-13 16:44:16,146 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=appender-ref, class=org.apache.logging.log4j.core.config.AppenderRef].
2021-07-13 16:44:16,147 RMI TCP Connection(3)-127.0.0.1 DEBUG createAppenderRef(ref="RollingFileError", level="null", Filter=null)
2021-07-13 16:44:16,147 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger].
2021-07-13 16:44:16,148 RMI TCP Connection(3)-127.0.0.1 DEBUG createLogger(additivity="null", level="DEBUG", includeLocation="null", ={Console, RollingFileDebug, RollingFileInfo, RollingFileWarn, RollingFileError}, ={}, Configuration(E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml), Filter=null)
2021-07-13 16:44:16,149 RMI TCP Connection(3)-127.0.0.1 DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
2021-07-13 16:44:16,150 RMI TCP Connection(3)-127.0.0.1 DEBUG createLoggers(={org.springframework, org.mybatis, root})
2021-07-13 16:44:16,152 RMI TCP Connection(3)-127.0.0.1 DEBUG Configuration XmlConfiguration[location=E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml] initialized
2021-07-13 16:44:16,152 RMI TCP Connection(3)-127.0.0.1 DEBUG Starting configuration XmlConfiguration[location=E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml]
2021-07-13 16:44:16,154 RMI TCP Connection(3)-127.0.0.1 DEBUG Log4j2 ConfigurationScheduler starting 1 threads
2021-07-13 16:44:16,155 RMI TCP Connection(3)-127.0.0.1 DEBUG Started configuration XmlConfiguration[location=E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml] OK.
2021-07-13 16:44:16,156 RMI TCP Connection(3)-127.0.0.1 DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false-1
2021-07-13 16:44:16,156 RMI TCP Connection(3)-127.0.0.1 DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false-1, all resources released: true
2021-07-13 16:44:16,156 RMI TCP Connection(3)-127.0.0.1 DEBUG Appender DefaultConsole-1 stopped with status true
2021-07-13 16:44:16,156 RMI TCP Connection(3)-127.0.0.1 DEBUG Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@4849a828 OK
2021-07-13 16:44:16,162 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6
2021-07-13 16:44:16,166 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=StatusLogger
2021-07-13 16:44:16,168 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=ContextSelector
2021-07-13 16:44:16,170 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=Loggers,name=
2021-07-13 16:44:16,171 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=Loggers,name=org.springframework
2021-07-13 16:44:16,172 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=Loggers,name=org.mybatis
2021-07-13 16:44:16,174 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=Appenders,name=Console
2021-07-13 16:44:16,175 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=Appenders,name=RollingFileDebug
2021-07-13 16:44:16,175 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=Appenders,name=RollingFileInfo
2021-07-13 16:44:16,175 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=Appenders,name=RollingFileWarn
2021-07-13 16:44:16,175 RMI TCP Connection(3)-127.0.0.1 DEBUG Registering MBean org.apache.logging.log4j2:type=49a59ff6,component=Appenders,name=RollingFileError
2021-07-13 16:44:16,180 RMI TCP Connection(3)-127.0.0.1 DEBUG org.apache.logging.log4j.core.util.SystemClock does not support precise timestamps.
2021-07-13 16:44:16,181 RMI TCP Connection(3)-127.0.0.1 DEBUG Reconfiguration complete for context[name=49a59ff6] at URI E:\web\source\zhaocaifeng\coding\newday\oldday\target\oldday\WEB-INF\classes\log4j2.xml (org.apache.logging.log4j.core.LoggerContext@2abad743) with optional ClassLoader: null
2021-07-13 16:44:16,181 RMI TCP Connection(3)-127.0.0.1 DEBUG Shutdown hook enabled. Registering a new one.
2021-07-13 16:44:16,182 RMI TCP Connection(3)-127.0.0.1 DEBUG LoggerContext[name=49a59ff6, org.apache.logging.log4j.core.LoggerContext@2abad743] started OK.

真正读取log4j配置的代码如下

org.apache.logging.log4j.core.config.ConfigurationFactory
在log4j-core的包中 private Configuration getConfiguration(LoggerContext loggerContext, boolean isTest, String name) {boolean named = Strings.isNotEmpty(name);ClassLoader loader = LoaderUtil.getThreadContextClassLoader();Iterator var6 = getFactories().iterator();while(true) {ConfigurationFactory factory;String prefix;String[] types;do {if (!var6.hasNext()) {return null;}factory = (ConfigurationFactory)var6.next();prefix = isTest ? "log4j2-test" : "log4j2";types = factory.getSupportedTypes();} while(types == null);String[] var11 = types;int var12 = types.length;for(int var13 = 0; var13 < var12; ++var13) {String suffix = var11[var13];if (!suffix.equals("*")) {String configName = named ? prefix + name + suffix : prefix + suffix;ConfigurationSource source = ConfigurationSource.fromResource(configName, loader);if (source != null) {if (!factory.isActive()) {LOGGER.warn("Found configuration file {} for inactive ConfigurationFactory {}", configName, factory.getClass().getName());}return factory.getConfiguration(loggerContext, source);}}}}}

调用堆栈

二、使用slf4j+log4j

pom

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version>
</dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-to-slf4j</artifactId><version>2.13.3</version>
</dependency>

spring5 配置log系统MAVEN相关推荐

  1. log4j配置日志系统成功 (转)

    .引言: <log4j相比System.out的优势>(自己blog中的文章)     Log4j就是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日 志 ...

  2. gradle学习(19)-log系统

    2019独角兽企业重金招聘Python工程师标准>>> 1.log信息的分类 除了常用的 debug,info,warning,error ,gradle自己特有的quiet和lif ...

  3. java师生交流答疑系统maven项目介绍

    经过调查,目前现代人的生活节奏加快,生活压力也在逐渐的增加,网络的发展给用户带来的便利,用户对师生交流不断的了解,越来越多的学院开始加入了这个行业中,但是我国对于师生交流管理效果低下,而且出错率也很高 ...

  4. 配置ArchLinux系统

    配置ArchLinux系统环境 文章目录 配置ArchLinux系统环境 配置`AUR`中国源 桌面环境安装 登录管理器安装 字体与其他附加组件安装 驱动安装 中文输入法安装: 优化配置 **`TRM ...

  5. Android_8.1 Log 系统源码分析

    文章目录 0x01 [Android Log框架推荐](https://www.jianshu.com/p/64b63e51fd4c) 1. [logger](https://github.com/o ...

  6. Hadoop(一)之实验一CentOS7配置Hadoop系统:配置CentOS和下载安装包

    文章目录 一.Vmware 二.创建虚拟机 1.安装centos7 2.配置静态IP.修改主机名 3.将刚刚的c0虚拟机克隆三台出来 4.在四台机子上设置hosts,一下以c0为例 5.配置 SSH ...

  7. AndroidT(13) Log 系统 -- C 语言格式的LOG输出(一)

    1.概览   c语言中的printf我想大家都非常的熟悉了,他的基本格式如下 int printf(const char *format, ...);   前半部分 format 指向的字符串用于描述 ...

  8. AndroidT(13) Log 系统 -- C plus plus 语言格式的LOG输出(二)

    1.概览   上一章提到的是在Android系统中,以C语言格式方式进行log输出.本章就来讲讲c++语言格式的. std::cout<<"This is a c++ log&q ...

  9. AndroidT(13) Log 系统 -- logd 服务的初始化(七)

    1. 概览   经过上一章的分析,现在也是时候讨论下logd的初始化了,虽然 logd 在代码量上来说并不大,但是还是分模块进行分析比较合适.所以这里就不贴整体代码了,这部分代码也被包含在AOSP t ...

最新文章

  1. redis集成spring_将Redis集成到您的Spring项目中
  2. 信息学奥赛C++语言:学生人数
  3. 33 SD配置-销售凭证设置-定义销售凭证的号码范围
  4. 特征值_特征值和奇异值的关系是什么?
  5. AD18 制作PCB封装库时导入其3D模型+下载3D模型
  6. 数据结构视频教程 -《数据结构(邓俊辉)》
  7. 向量的夹角余弦公式_向量的夹角公式是什么?
  8. “painter–openframeworks之绘画系统
  9. ROS机器人语音模块
  10. HTML5 input类型 range滑动条 介绍与使用
  11. 基于图像的三维重建——对极几何(3)
  12. Vue props用法详解
  13. 无人驾驶运用了什么技术,无人驾驶技术是
  14. 网络社区中的相关概念
  15. 海天蚝油《挑战不可能》听算神童挑战极限20笔9位数闪电心算
  16. 嵌入式开发微处理器选型需要考虑的因素
  17. Github每日精选(第75期):colly 爬取网站所有的数据
  18. 阿里P6员工月薪2万4, 被女友嫌弃, 晒出女友月薪, 以为看错了!
  19. Linux查看当前目录及子目录大小
  20. 【qcom Android camera调试纪要】

热门文章

  1. ABAP Write 宝典
  2. 会计证考试《财经法规与职业道德》第三章精选题
  3. 如何让报表告别繁琐?简单操作实现报表联动!
  4. 抖音用户规模达5.18亿,数据解读抖音支付背后逻辑?
  5. matlab保存图片如何保证dpi,[转载]matlab 保存高分辨率图像 dpi要在300以上
  6. cvs update 用法_WinCVS的配置与使用方法
  7. oracle 数字不用,oracle – Plsql将数字(货币)拼写为意大利货币而不用硬编码的翻译编号...
  8. 关于Python中if、for、with、list、dict的练习题
  9. Python3 字符串与hex之间的相互转换
  10. Python教程:多态与多态性