关于slf4j+logback整合提供完善log记录的一些总结

1.slf4j的组合:

SLF4J 的几种实际应用模式--之一:SLF4J+Log4J

SLF4J(Simple Logging Facade for Java) 是一个通用的日志框架,不能何以谓之 Facade(门面),所扮眼的角色相当于 Jakarta Commons Logging。就像 JCL 需要底层的日志实现,如 Log4J、java.util.logging、Simple Logger 等来完成具体的信息输出,事实上基本总是 JCL+Log4J 那么一个绝配。SLF4J 的原旨也是能支持多种下层日志框架实现,但最好的日志实现仍然是 Log4J,所以本篇讲述 SLF4J 的第一种用法 SLF4J+Log4J。

需要的配置文件和组件包,下面三个 jar 文件和一个 properties 文件都是要放在项目的 ClassPath 上。

1. slf4j-api-1.5.11.jar
2. slf4j-log4j12-1.5.11.jar
3. log4j-1.2.15.jar
4. log4j.properties(也可以是 log4j.xml,本例中用 log4j.propertes)

前两个包在 http://www.slf4j.org/download.html 处下载,后一个包在http://logging.apache.org/log4j/1.2/download.html 下载,可能包文件名中的版本号有些差,不要紧。

配置:

log4j.properties 以前该是怎么写,现在还是怎么写 如果实在不会的话,可以自己百度一下。

SLF4J 的几种实际应用模式--之一:SLF4J+Logback

 

前面讲的 SLF4J 的用法之一是 SLF4J+Log4J,而这里要推出的组合是 SLF4J+LogBack。不用 Log4J?难道还有比 Log4J 更好的日志实现吗?是的,答案就是LogBack。假如你知道 LogBack 和 Log4J 是同出一位大师之手,你就不会觉得惊讶了。LogBack 对 Log4J 进行了增强,并投入了 SLF4J 的怀抱,它还被作者认定为 Log4J 的继任者。

 

为什么叫做 Logback,我就不知道了,反正不要叫做 Brokeback 就行。这里是推崇用 Logback 替代 Log4J 的十几个理由:Reasons to prefer logback over log4j,说的大至是更快;好测试;与 SLF4J 关系紧;文档丰富;能自动加载配置文件;多个 JVM 写一个日志文件,或其他 I/O 错误时不影响程序执行;配置文件中加入条件控制;强大的日志过滤;更强的日志切分功能;自动压缩、删除日志文件;异常栈中更多的数据信息。

 

Logback 分为三个模块:logback-core,logback-classic,logback-access。logback-core 是核心;logback-classic 改善了 log4j,且自身实现了 SLF4J API,所以即使用 Logback 你仍然可以使用其他的日志实现,如原始的 Log4J,java.util.logging 等;logback-access 让你方便的访问日志信息,如通过 http 的方式。

 

还得提一点,Logback 能更好的放到 OSGI 环境中。好了,简单绍完了 Logback,就来看看具体怎么用它。

 

需要的配置文件和组件包,下面三个 jar 文件和一个 xml文件都是要放在项目的 ClassPath 上。

 

1. slf4j-api-1.5.11.jar
2. logback-core-0.9.20.jar
3. logback-classic-0.9.20.jar
4. logback.xml 或 logback-test.xml (类似于 log4j.properties/log4j.xml)

配置:

相对与log4j来说,logback的配置文件主要是logback.xml,logback.xml的具体配置例子如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- For assistance related to logback-translator or configuration -->
<!-- files in general, please contact the logback user mailing list -->
<!-- at http://www.qos.ch/mailman/listinfo/logback-user -->
<!-- -->
<!-- For professional support please see -->
<!-- http://www.qos.ch/shop/products/professionalSupport -->
<!-- -->
<configuration>
    <!--控制面板输出格式配置--> <appender name="stdAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n</pattern> </encoder> </appender> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n</pattern> </encoder> </appender>
    <!--数据库配置,可以实现将日志存入数据库--> <appender name="DB" class="org.dingo.logbackext.db.DBAppender"> <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource"> <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource"> <driverClass>oracle.jdbc.driver.OracleDriver</driverClass> <url>jdbc:oracle:thin:@ip:1521:orcl</url> <user>username</user> <password>password</password> </dataSource> </connectionSource> <!--<nameResolver class="org.dingo.logbackext.names.DefaultTableAndColumnNameResolver">--> <loggingEventTableName>logging_event</loggingEventTableName> <loggingEventExceptionTableName>logging_event_exception</loggingEventExceptionTableName> <loggingEventPropertyTableName>logging_event_property</loggingEventPropertyTableName> </nameResolver> <printStackTrace>true</printStackTrace> </appender>      <!--配置文件存储--> <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--See also http://logback.qos.ch/manual/appenders.html#RollingFileAppender --> <File>d:\logs\system_log.txt</File> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <maxIndex>10</maxIndex> <FileNamePattern>system_log.txt.%i</FileNamePattern> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>128MB</MaxFileSize> </triggeringPolicy> </appender> <!--配置打包压缩文件--> <appender name="ATOMIKOS" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>tm.out</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>tm.%i.out.zip</fileNamePattern> <minIndex>1</minIndex> <maxIndex>3</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>2MB</maxFileSize> </triggeringPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <!--配置日志邮件发送--> <appender name="SMTP" class="ch.qos.logback.classic.net.SMTPAppender"> <evaluator class="ch.qos.logback.classic.boolex.OnErrorEvaluator" /> <subject>%logger - %m</subject> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </layout> <From>xxxxxxxxx@126.com</From> <SMTPHost>smtp.126.com</SMTPHost> <SSL>false</SSL> <Username>xxxxxxx@126.com</Username> <Password>xxxxxxxxxxx</Password> <To>xxxxxxxxx@qq.com</To> </appender> <!--name属性是包名 --> <logger name="org.apache.ibatis" level="error"> <appender-ref ref="stdAppender" /> </logger> <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="error" > <appender-ref ref="consoleAppender" /> </logger> <logger name="com.ibatis.common.jdbc.ScriptRunner" level="error" > <appender-ref ref="consoleAppender" /> </logger> <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="error" > <appender-ref ref="consoleAppender" /> </logger> <logger name="java.sql.PreparedStatement" level="error"> <appender-ref ref="stdAppender" /> </logger> <logger name="java.sql.Statement" level="error"> <appender-ref ref="stdAppender" /> </logger> <logger name="java.sql.ResultSet" level="error"> <appender-ref ref="stdAppender" /> </logger> <logger name="java.sql.Connection" level="error"> <appender-ref ref="stdAppender" /> </logger> <logger name="com.atomikos" level="ERROR" additivity="false"> <appender-ref ref="ATOMIKOS" /> </logger> <root level="error"> <appender-ref ref="stdAppender" /> <appender-ref ref="fileAppender" /> <!-- <appender-ref ref="DB" /> --> </root> </configuration>

 这里要说明的是关于DB配置文件的说明,配置数据源我就不多说了,就是提醒一下如果在配置完成后的话,还需要创建相应的oracle表,logging_event、logging_event_property 和 logging_event_exception,三个表结构源码jar包里都有的。会使用maven的下载源码后在源码jar包的souurces包中能找到,

我的目录路径是在:logback-classic-1.0.13-sources.jar\ch\qos\logback\classic\db\script - ZIP 压缩文件, 解包大小为 513,393 字节,里边有关于oracle,mysql,sqlserver等流行数据库的sql脚本,创建表结构就可以了。如果想更详细的知道配置代表的意思的话:可以访问:http://logback.qos.ch/manual/configuration.html

这里我再提供一些关于各个数据库的jdbc连接配置吧~

 1  <appender name="db-classic-mysql" class="ch.qos.logback.classic.db.DBAppender">  
 2         <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">  
 3             <driverClass>com.mysql.jdbc.Driver</driverClass>  
 4             <url>jdbc:mysql://localhost:3306/logbackdb</url>  
 5             <user>root</user>  
 6             <password>qqqqqq</password>  
 7         </connectionSource>  
 8     </appender>  
 9   
10     <appender name="db-access" class="ch.qos.logback.access.db.DBAppender">  
11         <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">  
12             <driverClass>com.mysql.jdbc.Driver</driverClass>  
13             <url>jdbc:mysql://localhost:3306/logbackdb</url>  
14             <user>root</user>  
15             <password>qqqqqq</password>  
16         </connectionSource>  
17         <insertHeaders>true</insertHeaders>  
18     </appender>  
19     -->  
20     <appender name="db-classic-mysql-pool" class="ch.qos.logback.classic.db.DBAppender">  
21         <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">  
22             <dataSource class="org.apache.commons.dbcp.BasicDataSource">  
23                 <driverClassName>com.mysql.jdbc.Driver</driverClassName>  
24                 <url>jdbc:mysql://localhost:3306/logbackdb</url>  
25                 <username>root</username>  
26                 <password>qqqqqq</password>  
27             </dataSource>  
28         </connectionSource>  
29     </appender>  

至于指定表名的话和之前说的是一样的,这里就不累赘的叙述了。

好了,总结就写到这里吧,如果有补充或者需要添加的日后遇到之后再更新吧。

 

转载于:https://www.cnblogs.com/befaster/p/4013550.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值