一. Logback与p6spy
一. LogBack配置
配置pom.xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.13</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.9</version>
</dependency>
加入logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="all" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/haha.log</file>
<!--maxHistory或者maxFileSize或者系统重启都会触发归档-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/haha.log_%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern><!--归档文件名,%i是索引,从0开始递增-->
<maxHistory>5</maxHistory><!--保留5天的日志-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100</maxFileSize><!--单个文件最大100m,超过此大小就归档,然后重新开一个文件-->
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d [%thread] %level %logger\(line:%line\) - %msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d [%thread] %level %logger\(line:%line\) - %msg%n</pattern>
</encoder>
</appender>
<logger name="com" level="DEBUG" additivity="false"><!--此处指定com包下的log级别,additivity="false"指定自己的appender-->
<appender-ref ref="STDOUT" />
</logger> <root level="DEBUG"> <!--root的level:代码中log的级别大于此处的level时,才触发appender(全局设置)-->
<appender-ref ref="STDOUT" />
</root>
</configuration>
用slf4j调用日志打印组件
(1) slf4j-api这个包调用默认logback的class进行日志打印
(2)slf4j的LoggerFactory.getlogger(),会生成LogBack的LoggerContext,进行日志打印更改logback.xml读取位置
logback默认读取classpath下的logback.xml, 改变文件位置, 在项目启动时执行配置public class LogbackLocation implements InitializingBean { private Logger logger = LoggerFactory.getLogger("LogbackLocation"); public void afterPropertiesSet() throws Exception {
new LogBackLocationUtil("etc\\logback.xml").configLogger();
logger.info("Logger back file success"); }
}
public class LogBackLocationUtil { private String fileLocation;
private LoggerContext context; public LogBackLocationUtil(String fileLocation) {
this.fileLocation = fileLocation;
} public void configLogger( ){
this.context = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator joranConfigurator = new JoranConfigurator(); joranConfigurator.setContext(this.context);
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(this.fileLocation);
try {
if(resourceAsStream != null)
joranConfigurator.doConfigure(resourceAsStream);
System.out.println("loggerback config file success !!!");
} catch (JoranException e) {
e.printStackTrace();
}
} public void closeContext(){
if(this.context != null)
this.context.stop();
System.out.println("logback context closed success !!!");
}
}
二. 配置p6spy
添加pom支持
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>1.3</version>
</dependency>
classpath下加入spy.properties
// p6spy是sqldriver的一种代理,用来获取发往数据库的真是sql,此处要配置真正的数据库代理
realdriver=com.mysql.jdbc.Driver
appender=com.mylogger.WithoutResultsetLogger // 自定义sql输出格式(不打印结果集)
打印格式类
该类编写参考spy.properties中默认的appender类 (#appender=com.p6spy.engine.logging.appender.Log4jLogger)public class WithoutResultsetLogger extends FormattedLogger implements P6Logger {
// protected Level level;
protected String lastEntry;
private static Logger logger = LoggerFactory.getLogger(WithoutResultsetLogger.class); public WithoutResultsetLogger() {
P6SpyProperties properties = new P6SpyProperties();
} public void logException(Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
this.logText(sw.toString());
} public void logText(String text) { // 自定义日志输出格式
if(!text.contains("resultset"))
logger.debug(text.substring(text.lastIndexOf("|")+1));//(text.substring(text.lastIndexOf("|")+1));
this.setLastEntry(text);
} }
一. Logback与p6spy的更多相关文章
- 使用p6spy格式化日志输出
P6Spy 是针对数据库访问操作的动态监测框架(为开源项目,项目首 页:www.p6spy.com)它使得数据库数据可无缝截取和操纵,而不必对现有应用程序的代码作任何修改.P6Spy 分发包包括P6L ...
- LogBack简易教程
1.简介 LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手.(log4j的原型是早前由Ceki Gülcü贡献给Apache基金会的) 1.1 LogBac ...
- JDBC数据库访问操作的动态监测 之 p6spy
P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的. P6spy1.3 sf.net http://sourc ...
- java日志组件介绍(common-logging,log4j,slf4j,logback )
转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...
- logback logback.xml常用配置详解 <filter>
<filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一.返回DENY,日志将立即被抛弃不再经过其他过滤器:返回NEUTRAL,有序列表 ...
- logback 常用配置详解<appender>
logback 常用配置详解 <appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的 ...
- logback日志写入数据库(mysql)配置
如题 建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1 logback 配置文件(如下) <?xml version="1.0" encoding ...
- Logback配置连接
logback 简介 logback 常用配置详解(一)<configuration> and <logger> logback 常用配置详解(二)<appender&g ...
- slf4j log4j logback关系详解和相关用法
slf4j log4j logback关系详解和相关用法 写java也有一段时间了,一直都有用slf4j log4j输出日志的习惯.但是始终都是抱着"拿来主义"的态度,复制粘贴下配 ...
随机推荐
- leetcode 135. Candy ----- java
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- 重启Tomcat的脚本
说明:一台服务器上跑了8个Tomcat case的方式: #!/bin/bash #reboot tomcat!!! #Author:fansik echo -e "\033[1;42;31 ...
- HDU-5532 Almost Sorted Array (LIS)
题目大意:给一个n个数的序列,问这个序列删掉一个数后是否有序. 题目分析:找最长上升子序列和最长下降子序列,只要有一个的长度不小于n-1即可. 代码如下: # include<iostream& ...
- Ghost的相关问题
一些和Ghost使用有关的问题,记录在这里. 1,有时候使用ghost恢复,发现最后一步选择驱动器是灰色的,这是因为备份文件有些是用Disk模式,有些使用partition模式,所有恢复的时候如果其中 ...
- java定时框架:表达式设置
Quartz中时间表达式的设置-----corn表达式 (注:这是让我看比较明白的一个博文,但是抱歉,没有找到原作者,如有侵犯,请告知) 时间格式: <!-- s m h d m w(?) y( ...
- NetHogs下载和监控
转自:http://blog.csdn.net/testcs_dn/article/details/40506225 CentOS6.5下使用NetHogs监控进程网络使用情况 分类: CentOS2 ...
- python--flask使用
Flask是一个使用 Python 编写的轻量级 Web 应用框架.下面我将使用Flask框架,创建一个简单的html页面示例. 1.项目的目录结构如下所示:exweb\ uniqueenv\ a ...
- ruby杂记
ruby基本类中的方法:puts Object.private_instance_methods
- 斐波那契数列PHP非递归数组实现
概念: 斐波那契数列即表达式为 a(n) = a(n-1)+a(n-2) 其中 a1 =0 a2 = 1 的数列 代码实现功能: 该类实现初始化给出n,通过调用getValue函数得出a(n)的值 ...
- PHP GC垃圾回收机制之引用变量回收周期疑问
普通的引用变量的销毁大家都知道, 当unset的时候如果refcount = 0 则认为无用, 销毁. 但是手册中提到一点会有递归引用的问题,很是奇葩 代码如下 <?php $a = 1; $a ...