网站建设教程吧,互联网广告销售,织梦手机网站制作教程,唐山seo排名目标
本次迁移的目标就是用 slf4jlogback 的日志框架来取代目前的 slf4jlog4j
如何迁移
基于 slf4j 的无痛迁移
项目本身是采用的 slf4jlog4j 日志架构#xff0c;所以迁移到 logback 基本无痛 修改依赖 原本是 slf4jlog4#xff0c;依赖如下
dependencygro…目标
本次迁移的目标就是用 slf4jlogback 的日志框架来取代目前的 slf4jlog4j
如何迁移
基于 slf4j 的无痛迁移
项目本身是采用的 slf4jlog4j 日志架构所以迁移到 logback 基本无痛 修改依赖 原本是 slf4jlog4依赖如下
dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.25/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactIdversion1.7.25/version/dependencydependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version/dependency迁移到 slf4jlogback依赖如下 dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.28/version/dependencydependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.3/version/dependency修改日志配置 logback 的配置文件为 logback.xml替换掉 log4j.xml
?xml version1.0 encodingUTF-8?
configuration debugtrue scanfalseproperty namelog.path value/data/dev/ /property nameapp.name valuedev-api /appender nameCONSOLE classch.qos.logback.core.ConsoleAppenderencoderpattern%date{HH:mm:ss.SSS} [%-5level] [%logger:%L] %mdc{sid:--} - %msg%n/patterncharsetUTF-8/charset/encoderfilter classch.qos.logback.classic.filter.ThresholdFilterlevelDEBUG/level/filter/appenderappender nameFILE classch.qos.logback.core.rolling.RollingFileAppenderfile${log.path}/${app.name}.log/filerollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${log.path}/${app.name}.log.%d{yyyy-MM-dd}/fileNamePattern/rollingPolicyencoder!-- %L not support when use async appender --pattern%date{HH:mm:ss.SSS} [%-5level] [%logger] %mdc{sid:--} - %msg%n/patterncharsetUTF-8/charset/encoderfilter classch.qos.logback.classic.filter.ThresholdFilterlevelDEBUG/level/filter/appenderappender nameASYNC_FILE classch.qos.logback.classic.AsyncAppenderdiscardingThreshold0/discardingThreshold!-- One and only one appender may be attached to AsyncAppender --appender-ref refFILE //appender!-- note: in production environment set INFO level --logger namezy.devlevel valueINFO //loggerroot levelERRORappender-ref refASYNC_FILE /appender-ref refCONSOLE //root/configurationweb 项目初始化日志 增加如下依赖
dependencygroupIdorg.logback-extensions/groupIdartifactIdlogback-ext-spring/artifactIdversion0.1.5/version
/dependency在 web.xml 里增加如下监听器 context-paramparam-namelogbackConfigLocation/param-nameparam-valueclasspath:config/logback.xml/param-value/context-paramlistenerlistener-classch.qos.logback.ext.spring.web.LogbackConfigListener/listener-class/listener 从 log4j 迁移
项目里依赖了其他一些库可以用 maven 命令 mvn dependency:tree 来查看下都有哪些库还用到了 log4j如果这些库也是 slf4jlog4j 的架构那就万事大吉但也有的库直接用的 log4j这样就麻烦了 根据 slf4j 的文档使用 log4j 桥接器 log4j-over-slf4j 来替换 log4j 依赖即在所有依赖到 log4j 的库上排除 log4j 的依赖并添加 log4j-over-slf4j 依赖如下
dependencygroupIdcom.meizu.framework/groupIdartifactIdframework-service/artifactIdversion2.0.0-RC01/versionscopecompile/scopeexclusionsexclusionartifactIdlog4j/artifactIdgroupIdlog4j/groupId/exclusion
/dependencydependencygroupIdorg.slf4j/groupIdartifactIdlog4j-over-slf4j/artifactIdversion1.7.28/version
/dependency其他日志框架(jul/jcl/log4j2/…)
和 log4j 类似slf4j 还为其他日志框架提供了 xxx-over-slf4j 桥接器比如 jcl-over-slf4j如果用到了对应的日志框架只需要在依赖里排除该日志框架依赖并添加对应的桥接器即可 这里要特别提一下 jul(java.util.logging)由于这个日志框架内置在 jdk 内无法通过置换依赖的方式来桥接所以需要项目自己调用一下桥接器的方法在项目初始化时执行如下代码即可
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();也许是因为这个原因jul 的桥接器名字是 jul-to-slf4j 而不是 jul-over-sl4fj