㈠ 如何將Web日誌文件導入資料庫
這幾天寫論文做實驗,Web日誌挖掘部分第一步就是對Web日誌進行預處理。所謂預處理就是將Web日誌中沒有用的記錄和欄位去掉。根據我的實驗需要需要保留的是有效用戶對於有效頁面的訪問時間,就這三個欄位就可以。做數據預處理的第一步是將以文本形式保存的Web日誌導入資料庫,然後利用sql語句對其所導入的資料庫表進行操作就可以完成數據與處理。
Web日誌的形式如下圖所示:
這個部分之前一直不是很明白,詢問去年做過這個工作的兩個哥們,其中一個說用C++中STL部分可以實現,另一個說是將日誌按行讀取,分割內容存入資料庫,然後讀取下一行,卻沒有做具體工作。總之這兩個人所說的都是利用編碼來實現文本的讀取和內容的分割最後再導入資料庫。這樣在理論上是可行的,但是實際操作起來還是有很大的麻煩的,以現在的時間來看是來不及的。
還好在相關文獻上看到有人提到用SQL
Server2000種的DTS工具可以實現這個導入功能。在網上進行搜索居然沒有任何有用的類似於教程的文章,手頭還沒有SQL
Server的書籍,只能自己研究了,經過了一個小時的研究終於將這個問題解決。
Web日誌文件雖然是文本文件,但是它的後綴是.log,如果想將其導入資料庫必須首先將其後綴改稱.txt。然後打運行SQL
Server2000的服務管理器,打開企業管理器。建立新的資料庫Weblog,然後利用工具DTS進行操作,DTS即數據轉換服務。操作為「工具—〉數據轉換服務—〉導入數據」,出現如下對話框如圖2所示。
在圖3對話框中的數據源選擇文本文件,對話框變成圖4所示界面。點擊文件名處右邊的瀏覽按鈕可以選擇所要讀取的文本文件形式的日誌。這里只能讀取.txt文件,所以前面一定要將Web日誌的後綴.log改成後綴.txt。
根據圖1我們看到Web日誌頭四行都是日誌的信息,比如時間和文件格式,所以在跳過行裡面要寫跳過4行。下一步進入圖6所示界面。
在圖6種需要選擇如何對文本文件中每一行的各個欄位進行區分。選擇方式如圖中所示。由於Web日誌每行為一個記錄,每條記錄中每一個欄位中間都是用空格來進行分隔,所以選擇「其它」然後在其對話框中填入一個空格鍵「
」,系統就將對數據進行處理進行劃分,得到分割好的記錄。當然相應欄位的名稱是錯誤的,這個可以在以後生成資料庫表文件後對表進行設計修改。點擊下一步進入圖7所示界面。
單擊下一步之後就可以完成數據導入。
然後刷新資料庫Weblog,就可以看到與Web日誌同名的新的資料庫表文件。修改相應欄位的名稱,就可以完成數據的導入和資料庫表的建立。
接下來可以利用查詢分析器對Web日誌的資料庫表進行操作,完成數據預處理,進而進行日誌挖掘或者流量分析。
㈡ 登記日誌文件時為什麼必須先寫日誌文件,後寫資料庫
把對數據的修改寫到資料庫中和把寫表示這個修改的日誌記錄寫到日誌文件中是兩個不同的操作。有可能在這兩個操作之間發生故障,即這兩個寫操作只完成了一個。如果先寫了資料庫修改,而在運行記錄中沒有登記下這個修改,則以後就無法恢復這個修改了。如果先寫日誌,但沒有修改資料庫,按日誌文件恢復時只不過是多執行一次不必要的UNDO操作,並不會影響資料庫的正確性。所以為了安全,一定要先寫日誌文件,即首先把日誌記錄寫到日誌文件中,然後寫資料庫的修改。這就是「先寫日誌文件」的原則。
㈢ 如何配置log4j2日誌記錄至資料庫
配置log4j2日誌記錄至資料庫
1、建立用於保存日誌的資料庫表:
CREATETABLE`sys_log`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`level`varchar(32)NOTNULL,
`logger`varchar(100)NOTNULL,
`message`varchar(1000)DEFAULTNULL,
`exception`varchar(10000)DEFAULTNULL,
`date_add`datetimeNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=19DEFAULTCHARSET=utf8mb4;
2、配置 databaseAppender :
<JDBCname="databaseAppender"tableName="sys_log">
<ConnectionFactoryclass="cc.s2m.web.s2mBlog.util.StaticProp"method="getDatabaseConnection"/>
<Columnname="date_add"isEventTimestamp="true"/>
<Columnname="level"pattern="%level"/>
<Columnname="logger"pattern="%logger"/>
<Columnname="message"pattern="%message"/>
<Columnname="exception"pattern="%ex{full}"/>
</JDBC>
3、其中 cc.s2m.web.s2mBlog.util.StaticProp類的getDatabaseConnection方法為獲取可用的datasource:
DriverManagerDataSourceds=newDriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://127.0.0.1/s2mBlog?characterEncoding=utf8");
ds.setUsername("root");
ds.setPassword("123456");
returnds.getConnection();
4、指派需要記錄的日誌,使用 databaseAppender即可:
<loggername="SYSLOG"level="INFO"additivity="false">
<appender-refref="databaseAppender"/>
</logger>