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

日志记录到数据库

发布时间: 2022-06-04 23:29:35

㈠ 如何将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>