升级日志logging框架到logback
来源:互联网 发布:软件销售人员岗位职责 编辑:程序博客网 时间:2024/06/05 06:21
升级过程中遇到些许波折,如无法输出 ibatis jdbc 日志了,记下随笔供参阅。
首先要知道项目中原有日志情况,本项目中使用了spring 4, ibatis 2.3.x,
spring 使用了JCL, ibatis动态加载JCL、Log4j、jdk14log
先删除原log4j 和 JCL dependency,然而ibatis不支持sl4j,而是首先查找JCL,所以考虑使用 jcl-over-slf4j 桥接到 slf4j 。
maven依赖
<!-- 加入logback 、 slf4j依赖包 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.6</version> </dependency>
加了jcl-over-slf4j 却未能生效,是因为有开源包依赖了jcl,用mvn命令找出这些包,然后exclusion掉
mvn dependency:tree
[INFO] | | \- dom4j:dom4j:jar:1.6.1:compile[INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile[INFO] | +- com.whalin:Memcached-Java-Client:jar:3.0.0:compile[INFO] | \- com.baidu:bccs-api-lib:jar:1.1.2:compile[INFO] +- org.springframework:spring-test:jar:4.0.0.RELEASE:test[INFO] | \- org.springframework:spring-core:jar:4.0.0.RELEASE:compile[INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile //找到这个jar,定位是哪个开源jar依赖的[INFO] +- junit:junit:jar:4.11:test[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test[INFO] +- commons-dbcp:commons-dbcp:jar:20030825.184428:test[INFO] +- org.apache.commons:commons-lang3:jar:3.3.2:compile[INFO] +- org.apache.ibatis:ibatis-sqlmap:jar:2.3.4.726:compile[INFO] \- org.springframework:spring-orm:jar:3.2.6.RELEASE:compile[INFO] +- aopalliance:aopalliance:jar:1.0:compileexclusion掉JCL,然后重复以上命令,直到再无 commons-logging 出现
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.0.0.RELEASE</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
使用SLF4J Migrator升级历史代码
运行slf4j-migrator-XXX.jar文件,可将历史代码中的Jakarta Commons Logging (JCL) API、 log4j、java.util.logging(JUL )替换成 slf4j代码。实际上就是加入import和修改日志成员变量声明并把原日志代码删除。
java -jarslf4j-migrator-1.7.10.jar
日志文件有两种,一种是存放所有级别(依项目中配置)日志;一种只存异常日志;
日志文件命名方式:每天一个日志文件logistic-admin-err-2014-09-09.1.log,
在同一天内如果超出50M,序号加1如:
logistic-admin-err-2014-09-09.2.log
logistic-admin-err-2014-09-09.3.log ...
logback xml:
<?xml version="1.0" encoding="UTF-8" ?><configuration scan="true" scanPeriod="3 seconds"> <property name="LOG_DIR" value="../logs" /> <property name="LOG_LEVEL_JDBC" value="DEBUG" /> <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> %d{HH:mm:ss.SSS} [%thread] %-5level %logger{45} - %msg%n </pattern> </layout> </appender> <!--日志文件:每天一个日志文件logistic-admin-err-%d{yyyy-MM-dd}.1.log, 如果超出50M,序号加1如:logistic-admin-err-%d{yyyy-MM-dd}.2.log logistic-admin-err-%d{yyyy-MM-dd}.3.log ...--> <appender name="FILEALL" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/logistic-admin.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_DIR}/logistic-admin-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>30MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{45} - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- deny all events with a level below INFO, that is TRACE and DEBUG --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> </appender> <!--错误日志文件--> <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/logistic-admin-err.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_DIR}/logistic-admin-err-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>30MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{45} - %msg%n</pattern> <charset>utf-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--本项目日志级别--> <logger name="com.incito.logistics" level="debug"/> <!--依赖框架logging--> <logger name="org.springframework" level="info"/> <!--jdbc logging--> <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="${LOG_LEVEL_JDBC}"/> <logger name="com.ibatis.common.jdbc.ScriptRunner" level="${LOG_LEVEL_JDBC}"/> <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="${LOG_LEVEL_JDBC}"/> <logger name="java.sql.Connection" level="${LOG_LEVEL_JDBC}"/> <logger name="java.sql.Statement" level="${LOG_LEVEL_JDBC}"/> <logger name="java.sql.ResultSet" level="${LOG_LEVEL_JDBC}"/> <logger name="java.sql.PreparedStatement" level="${LOG_LEVEL_JDBC}"/> <root> <level level="info" value="on"/> <appender-ref ref="STDOUT"/> <appender-ref ref="FILEALL"/> <appender-ref ref="FILEERROR"/> </root></configuration>
- 升级日志logging框架到logback
- Java日志框架:SLF4J, Apache Common-Logging, Log4J和Logback
- Java日志框架:SLF4J, Apache Common-Logging, Log4J和Logback
- java的几个日志框架log4j、logback、common-logging
- Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明
- Java日志框架:SLF4J, Apache Common-Logging, Log4J和Logback
- jdk-logging log4j1 log4j2 logback 日志框架介绍
- log4j+common-logging到slf4j+logback的日志移植方法
- JAVA 开发平台的技术和框架(五)日志管理 :common-logging slf4j log4j logBack
- logback+slf4j日志框架
- 日志框架之LogBack
- java日志框架--logback
- error_logger升级到lager:erlang日志框架
- common-logging和log4j切换到logback
- SLF4J+Logback 日志框架使用
- SLF4J和Logback日志框架
- SLF4J+Logback 日志框架使用
- 日志框架logback学习记录
- 理解MySQL及其他关系数据库中JOINs用法
- NPOI操作Excel 003:写入空Excel
- 队列---旅行家算法
- 【machine learning】linear regression
- 可以让你少奋斗十年的工作经验
- 升级日志logging框架到logback
- 关于JAVA的try catch finally的return返回值问题
- java 内部类
- C#中的扩展方法
- linux桌面环境gnome2.x /3.x ,kde,xfce,lxde 使用比较
- Android的Style和Theme 译文
- bzoj 2162: 男生女生
- How to Install the Gnome Classic Desktop(Gnome2.x) in Ubuntu 14.04
- shell学习之awk篇