當前位置:首頁 » 數據倉庫 » 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餘份人才培養訂單,讓廣大學員沒有後顧之憂。