当前位置:首页 » 数据仓库 » log4jmysql数据库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

log4jmysql数据库

发布时间: 2022-07-07 02:11:42

❶ DRUID怎么使用log4j把所有执行的sql记录到.log日志文件

1. 先登录数据库,在左侧控制面板点击“自助管理”-“数据库”,选择数据库点“管理”,点击“高级管理”
2. 出现MYSQL高级管理登录框,用您的数据库用户名,密码登录,在登陆时,需要根据您的数据库编码选择对应的语言,一般可以选择“Chinese Simplified (zh-utf-8)”和“Chinese Simplified (zh-gb2312)”,根据你的MYSQL数据库编码来确定。
3. 登陆MYSQL管理器后,左侧点击你的数据库名字,右侧会出现该数据库下所有数据表。
4. 在每行数据表右侧有一个红色的“叉”按钮,即可删除当前的表。
5. 要删除多个表,勾选每个表,点最底部的删除按钮。

❷ 使用log4j将日志写入到mysql,如何设置使得当数量超过10000条的时候以前的记录自动删除 谢谢

这个我觉得你可以在数据库做监听什么的。log4j没注意到有这个设置

❸ Log4j 配置数据库Appender出现问题。

首先把安装目录和C:\Program Files下的Microsoft SQL Server文件夹删了,删除在current_user和local_machine\software\microsoft\ 下有关 Microsoft sql server 全部信息,然后 1 打开注册表 在"开始"--"运行"键入 "regedit" 2 按下列顺序点击打开 + HKEY_LOCAL_MACHINE + SOFTWART + Microsoft + Windows + CurrentVersion + Setup + ExceptionComponents 3 将 ExceptionComponents 下面的文件夹全部删除! 如 ....... 4 重新启动: 5 重新安装 SQL Server 2000 此问题属于sql server的bug, GetComputerName 用于获取本地计算机名。客户端网络库组件 (DBMSLPCn.dll) 将该名称转换为全部大写。服务器网络库组件 (SSMSLPCn.dll) 保留返回时的名称。 当 Windows 计算机名称包含大写字母和小写字母或者都是小写字母时安装会失败,提示一般性网络错误! 解决办法就是将计算机名称改为全部大写! 我便照着将我电脑的名称改为大写,然后重启,刚才的网络错误问题没了。但又提示我 sa 登录失败。 奇怪了,我重新安装指定的是空密码,怎么安装程序自己也会sa登录失败呢?后来才想起来,卸载Sql Server 是为了保住我的数据,就偷懒没有将原先Sql Server 安装目录下的Data文件夹内的文件删除,master.mdf 和master.ldf都在。 以前的的Sql Server是设了密码的。于是感快将这两个文件删除。再重新安装一次,OK! 安装成功 建议你先改大写试一下

❹ jdbc链接MySql数据库,预编译的sql语句怎么使用批处理执行

是指应用程序的方法吧。如果你是用hibernate、iBATIS等连接数据库,直接从log4j配置文件中打开调试模式就行,如果用的自己写的jdbc连接,那就只能在执行前打印了

❺ 如何用java实现把excel表中的数据导入到mysql数据库已有的表中

packagecom.cn.util;

importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.ArrayList;
importjava.util.List;

