- 浏览: 74773 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
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 406import java.io.BufferedRead ... -
hadoop 学习路线
2016-07-12 20:09 410hadoop的绝好文章 Hadoop新手学习指导 介绍概念, ... -
spring with ejb3
2011-04-14 15:53 648由于项目需要 EJB3获取spring的上下文然后访问其中定义 ... -
websphere portlet
2010-12-22 22:22 703开发环境: websphere application ser ... -
EJB3 Local 接口调用
2010-12-22 22:14 1172EJB3中 在同一个ear中,war中的web模块要想调用ea ... -
loj4j
2010-08-08 11:30 761今天遇到个郁闷的问题。。我的项目中有错。classpath的一 ... -
事务 与 session
2010-08-07 10:38 758spring中 事务与session何时关没有关系,你可以利用 ... -
理解抽象类和接口最好的例子
2010-08-07 10:09 940抽象类(abstract class):家用电器(HomeAl ... -
Java或者JAR包获取读取资源文件的路径
2010-07-26 22:26 2256这里分为具体两种: 第一种:资源文件为一般后缀文件 第二种 ... -
jar 资源文件
2010-07-26 22:19 1019今天在做加密器的时候。遇到了读取文件的问题。在jar包的同目录 ... -
双操作
2010-07-22 21:13 677A系统是演唱会订票系统,B系统是付款系统,负责处理A系统和银行 ... -
activeMQ 与 quartz 事例
2010-06-28 15:33 1402利用spring与activeMQ 与 quartz 结合 j ... -
ant 文件
2010-06-25 15:36 554<?xml version="1.0&qu ... -
热替换
2010-06-24 09:58 753当我们在myeclipse中启动服务器后,我们改的代码能替换到 ... -
websphere
2010-06-23 09:03 846在websphere中的应用程序服务器中的进程定义,在里面的J ... -
client.jar
2010-06-22 21:03 738记得以前有所测程序时,都要加上服务器的jar包,如jbossc ... -
response request
2010-06-22 20:52 834response.getoutstreame().其实我们页面 ... -
jdk 更新
2010-01-26 22:46 1098今天我装了个jdk1.6,以前我的是1.5的。后来发现在cmd ... -
ejb3 jpa初探
2010-01-26 14:58 1674通过查询和插入来显示e ...
相关推荐
module_pg_flushbuffer
JBoss7.x or JBoss EAP 6.x2、日志文件配置详见项目的log4j.properties文件3、访问如下地址日志生成到D:\log4jtest.log4、访问如下地址日志生成到D:\cuntest.log5、buffer默认8k,至少写满8k才会flush到磁盘日志文件...
4、查看mysql日志:mysqlbinlog mysql-bin.000001mysqlbinlog mysql-bin.000006 > /root/bbx.log 5、使用新的binlog日志:(更新数据库日志) 代码如下:方法一:[root@bogon mysql]# mysqladmin -uroot -p flush-...
4. JDBC(Java Database Connectivity)是一种Java API,用于连接和操作数据库。 5. 在JSP中,使用JDBC连接数据库需要加载驱动程序,例如com.mysql.jdbc.Driver。 6. 连接数据库时需要提供数据库的URL、用户名和...
这次修改了下面四个配置项: 1)将 innodb_flush_log_at_trx_commit 配置设定为0;按过往经验设定为0,插入速度会有很大提高。 0: Write the log buffer to the log file and flush the log file every second, but ...
log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS Z} %p [%c{1}] [Azkaban] %m%n 5. 在azkaban-exec-server目录下...
14 当我们更新Buffer Pool中的数据时,flush链表有什么用.pdf
[client] port=3306 [mysql] no-beep default-character-set=utf8 [mysqld] datadir=D:/Data port=3306 server-id=...log_file_size=1G innodb_log_buffer_size=8M innodb_flush_log_at_trx_commit=2 innodb_file_per_t
4、flush privileges ;--立即启用修改 5、revoke all on *.* from tester;--取消用户所有数据库(表)的所有权限 6、delete from mysql.user where user='tester';--删除用户 7、drop database [schema名称|...
# 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。 # 主线程中每秒会将重做日志缓冲写入磁盘的...
MySQL性能优化InnoDB buffer pool flush策略
Centos7 安装 MySQL 数据库 Centos7 安装 MySQL 数据库是 Linux 服务器中的一项基本操作。MySQL 是一个开源的关系数据库管理系统,广泛应用于 Web 应用程序中。下面将详细介绍 Centos7 安装 MySQL 数据库的过程。 ...
然后执行 flush tables,把缓存在内存里的修改写入硬盘上的数据库文件,最后把备份的数据库文件复制下来。此过程,可能会造成玩家数据丢失,但是会比使用mysqldump 等备份方法速度快,锁定表时间少,从而能最大限度...
简单备份适合于只读数据库或由能轻松重新创建的批处理作业填充的数据库,或者在备份之间不必维护数据库更改的情况下。 表 1.简单备份的优缺点 优点: 缺点: 保护级别: 数据库备份可以转移到外部位置,以...
另外如果链接数据库报1251错误是数据库权限问题,请执行以下命令:cmd登录mysql后---》 第二个命令中password是新设置的自己的数据库密码,其它命令直接复制 ALTER USER 'root'@'localhost' IDENTIFIED BY '...
Session对象.flush(); //将Session中的缓存内容提交到数据库 Session对象.clear(); //清空Session中的所有缓存(彻底清除会话) Session对象.beginTransaction().begin(); //开始一个事务 4.用Session对象的以下...
实时历史数据库——Hyper Historian简介pdf,实时历史数据库——Hyper Historian简介
Log.cpp Log.h Thread.cpp Thread.h CriticalSection.cpp CriticalSection.h #ifndef _LOG_H_ #define _LOG_H_ #ifndef _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_NO_DEPRECATE #endif #include "Critical...
DBA优化数据库性能心得,很多的时侯,做Oracle DBA的我们,当应用管理员向我们通告现在应用很慢、数据库很慢的时侯,我们到数据库时做几个示例的Select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为...
这样的好处,减少了事务数据丢失的概率,而对底层硬件的 IO 要求也没有那么高(log buffer 写到文件系统中,一般只是从 log buffer 的内存转移