当前位置: 首页 > 工具软件 > Mongodb-Log > 使用案例 >

Mongodb和log4j整合

殳经略
2023-12-01

一、       背景

在分布式系统中,有各种各样的WebService,这些服务可能分别部署在不同的服务器上,并且有各自的日志输出。为了方便对这些应用日志进行统一的管理和分析。我们可以将日志统一输出到指定的数据库系统中,而再由日志分析系统去管理。

存储日志的数据库目前考虑使用mongodb,因为它轻便、简单且与log4j整合方便,对系统的侵入性低;再者它与大型的关系型数据库相比有不少优势,比如快速查询、存储结构利于扩展、免费等等。

为解决分布式系统日志统一管理问题,对log4j和Mongodb整合问题展开一系列研究,具体相关内容在文档后面章节将进行详细介绍。

二、       Mongodb简介

Mongodb是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库与非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

在Mongodb中基本的概念是文档、集合、数据库。其和RDBMS对应术语解析如下:

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

数据库记录行/文档

column

field

数据字段/域

index

index

索引

table joins

 

表连接,MongoDB不支持

primary key

primary key

主键。MongoDB自动将_id字段设置为主键

 

三、       Mongodb的安装及启动

1.MongoDB的安装

根据你系统下载32位或64位的.msi文件,下面将以使用mongodb-win32-

x86_64-enterprise-windows-64-3.4.7-signed.msi文件在windows系统环境下进行安装为例来介绍具体步骤。

双击mongodb-win32-x86_64-enterprise-windows-64-3.4.7-signed.msi文件,按操作提示安装即可,安装过程中可以通过点击“Custom(自定义)”按钮来设置你的安装目录。

2.MongoDB的启动

创建MongoDB数据目录,eg:C:\data\db(注意:此目录不会在MongoDB安装时不会自动创建,需要我们自己创建,可通过dos或在资源管理器中创建)。

打开cmd窗口进入到C:\ProgramFiles\MongoDB\Server\3.4\bin目录下,运

MongoDB数据库目录设置命令:mongod--dbpath=C:\data\db;

数据库目录设置成功后,C:\data\db目录下将会生成如下文件:

                     运行“mongod --dbpath C:\data\db”指令启动MongoDB,指令窗口输出如下信

息表示启动成功。

 

                    打开另一个cmd窗口,进入mongodb的bin目录,运行mongo.exe指令,dos窗

口输出如下信息即连接mongodb成功。

 

 

 

连接成功后可以简单测试下:

由于它是一个JavaScript shell,可以运行一些简单的算术运算:

db命令用于查看当前操作的文档(数据库):

> db

test

插入一些简单记录然后查询:

> db.runoob.insert({x:10})

WriteResult({ "nInserted" : 1 })

> db.runoob.find()

{ "_id" :ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 }

四、log4j和MongoDB整合

1、准备jar文件

        

将上述三个jar包导入到需要和MongoDB整合的项目中,如果项目中已经导入的jar包则不需要重复导入。其中log4j需要在1.2.16以上版本。

2、配置web项目的log4j.properties文件

#log4jmongodb整合

log4j.appender.MongoDB=org.log4mongo.MongoDbAppender

#MongoDB日志数据库名,数据库可自动创建

log4j.appender.MongoDB.databaseName=test

#MongoDB日志信息表名,数据表可自动创建。建议不同应用日志使用不同的日志表

log4j.appender.MongoDB.collectionName=log1

#MongoDB服务IP

log4j.appender.MongoDB.hostname=192.168.0.113

#MongoDB服务端口号

log4j.appender.MongoDB.port=27017

#MonogoDB数据库用户名 ##此处用户名和密码可不配置

#log4j.appender.MongoDB.username=admin

#MonogoDB数据库用户密码

#log4j.appender.MongoDB.password=123456

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %.5p [%t] %l %n

 

#输出格式

log4j.logger.action=info,action_log

log4j.additivity.action=false

log4j.appender.action.Threshold=info

log4j.appender.action=org.apache.log4j.DailyRollingFileAppender

log4j.appender.action.encoding=utf-8

log4j.appender.action.File=/opt/logs/action.log

log4j.appender.action.DatePattern ='_'yyyy-MM-dd'.log'

log4j.appender.action.layout=org.apache.log4j.PatternLayout

log4j.appender.action.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %.5p [%t] %l %n

3、启动Mongodb

使用dos指令,进入Mongodb的bin目录,如下示:

 

运行指令mongod dbpath “c:\data\db”启动mongodb。(注:c:\data\db为mongodb数据库文件目录)。

如果启动成功dos窗口将输出如下示内容:

4、启动应用服务

         本次以Platform为例说明。将Platform分别部署在两个tomcat服务器上,并启动,待两个应用启动成功后,分别跑下两个应用的接口测试(eg:app用户注册接口)。

5、查询mongodb中各应用的日志表信息

         进入mongodb的bin目录,执行mongo.exe指令连接mongodb,查询test数据库中各日志信息表列表:

         可以看到test数据库中有四个数据表,其中应用日志信息表为log和log1。查看log日志信息:

查看log1日志表信息:

         查询结果表明,已经成功将两个web服务的应用日志写入mongodb中同一数据库不同的日志信息表中。

6、mongodb用户权限管理

         MongoDB安装完成后,默认是不需要输入用户名密码即可登录的,但是出于对数据库安全问题的考虑而需要设置用户名密码。

6.1  用户权限设置

关于用户权限设置主要需要了解下面几点:

         1)、MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。

                  admin数据库创建用户的dos版运行指令:

         db.createUser({

user:”admin”,                                         //用户名

pwd:”123456”,                                            //用户密码

roles:[{

role:”userAdminAnyDatabase”,     //用户角色

db:”admin”}]                                         //数据库名

 

})                         

         2)、切换到admin数据库,添加的账号才是管理员账号。

        

         3)、用户只能在用户所在数据库登录,包括管理员账号。

         4)、管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。

 

6.2  MongoDB数据库角色

         在创建MongoDB用户过程中涉及到给用户授权问题,以下是查资料搜集到mongodb中关于角色和权限的相关说明。

       6.2.1 内建的角色

                   数据库用户角色:read、readWrite;

                   数据库管理角色:dbAdmin、dbOwner、userAdmin;

                   集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

                   备份恢复角色:backup、restore;

                   所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase;

                   超级用户角色:root

                   内部角色:_system

         此外,dbOwner userAdminuserAdminAnyDatabase这几个角色提供了系统超级用户的访问。

       6.2.2 角色说明

                   read:允许用户读取指定数据库;

                   readWrite:允许用户读写指定数据库;

                   dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除、查看统计

或访问system.profile;

                   userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和

管理用户;

                   clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的

管理权限;

                   readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限;

                   readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权

限;

                   userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的

userAdmin权限;

                   dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin

权限;

                   root:只在admin数据库中可用。超级账号,超级权限。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 类似资料: