- 浏览: 77489 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
skying007:
,very good example. thank you ...
JMS WITH WEBSPHERE -
ycljf86:
magicalboy 写道 我想搞个Flex桌面录像程序,一定 ...
Flash Media Server 概念 -
ycljf86:
不好意思,最近忙,好久没来博客了,用免费的red5也可以的。
Flash Media Server 概念 -
magicalboy:
我想搞个Flex桌面录像程序,一定要用到FMS?
Flash Media Server 概念
在log4j中,可以用JDBCAppender将log的内容存贮到数据库中.但是,只能将内容整体放到数据库的一个字段中,如果想将log的内容分开来存贮到不同的字段中,就要对JDBCAppender重写做扩展了.这几天看了一下log4j的源码.做了一下简单的扩展.
例如;想将聊天记录的log存到数据库中,要将聊天记录的相关信息.fromid,toid,fromname,toname,time,content分开来,存到数据库中的不同字段时,将要怎么做呢. 可以继承JDBCAppender,对方法flushBuffer重写.如下;
import org.apache.log4j.jdbc.JDBCAppender;
import java.util.Iterator;
import java.sql.SQLException;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.spi.LoggingEvent;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Element;
import java.util.Map;
import java.util.HashMap;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
public class ChatSaveAppender extends JDBCAppender {
public void flushBuffer() {
//Do the actual logging
removes.ensureCapacity(buffer.size());
for (Iterator i = buffer.iterator(); i.hasNext(); ) {
try {
LoggingEvent logEvent = (LoggingEvent) i.next();
Object obj = logEvent.getMessage();
String msg = obj.toString();
System.out.println(msg);
//例如log是与xml文件输出的。格式如;<hi toname="小猫" cmd="msg" time="2007-5-21 00:00:41" fromid="2871146" toid="2534882" content="您好" status="0" fromname="小猪"/>
Map<String,String> map = xmlToMap(msg);//将xml解析成map
if(map!=null){
String fromid = "";
String fromname = "";
String toid = "";
String toname = "";
String content ="";
String time = "";
String status = "";
if(map.containsKey("fromid")){
fromid = map.get("fromid");
}
if(map.containsKey("fromname")){
fromname = ""+ map.get("fromname");
}
if(map.containsKey("toid")){
toid = ""+ map.get("toid");
}
if(map.containsKey("toname")){
toname = ""+ map.get("toname");
}
if(map.containsKey("content")){
content = ""+ map.get("content");
}
if(map.containsKey("status")){
status = ""+ map.get("status");
}
if(map.containsKey("time")){
time = ""+ map.get("time");
}
String sql = "insert into CHAT_LOG (FROMID,FROMNAME,TOID,TONAME,CONTENT,TIME,STATUS) values ("
+fromid+",'"+fromname+"',"+toid+",'"+toname+"','" + content
+ "',to_date('"+time+"','yyyy-mm-dd hh24-mi-ss'),"+status+")";
execute(sql);
}
removes.add(logEvent);
} catch (SQLException e) {
errorHandler.error("Failed to excute sql", e,
ErrorCode.FLUSH_FAILURE);
}
}
// remove from the buffer any events that were reported
buffer.removeAll(removes);
// clear the buffer of reported events
removes.clear();
}
//下面解析log,由xml解析成map,用dom4j.
public Map<String, String> xmlToMap(String parameters) {
Map map =null;
if (parameters != null && parameters.indexOf(CMD_NAME)>0 ) {
try {
Document document = DocumentHelper.parseText(parameters);
if (document != null) {
Element root = document.getRootElement();
if (root != null && root.getName().equalsIgnoreCase(ROOT_NAME)) {
map = attributeToMap(root);
root = null;
}
}
document = null;
} catch (Exception e) {
System.out.println("format String:\n"+parameters + e);
} finally {
parameters = null;
}
}
return map;
}
public Map<String, String> attributeToMap(Element root) {
List<Attribute> attributes = root.attributes();
Map<String, String> map = new HashMap<String, String>(5);
for (Attribute attribute : attributes) {
map.put(attribute.getName(), attribute.getText());
}
attributes = null;
root = null;
return map;
}
}
log4j.properties文件可以写成如下;
log4j.rootLogger=DEBUG, DATABASE
log4j.appender.DATABASE = com.logsave.ChatSaveAppender
log4j.appender.DATABASE.Driver = oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.URL = jdbc:oracle:thin:@127.0.0.1:1521:orc2
log4j.appender.DATABASE.User = myuser
log4j.appender.DATABASE.Password = mypassword
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=%m
也可以在程序中引用;
ChatSaveAppender chatAppender = new ChatSaveAppender();
chatAppender.setUser("myuser");
chatAppender.setPassword("marryfive");
chatAppender.setDriver("oracle.jdbc.driver.OracleDriver");
chatAppender.setURL("jdbc:oracle:thin:@192.168.0.213:1521:orc2");
org.apache.log4j.PatternLayout layout = new PatternLayout();
layout.setConversionPattern("%m");
chatAppender.setLayout(layout);
logger.addAppender(chatAppender);
例如;想将聊天记录的log存到数据库中,要将聊天记录的相关信息.fromid,toid,fromname,toname,time,content分开来,存到数据库中的不同字段时,将要怎么做呢. 可以继承JDBCAppender,对方法flushBuffer重写.如下;
import org.apache.log4j.jdbc.JDBCAppender;
import java.util.Iterator;
import java.sql.SQLException;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.spi.LoggingEvent;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Element;
import java.util.Map;
import java.util.HashMap;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
public class ChatSaveAppender extends JDBCAppender {
public void flushBuffer() {
//Do the actual logging
removes.ensureCapacity(buffer.size());
for (Iterator i = buffer.iterator(); i.hasNext(); ) {
try {
LoggingEvent logEvent = (LoggingEvent) i.next();
Object obj = logEvent.getMessage();
String msg = obj.toString();
System.out.println(msg);
//例如log是与xml文件输出的。格式如;<hi toname="小猫" cmd="msg" time="2007-5-21 00:00:41" fromid="2871146" toid="2534882" content="您好" status="0" fromname="小猪"/>
Map<String,String> map = xmlToMap(msg);//将xml解析成map
if(map!=null){
String fromid = "";
String fromname = "";
String toid = "";
String toname = "";
String content ="";
String time = "";
String status = "";
if(map.containsKey("fromid")){
fromid = map.get("fromid");
}
if(map.containsKey("fromname")){
fromname = ""+ map.get("fromname");
}
if(map.containsKey("toid")){
toid = ""+ map.get("toid");
}
if(map.containsKey("toname")){
toname = ""+ map.get("toname");
}
if(map.containsKey("content")){
content = ""+ map.get("content");
}
if(map.containsKey("status")){
status = ""+ map.get("status");
}
if(map.containsKey("time")){
time = ""+ map.get("time");
}
String sql = "insert into CHAT_LOG (FROMID,FROMNAME,TOID,TONAME,CONTENT,TIME,STATUS) values ("
+fromid+",'"+fromname+"',"+toid+",'"+toname+"','" + content
+ "',to_date('"+time+"','yyyy-mm-dd hh24-mi-ss'),"+status+")";
execute(sql);
}
removes.add(logEvent);
} catch (SQLException e) {
errorHandler.error("Failed to excute sql", e,
ErrorCode.FLUSH_FAILURE);
}
}
// remove from the buffer any events that were reported
buffer.removeAll(removes);
// clear the buffer of reported events
removes.clear();
}
//下面解析log,由xml解析成map,用dom4j.
public Map<String, String> xmlToMap(String parameters) {
Map map =null;
if (parameters != null && parameters.indexOf(CMD_NAME)>0 ) {
try {
Document document = DocumentHelper.parseText(parameters);
if (document != null) {
Element root = document.getRootElement();
if (root != null && root.getName().equalsIgnoreCase(ROOT_NAME)) {
map = attributeToMap(root);
root = null;
}
}
document = null;
} catch (Exception e) {
System.out.println("format String:\n"+parameters + e);
} finally {
parameters = null;
}
}
return map;
}
public Map<String, String> attributeToMap(Element root) {
List<Attribute> attributes = root.attributes();
Map<String, String> map = new HashMap<String, String>(5);
for (Attribute attribute : attributes) {
map.put(attribute.getName(), attribute.getText());
}
attributes = null;
root = null;
return map;
}
}
log4j.properties文件可以写成如下;
log4j.rootLogger=DEBUG, DATABASE
log4j.appender.DATABASE = com.logsave.ChatSaveAppender
log4j.appender.DATABASE.Driver = oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.URL = jdbc:oracle:thin:@127.0.0.1:1521:orc2
log4j.appender.DATABASE.User = myuser
log4j.appender.DATABASE.Password = mypassword
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=%m
也可以在程序中引用;
ChatSaveAppender chatAppender = new ChatSaveAppender();
chatAppender.setUser("myuser");
chatAppender.setPassword("marryfive");
chatAppender.setDriver("oracle.jdbc.driver.OracleDriver");
chatAppender.setURL("jdbc:oracle:thin:@192.168.0.213:1521:orc2");
org.apache.log4j.PatternLayout layout = new PatternLayout();
layout.setConversionPattern("%m");
chatAppender.setLayout(layout);
logger.addAppender(chatAppender);
发表评论
-
hadoop keng
2016-07-28 16:12 0job is running but hang, it jus ... -
百度反向解析地址
2016-07-26 10:40 445import java.io.BufferedRead ... -
hadoop 学习路线
2016-07-12 20:09 438hadoop的绝好文章 Hadoop新手学习指导 介绍概念, ... -
spring with ejb3
2011-04-14 15:53 671由于项目需要 EJB3获取spring的上下文然后访问其中定义 ... -
websphere portlet
2010-12-22 22:22 725开发环境: websphere application ser ... -
EJB3 Local 接口调用
2010-12-22 22:14 1196EJB3中 在同一个ear中,war中的web模块要想调用ea ... -
loj4j
2010-08-08 11:30 785今天遇到个郁闷的问题。。我的项目中有错。classpath的一 ... -
事务 与 session
2010-08-07 10:38 787spring中 事务与session何时关没有关系,你可以利用 ... -
理解抽象类和接口最好的例子
2010-08-07 10:09 979抽象类(abstract class):家用电器(HomeAl ... -
Java或者JAR包获取读取资源文件的路径
2010-07-26 22:26 2281这里分为具体两种: 第一种:资源文件为一般后缀文件 第二种 ... -
jar 资源文件
2010-07-26 22:19 1047今天在做加密器的时候。遇到了读取文件的问题。在jar包的同目录 ... -
双操作
2010-07-22 21:13 701A系统是演唱会订票系统,B系统是付款系统,负责处理A系统和银行 ... -
activeMQ 与 quartz 事例
2010-06-28 15:33 1444利用spring与activeMQ 与 quartz 结合 j ... -
ant 文件
2010-06-25 15:36 570<?xml version="1.0&qu ... -
热替换
2010-06-24 09:58 777当我们在myeclipse中启动服务器后,我们改的代码能替换到 ... -
websphere
2010-06-23 09:03 874在websphere中的应用程序服务器中的进程定义,在里面的J ... -
client.jar
2010-06-22 21:03 765记得以前有所测程序时,都要加上服务器的jar包,如jbossc ... -
response request
2010-06-22 20:52 860response.getoutstreame().其实我们页面 ... -
jdk 更新
2010-01-26 22:46 1125今天我装了个jdk1.6,以前我的是1.5的。后来发现在cmd ... -
ejb3 jpa初探
2010-01-26 14:58 1704通过查询和插入来显示e ...
相关推荐
在PostgreSQL数据库系统中,`module_pg_flushbuffer`是一个关键组件,主要负责数据缓冲区的刷新操作。在数据库系统中,缓冲区管理是性能优化的关键部分,因为它减少了磁盘I/O,提高了数据读写速度。当对数据库进行...
3. **刷新策略**:redo log buffer的内容并不会一直停留在内存中,数据库系统会采用一种称为"flush"的策略将buffer中的条目定期写入磁盘。这可以是定时触发,也可以是在buffer满时触发,或者在特定的数据库操作(如...
MySQL 提供了一种强大的工具,即二进制日志(bin-log),用于记录所有的更改操作,以便于进行数据库的备份和恢复。本文将详细介绍如何利用 bin-log 日志来还原数据库。 首先,我们确认 MySQL 服务器是否已经启用了 ...
4. **数据库实例挂起或重启**:为了防止数据丢失,当数据库实例关闭或意外断电时,系统会尝试将redo log buffer的内容写入磁盘。 5. **DBWn(Database Writer)进程**:虽然DBWn进程主要负责将数据块从缓存写入数据...
JBoss7.x or JBoss EAP 6.x2、日志文件配置详见项目的log4j.properties文件3、访问如下地址日志生成到D:\log4jtest.log4、访问如下地址日志生成到D:\cuntest.log5、buffer默认8k,至少写满8k才会flush到磁盘日志文件...
在数据库的更新操作中,最核心的知识点涉及到几个关键部分:数据库的Buffer Pool、redo log buffer、以及LRU/flush链表。这些数据库内核级的组件共同协作以保证数据的一致性和性能。 Buffer Pool是数据库中用来缓存...
根据提供的文件信息,可以看出本文主要围绕MySQL数据库的基本操作与管理展开。尽管原文存在大量重复以及表述不清晰的地方,但还是可以从中提炼出一系列关键知识点。接下来将这些知识点进行整理和扩展,以便更好地...
在讨论数据库管理系统中...通过以上分析,我们可以看出,flush链表是数据库管理系统中Buffer Pool内存管理中不可或缺的一个组件。通过flush链表,系统能够有效地追踪和管理脏页,确保数据的一致性和系统的高效运行。
手册还涉及了一些高级配置,如`innodb_flush_log_at_trx_commit`控制事务日志的刷写策略,以平衡性能和数据安全性。`innodb_lock_wait_timeout`定义了事务在等待资源时的最大等待时间,超过该时间将被回滚,防止死锁...
5. 磁盘IO优化:通过调整磁盘IO参数,例如sync_binlog、innodb_flush_log_at_trx_commit等,来提高MYSQL数据库的性能。 MYSQL数据库慢SQL定位与分析 MYSQL数据库慢SQL定位与分析是MYSQL数据库性能优化的重要步骤。...
实验1-16:InnoDB的I/O相关配置,根据公式:事务日志的总大小=Innodb_log_files_size*Innodb_log_files_in_group来设置64M大小的事务日志缓冲区,并设置在每次事务提交执行log写入cache,并flush到磁盘。 * InnoDB...
MySQL 数据库中的 `innodb_flush_log_at_trx_commit` 和 `sync_binlog` 是两个非常重要的配置参数,它们直接影响到数据库的性能与数据安全性。理解并合理设置这两个参数对于优化数据库系统至关重要。 首先,`innodb...
Log4j2异步日志打印机制详解 Log4j2是一个功能强大的日志记录库,它提供了异步日志打印机制,以提高日志记录效率和减少对正常业务的影响。下面将详细介绍Log4j2异步日志打印机制的原理和实现方法。 什么是异步日志...
- 创建和配置DM数据库:详细说明了如何使用数据库配置工具和dminit命令创建数据库,注册数据库服务,查看数据库信息,以及删除数据库和服务。 7. 启动和关闭数据库: - 介绍了在不同操作系统(Windows和Linux)下...
例如,调整`innodb_buffer_pool_size`来匹配SSD的容量,设置`innodb_flush_log_at_trx_commit`以平衡安全性与性能,或者调整`innodb_flush_method`来利用O_DIRECT选项以减少操作系统层面的I/O开销。 此外,验证答案...
7. DB2的配置:使用db2set命令配置DB2的参数,例如DB2_EXTENDED_OPTIMIZATION、DB2_DISABLE_FLUSH_LOG等。 知识点:DB2数据库的配置管理,包括参数的设置和管理。 8. TCP/IP配置:使用/etc/services文件配置DB2的...
3. 管理DM线程:对DM数据库系统中涉及的各种线程类型进行了说明,包括监听线程、工作线程、IO线程、调度线程、日志FLUSH线程、日志归档线程、日志重做线程、日志APPLY线程、定时器线程、逻辑日志归档线程、数据守护...
4. JDBC(Java Database Connectivity)是一种Java API,用于连接和操作数据库。 5. 在JSP中,使用JDBC连接数据库需要加载驱动程序,例如com.mysql.jdbc.Driver。 6. 连接数据库时需要提供数据库的URL、用户名和...