importorg.apache.log4j.Logger;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.ss.usermodel.Cell;
importorg.apache.poi.ss.usermodel.Row;
importorg.apache.poi.ss.usermodel.Sheet;
importorg.apache.poi.ss.usermodel.Workbook;
importorg.apache.poi.xssf.usermodel.XSSFWorkbook;
importorg.springframework.web.multipart.MultipartFile;
/**
*excel读写工具类
*@authorsun.kai
*/
publicclassPOIUtil{
privatestaticLoggerlogger=Logger.getLogger(POIUtil.class);
privatefinalstaticStringxls="xls";
privatefinalstaticStringxlsx="xlsx";

/**
*读入excel文件,解析后返回
*@paramfile
*@throwsIOException
*/
publicstaticList<String[]>readExcel(MultipartFilefile)throwsIOException{
//检查文件
checkFile(file);
//获得Workbook工作薄对象
Workbookworkbook=getWorkBook(file);
//创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回
List<String[]>list=newArrayList<String[]>();
if(workbook!=null){
for(intsheetNum=0;sheetNum<workbook.getNumberOfSheets();sheetNum++){
//获得当前sheet工作表
Sheetsheet=workbook.getSheetAt(sheetNum);
if(sheet==null){
continue;
}
//获得当前sheet的开始行
intfirstRowNum=sheet.getFirstRowNum();
//获得当前sheet的结束行
intlastRowNum=sheet.getLastRowNum();
//循环除了第一行的所有行
for(introwNum=firstRowNum+1;rowNum<=lastRowNum;rowNum++){
//获得当前行
Rowrow=sheet.getRow(rowNum);
if(row==null){
continue;
}
//获得当前行的开始列
intfirstCellNum=row.getFirstCellNum();
//获得当前行的列数
intlastCellNum=row.getPhysicalNumberOfCells();
String[]cells=newString[row.getPhysicalNumberOfCells()];
//循环当前行
for(intcellNum=firstCellNum;cellNum<lastCellNum;cellNum++){
Cellcell=row.getCell(cellNum);
cells[cellNum]=getCellValue(cell);
}
list.add(cells);
}
}
workbook.close();
}
returnlist;
}
publicstaticvoidcheckFile(MultipartFilefile)throwsIOException{
//判断文件是否存在
if(null==file){
logger.error("文件不存在!");
thrownewFileNotFoundException("文件不存在!");
}
//获得文件名
StringfileName=file.getOriginalFilename();
//判断文件是否是excel文件
if(!fileName.endsWith(xls)&&!fileName.endsWith(xlsx)){
logger.error(fileName+"不是excel文件");
thrownewIOException(fileName+"不是excel文件");
}
}
(MultipartFilefile){
//获得文件名
StringfileName=file.getOriginalFilename();
//创建Workbook工作薄对象,表示整个excel
Workbookworkbook=null;
try{
//获取excel文件的io流
InputStreamis=file.getInputStream();
//根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
if(fileName.endsWith(xls)){
//2003
workbook=newHSSFWorkbook(is);
}elseif(fileName.endsWith(xlsx)){
//2007
workbook=newXSSFWorkbook(is);
}
}catch(IOExceptione){
logger.info(e.getMessage());
}
returnworkbook;
}
(Cellcell){
StringcellValue="";
if(cell==null){
returncellValue;
}
//把数字当成String来读,避免出现1读成1.0的情况
if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC){
cell.setCellType(Cell.CELL_TYPE_STRING);
}
//判断数据的类型
switch(cell.getCellType()){
caseCell.CELL_TYPE_NUMERIC://数字
cellValue=String.valueOf(cell.getNumericCellValue());
break;
caseCell.CELL_TYPE_STRING://字符串
cellValue=String.valueOf(cell.getStringCellValue());
break;
caseCell.CELL_TYPE_BOOLEAN://Boolean
cellValue=String.valueOf(cell.getBooleanCellValue());
break;
caseCell.CELL_TYPE_FORMULA://公式
cellValue=String.valueOf(cell.getCellFormula());
break;
caseCell.CELL_TYPE_BLANK://空值
cellValue="";
break;
caseCell.CELL_TYPE_ERROR://故障
cellValue="非法字符";
break;
default:
cellValue="未知类型";
break;
}
returncellValue;
}
}

❻ 如何给Log4j配上数据库连接池

