更新记录
2017-02-06 :1.需要更改的参数提取为变量,如果是SpringBoot项目,可以完全写在配置文件,可去看减轻茶的配置 ;2.定义控制台自定义颜色,Eclipse需要安装ANSI插件
2017-12-28 :修改添加日志记录到数据库,去除1.2.3版本不兼容的保存日志文件的file标签 ,
<File>${LOG_HOME}/info.duduerp.log</File>
代码去除。
Druid连接,原代码中默认是用Druid,注意更改连接的数据库
<appender name="dbAppender" class="ch.qos.logback.classic.db.DBAppender"> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <dataSource class="com.alibaba.druid.pool.DruidDataSource"> <driverClassName>com.mysql.jdbc.Driver</driverClassName> <!--测试--> <url>jdbc:mysql://数据库地址</url> <!--线上--> <!--<url>jdbc:mysql://数据库地址</url>--> <username>账号</username> <password>密码</password> </dataSource> </connectionSource> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender>
C3P0连接
<appender name="dbAppender" class="ch.qos.logback.classic.db.DBAppender"> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource"> <driverClass>com.mysql.jdbc.Driver</driverClass> <!--测试10.31线上和线下是同一个数据库--> <jdbcUrl>jdbc:mysql://数据库连接</jdbcUrl> <!--线上--> <!--<jdbcUrl>jdbc:mysql://数据库连接</jdbcUrl>--> <user>zha</user> <password>logrizhi200LM</password> </dataSource> </connectionSource> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>warn</level> </filter> </appender>
一、简介
日志记录器(Logger)的行为是分等级的。如下所示:
分为OFF>ERROR>WARN>INFO>DEBUG>TRACE >ALL或者您定义的级别。建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来,也是说大于等于的级别的日志才输出。
先看下这个logback使用详解:http://aub.iteye.com/blog/1101222
二、具体配置
logback.xml文件配置(建议复制到文本编辑器中查看,可直接使用,将所有duduerp改成自己项目名称,还有<logger name="com.lemo.erp" level="DEBUG" />这个改成自己包,添加到日志系统数据库连接名要对应):
<?xml version="1.0" encoding="UTF-8" ?> <configuration debug="false"> <property name="PRODUCT_NAME" value="duduerp"/> <!-- logback的级别顺序 TRACE < DEBUG < INFO < WARN < ERROR--> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="/opt/myapp/logs/${PRODUCT_NAME}"/> <!--定义日志格式化输出格式:%d表示日期,%thread表示线程名,%level:级别从左显示5个字符,%logger{100}输出日志的类,100代表包名加类名的总长度限制,%L:代码中的行号,%msg:日志消息,%n是换行符--> <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} | %highlight(%-5level) --- %yellow([%-15.15thread]) | %cyan(%50.50logger{49}) %boldRed(:%-4L) | %msg%n"/> <!--文件日志输出格式--> <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5level --- [%-15.15thread] | %-50.50logger{49} :%-4L | %msg%n"/> <!--数据库配置文件--> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <!--测试--> <property name="url" value="数据库连接"/> <!--线上--> <!--<property name="url" value="数据库连接"/>--> <property name="username" value="账号"/> <property name="password" value="密码"/> <!-- 控制台输出 --> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout name="ch.qos.logback.classic.PatternLayout"> <!-- 日志中的输出格式 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </layout> </appender> <!-- 每天输入一个日志文件 滚动输出--> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- <onMatch>:用于配置符合过滤条件的操作,我们这里用的符合就接受 <onMismatch>:用于配置不符合过滤条件的操作,我们这里不符合就抛弃 如果返回DENY,那么记录事件立即被抛弃,不再经过剩余过滤器; 如果返回NEUTRAL,那么有序列表里的下一个过滤器会接着处理记录事件; 如果返回ACCEPT,那么记录事件被立即处理,不再经过剩余过滤器。 --> <!-- 此日志文件只记录INFO级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <!-- 日志中的输出格式 --> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <!--滚动策略 按照时间来滚动--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件路径,文件名修改为自己项目的名字- --> <fileNamePattern>${LOG_HOME}/info.${PRODUCT_NAME}%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 保存时间(天) --> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <!-- 每天输入一个日志文件 滚动输出--> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--输出的日志级别是大于或等于此级别的日志信息,这里输出WARN和ERROR--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> <encoder> <!-- 日志中的输出格式 --> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <!--滚动策略 按照时间来滚动--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件路径,文件名修改为自己项目的名字- --> <fileNamePattern>${LOG_HOME}/error.${PRODUCT_NAME}%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 保存时间(天) --> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <!--添加到日志系统--> <appender name="dbAppender" class="ch.qos.logback.classic.db.DBAppender"> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <dataSource class="com.alibaba.druid.pool.DruidDataSource"> <driverClassName>${driverClassName}</driverClassName> <url>${url}</url> <username>${username}</username> <password>${password}</password> </dataSource> </connectionSource> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 如果level没写,继承root的级别 如果没有设置additivity,默认为true,将此logger的打印信息向上级传递; 如果没有设置appender,此loger本身不打印任何信息。 --> <!--设置我们项目文件夹下的日志--> <logger name="com.lemo.erp" level="DEBUG" /> <!--log4jdbc--> <!--多余日志关闭 sqlonly是记录系统执行过的sql语句 sqltiming是记录sql执行的时间,可以分析耗时的sql语句(也会显示sql语句,sqlonly可以不显示) audit是记录除了ResultSet外的所有JDBC调用情况。一般不需要 resultset是记录返回结果集信息 connection记录数据库连接和释放信息,可记录当前的数据库连接数,便于诊断连接是否释放 --> <logger name="jdbc.sqlonly" level="OFF"/> <logger name="jdbc.sqltiming" level="INFO"/> <logger name="jdbc.audit" level="OFF"/> <logger name="jdbc.resultset" level="OFF"/> <logger name="jdbc.connection" level="OFF"/> <!-- 级别定义,输出端内容输出级别,大于或等于root定义的level,方能在输出端输出 --> <!--如果想在控制台看DEBUG级别日志改成DEBUG,默认DEBUG,不区分大小写--> <root level="INFO"> <!--只能打印root level当前和以上级别的日志--> <appender-ref ref="consoleLog"/> <!--只能打印INFO级别的日志--> <appender-ref ref="fileInfoLog"/> <!--只能打印WARN和以上级别的日志的日志--> <appender-ref ref="fileErrorLog"/> <!--添加到日志系统--> <appender-ref ref="dbAppender"/> </root> </configuration>
log4jdbc日志框架介绍:http://badqiu.iteye.com/blog/743100
配置成功生成的日志文件