我们都知道log4j是一个优秀的开源日志记录项目,我们不仅可以对输出的日志的格式自定义,还可以自己定义日志输出的目的地,比如:屏幕,文本文件,数据库,甚至能通过socket输出。
现在让我们对日志输出到数据库来进行配置
配置如下:
#---JDBC ---输出到数据库
# JDBCAppender log4j.properties file
#log4j.rootCategory=WARN,JDBC
# APPENDER JDBC
log4j.appender.JDBC=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.JDBC.driver=com.mysql.jdbc.Driver
log4j.appender.JDBC.URL=jdbc:mysql://localhost:3306/test
log4j.appender.JDBC.user=use
log4j.appender.JDBC.password=password
log4j.appender.JDBC.layout=org.apache.log4j.PatternLayout
log4j.appender.JDBC.sql=INSERT INTO LOGGING (log_date, log_level, location, message) VALUES ('%d{ISO8601}', '%-5p', '%C,%L', '%m')
表结构如下:
log_date varchar2(50)
log_levelvarchar2(5)
location varchar2(100)
messagevarchar2(1000)
笔者照做,但没有运行成功,而且此种方法是利用传统的数据库连接方法,对于数据库的管理和效率严重不足,在现在这个连接池横行的时代,为什么我们不能给给Log4j配上连接池,让Log4j利用数据连接池的连接和数据库进行通讯。现查看Log4j的Api,发现JDBCAppender这个类有以下几段话:WARNING: This version of JDBCAppender is very likely to be completely replaced in the future. Moreoever, it does not log exceptions. The JDBCAppender provides for sending log events to a database.
For use as a base class:
Override getConnection() to pass any con
nection you want. Typically this is used to enable application wide connection pooling.
Override closeConnection(Connection con) -- if you override getConnection make sure to implement closeConnection to handle the connection you generated. Typically this would return the connection to the pool it came from.
Override getLogStatement(LoggingEvent event) to proce specialized or dynamic statements. The default uses the sql option value.
原来log4j建议我们把其提供的JDBCAppender作为基类来使用,然后Override三个父类的方法:getConnection(),closeConnection(Connection con)和getLogStatement(LoggingEvent event)。
原来如此,那就写一个子类JDBCPoolAppender来替代这个JDBCAppender
JDBCPoolAppender代码和其相关代码如下:
JDBCPoolAppender.java:
package common.log;
import java.sql.Connection;
import org.apache.log4j.spi.LoggingEvent;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Iterator;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.PatternLayout;
import common.sql.MyDB;
import common.sql.GeneralDb;
public class JDBCPoolAppender extends org.apache.log4j.jdbc.JDBCAppender {
private MyDB mydb = null;
protected String sqlname=""; //增加一个数据库jndiName的属性
protected Connection
* Override 此函数来利用连接池返回一个Connetion对象
*
*/
protected Connection getConnection() throws SQLException {
try {
mydb = GeneralDb.getInstance(sqlname);
connection = mydb.getConnection();
} catch (Exception e) {
errorHandler.error("Error opening connection", e, ErrorCode.GENERIC_FAILURE);
}
return connection;
poolman.xml配置如下:
〈?xml version="1.0" encoding="UTF-8"?>
〈poolman>
〈management-mode>local〈/management-mode>
〈datasource>
〈dbname>log〈/dbname>
〈jndiName>log〈/jndiName>
〈driver>com.mysql.jdbc.Driver〈/driver>
〈url>jdbc:mysql://localhost:3306/test〈/url>
〈username>use〈/username>
〈password>password〈/password>
〈minimumSize>0〈/minimumSize>
〈maximumSize>10〈/maximumSize>
〈logFile>logs/mysql.log〈/logFile>
〈/datasource>
〈/poolman>
运行成功!对于JDBCPoolAppender的属性(比如sqlname属性)我们可以利用Log4j的反射机制随便添加,只要在配置文件给其附上值即可应用,而原来的父类里面的一些属性(username什么的)和其get,set方法由于在连接池中不需要,所以删除。而在JDBCPoolAppender类中,我也只是将getConnection 方法Override ,在这个方法中我们可以根据需要生成我们的Connection对象,另外两个方法大家可以根据需求来决定怎样Override。

❼ 使用log4j把日志信息保存到数据库

log4j包里面有一个SQL的appender,但我知道以前的版本中有bug,因为它生成SQL时用的是createStatement拼接字符串而不是PreparedStatement,因此当消息内容中有单引号或特殊符号时SQL都有语法错误执行不成功。


你需要自己扩展一下它提供自己的SQLAppender来做这件事。在网上搜索一个像decompiler这样的Java反编译器或从Apache网站去下载log4j源码来看一下SQLappender是怎么样的,我们改写它把这个bug解决了就可以用了。


如果你打算用ODBC数据源而不是JDBC来做,你需要确保你的JRE是Oracle/Sun提供的,因为像IBM的JRE就没有自带ODBC驱动程序,或者你自己去手工下载第三方的ODBC驱动程序。


从你的错误消息说 数据源找不到,对比下面这个图片,你没有设置它的 driver 参数,左边所有以 set 开头的方法就是表示你在 log4j.properties 文件中可以给它设置的参数,比如,setPassword 表示这个 JDBC Appender 有一个属性 password。


log4j.appender.mySQLAppender.password = 密码

log4j.appender.mySQLAppender.user = 用户名

。。。 其它 set 方法对应的属性列举在这里。。。


依此类推。


❽ java关于存取数据库后做日志记录问题,不是用log4j

提供建议如下:
1.每个需要被日志管理的数据库映射类都加一个功能名称属性并赋值。
2.封装hibernate中提供的save方法(增、改)和delete方法(删)。
在save方法中先判断传过来的对象的id,有id为更改,无id为新增。然后向日志管理类添加对象。操作为新增或更改,功能为对象.get功能名称,其他如操作人员及时间等应该有公共类可以取得.
删除方法类似;
大概思路应该就是这样.

❾ java开发两次都碰到log4j的问题了,明明设置了输出级别为debug就是打印不了debug级别的日志

java开发过程中会遇到各种问题,自学的话很难去解决这些问题,推荐去千锋教育学习java开发,有专业团队和老师为学生解决各种专业问题。

java开发需要学的知识有:
1.Java基础语法和oop特性;
2.数据库相关知识,例SQL语言、MySQL、非关系型数据库;
3.Web基础知识;
4.Web主流框架,例Spring、SpringMVC、Mybatis;
5.前端知识等。

想要了解更多有关java的相关信息,推荐咨询千锋教育。千锋企业合作部于2013年成立,主要针对企业用人需求和学员职业规划进行服务。经过8年发展,企业合作部已经成为千锋连接企业和学员的重要纽带。服务面对企业建立全方位、立体化、遍布全国的企业合作网络,覆盖全国一线二线城市大中小型公司,成功帮助20000余名人才实现就业,合作企业达20000余家,每年签订1000余份人才培养订单,让广大学员没有后顾之忧。