转自:http://my.oschina.net/chinaearl/blog/111552
单位有很多java项目,一般上生产的项目日志都是通过log4j打印在本地,平常开发同学要查看日志还要给他们开个专门的FTP,不利于集中维护管理,近日因工作需要,在网上看到相关技术资料,可把log4j日志直接存放到mongoDB,在mongoDB的可以更好的查询日志。非常利于集中管理和维护。以下是自己和开发同学配置部署的过程,可谓是一波三折:
Log4mongo for Java官方介绍:
- MongoDbAppender - stores the LogEvent in a BSONified form
- ExtendedMongoDbAppender - Extends MongoDbAppender by allowing you to add top level elements
- MongoDbPatternLayoutAppender - supports logging data in a custom format
1.首先下载并安装mongoDB,并运行 ,下载安装请参考我的上篇博文
版本要求(MongoDB Server v2.0+ (tested with 2.2.2))
2.下载Mongo Java driver jar包
3.下载 Log4J jar包 注意版本,一定要1.2.16及以上。
4.下载 log4mongo-java jar包
5.请将这三个jar文件放置在你的项目classpath中。
6.在你的classpath中创建一个名为log4j.properties的文件
7.在log4j.properties文件尾添加以下几行
1
2
3
4
|
log4j.rootLogger=INFO, MongoDB log4j.appender.MongoDB=org.log4mongo.MongoDbAppender log4j.appender.MongoDB.databaseName=appname log4j.appender.MongoDB.collectionName=log |
如果你的mongoDB不是在本地,那添加mongoDB数据库的IP地址和端口
1
2
|
log4j.appender.MongoDB. hostname =172.17.0.9
log4j.appender.MongoDB.port=27017 |
创建一个Java类,如:
1
2
3
4
5
6
7
8
|
import org.apache.log4j.Logger;
public class LogTest { public static void main(String[] args) {
Logger logger = Logger.getLogger(LogTest.class);
logger.error( "Don't panic" );
}
} |
编译和运行这个类
碰到问题,mongoDB里的日志数据始终不见出来。后来发现问题,原因是项目要部署到tomcat上才可能生效。
以下是开发同学整理的部署情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
1、建立一个web项目,项目名为logmongo,在项目当中引入jar包,见步骤2~4(指你写的)描述,共3个jar包。 2、log4j.properties内容: log4j.rootLogger=debug, stdout, R, MongoDB log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-d{MM- dd HH:mm:ss.SSS} %-5p - [%c{1}.%t] %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=logs /client .log
log4j.appender.R.MaxFileSize=1000KB log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%-d{MM- dd HH:mm:ss.SSS} %-5p - [%c{1}.%t] %m%n
log4j.appender.MongoDB=org.log4mongo.MongoDbAppender log4j.appender.MongoDB.databaseName=appname log4j.appender.MongoDB.collectionName=log log4j.appender.MongoDB. hostname =172.17.0.9
log4j.appender.MongoDB.port=27017 3、web.xml内容 <?xml version= "1.0" encoding= "UTF-8" ?>
<web-app version= "3.0" xmlns= "http://java.sun.com/xml/ns/javaee"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http: //java .sun.com /xml/ns/javaee
http: //java .sun.com /xml/ns/javaee/web-app_3_0 .xsd">
<display-name>< /display-name >
<welcome- file -list>
<welcome- file >index.jsp< /welcome-file >
< /welcome-file-list >
<context-param>
<param-name>log4jConfigLocation< /param-name >
<param-value>classpath: /log4j .properties< /param-value >
< /context-param >
<servlet>
<servlet-name>log4jServlet< /servlet-name >
<servlet-class>log4jServlet< /servlet-class >
< /servlet >
<servlet-mapping>
<servlet-name>log4jServlet< /servlet-name >
<url-pattern> /log4jServlet < /url-pattern >
< /servlet-mapping >
< /web-app >
4、log4jServlet.java import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
public class log4jServlet extends HttpServlet { private static Logger logger = Logger.getLogger(log4jServlet.class);
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
this.doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
logger.error( "test for tomcat" );
}
} 5、部署到tomcat上运行,浏览器中输入http: //localhost :8080 /logmongo/log4jServlet 即可。
|
然后查看mongoDB,看是否有记录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
[root@zabbix bin] # ./mongo
MongoDB shell version: 2.2.2 connecting to: test
> show dbs admin (empty) appname 0.203125GB local (empty)
> use appname switched to db appname > db.log.findOne() { "_id" : ObjectId( "513427c2abef7a8b93610a70" ),
"timestamp" : ISODate( "2013-03-04T04:49:06.060Z" ),
"level" : "ERROR" ,
"thread" : "http-8080-1" ,
"message" : "Don't panic" ,
"loggerName" : {
"fullyQualifiedClassName" : "log4jServlet" ,
"package" : [
"log4jServlet"
],
"className" : "log4jServlet"
},
"fileName" : "log4jServlet.java" ,
"method" : "doGet" ,
"lineNumber" : "24" ,
"class" : {
"fullyQualifiedClassName" : "log4jServlet" ,
"package" : [
"log4jServlet"
],
"className" : "log4jServlet"
},
"host" : {
"process" : "6752@yangyang" ,
"name" : "yangyang" ,
"ip" : "10.1.19.2"
}
} |
接下去,可以用PHP写个查看mongoDB数据的程序,友好的把日志通过网页形式显示出来。
MongoDB的PHP扩展安装
1.下载php扩展包:http://pecl.php.net/package/mongo
1
2
3
4
5
6
|
tar zxvf mongo-1.3.4.tgz
cd mongo-1.3.4/
#/usr/local/webserver/php/ 您的php实际安装目录 /usr/local/webserver/php/bin/phpize . /configure --with-php-config= /usr/local/webserver/php/bin/php-config
make && make install
|
php读取mongodb日志数据程序如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
<?php error_reporting (7);
$conn = new Mongo();
$db = $conn ->appname;
$collection = $db ->log;
?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
<html> <head>
<title> log4j for mongodb </title>
<meta name= "Generator" content= "EditPlus" >
<meta name= "Author" content= "" >
<meta name= "Keywords" content= "" >
<meta name= "Description" content= "" >
<style type= "text/css" >
table {
border: 1px solid #999999;
padding:0;
margin:0 auto;
border-collapse: collapse;
}
td,th {
border: 1px solid #999999;
background: #fff;
font-size:13px;
padding: 3px 3px 3px 8px;
color: #000;
}
</style> </head>
<body>
<table border= "1" width= "100%" >
<tr>
<th rowspan= "2" >ID</th>
<th rowspan= "2" >TIMESTAMP</th>
<th rowspan= "2" >LEVEL</th>
<th rowspan= "2" >THREAD</th>
<th rowspan= "2" >MESSAGE</th>
<th colspan= "3" >LOGGERNAME</th>
<th rowspan= "2" >FILENAME</th>
<th rowspan= "2" >METHOD</th>
<th rowspan= "2" >lineNumber</th>
<th colspan= "3" >CLASS</th>
<th colspan= "3" >HOST</th>
</tr>
<tr>
<td>fullyQualifiedClassName</td>
<td>package</td>
<td>className</td>
<td>fullyQualifiedClassName</td>
<td>package</td>
<td>className</td>
<td>process</td>
<td>name</td>
<td>ip</td>
</tr>
<?php $cursor = $collection ->find();
while ( $cursor ->hasNext()){
$r = $cursor ->getNext();
?> <tr>
<td><?php echo $r [_id]?></td>
<td><?php echo $r [timestamp]?></td>
<td><?php echo $r [level]?></td>
<td><?php echo $r [thread]?></td>
<td><?php echo $r [message]?></td>
<td><?php echo $r [loggerName][fullyQualifiedClassName]?></td>
<td><?php echo implode( '.' , $r [loggerName][package]);?></td>
<td><?php echo $r [loggerName][className]?></td>
<td><?php echo $r [fileName]?></td>
<td><?php echo $r [method]?></td>
<td><?php echo $r [lineNumber]?></td>
<td><?php echo $r [ 'class' ][fullyQualifiedClassName];?></td>
<td><?php echo implode( '.' , $r [ 'class' ][package]);?></td>
<td><?php echo $r [ 'class' ][className];?></td>
<td><?php echo $r [host][process]?></td>
<td><?php echo $r [host][name]?></td>
<td><?php echo $r [host][ip]?></td>
</tr>
<?php } ?> </table>
</body>
</html> |
运行效果如图:
另:log4j还可以通过配置写到MySQL数据库里去。不过论现在形式而言,存到nosql里去会更优雅.
相关推荐
这将启动 MongoDB 服务,并将数据库文件存储在 /data/mongodb/db 目录下,日志文件存储在 /data/mongodb/log 目录下。 第五步:将 MongoDB 服务加入随机启动 为了使 MongoDB 服务在系统启动时自动启动,可以将以下...
4. **创建数据文件和日志文件存放目录**:为了存储MongoDB的数据和日志文件,需要在根目录下创建相应的文件夹。 ``` mkdir mongodbdata cd mongodbdata mkdir mongodb_db mkdir mongodb_logs ``` 5. **启动...
在Linux环境下部署MongoDB是一项重要的任务,特别是在使用如CentOS 6.5这样的操作系统时。MongoDB是一个流行的开源文档数据库,适用于处理大量结构化和非结构化数据。在这个场景中,我们将讨论如何在CentOS 6.5上...
MongoDB 是一个高性能、...通过添加MongoDB的RPM存储库、安装服务、启动和设置开机启动,以及了解默认的数据和日志目录,你已经具备了在Linux环境下运行MongoDB的基本知识。记得在生产环境中加强安全性,确保数据安全。
本篇主要介绍Linux环境下安装和使用MongoDB 3.2.18版本的过程。 首先,下载MongoDB的Linux版本,这里的版本号为3.2.18,对应的压缩包文件名为`mongodb-linux-x86_64-3.2.18`。这个文件是一个二进制tgz格式的压缩包...
本篇将详细介绍MongoDB在Linux上的配置文件,日志配置以及服务(service)配置。 1. MongoDB配置文件: MongoDB的主要配置文件名为`mongod.conf`,通常位于 `/etc/mongodb/` 或 `/etc/mongod.conf` 目录下。这个文件...
在Linux环境下安装MongoDB是一项常见的任务,对于开发者和系统管理员来说至关重要。本压缩包提供了MongoDB 3.2版本的Linux安装包,下面将详细介绍如何在Linux系统中安装和部署MongoDB 3.2。 首先,确保你的Linux...
MongoDB 是一个流行的开源、高性能...以上就是MongoDB在Linux上的安装和配置过程,包括创建数据目录、配置文件、启动服务、配置环境变量、设置系统服务以及创建管理用户。这将使你能够有效地管理和运行MongoDB数据库。
本文将详细介绍如何在Linux环境下安装MongoDB,并对其进行基本配置,确保其能够稳定运行。 #### 二、准备工作 在正式开始安装之前,请确保你的Linux系统已经更新到最新版本,并且安装了必要的工具包如`wget`等。...
以下将详细介绍如何在Linux环境下安装和配置MongoDB。 首先,MongoDB的Linux安装包通常是一个二进制文件,例如在提供的压缩包文件列表中的`mongodb-linux-i686-1.8.2`,这表示的是针对Linux i686架构的MongoDB ...
3. 设置环境变量:将MongoDB的bin目录添加到PATH环境变量中,或者在启动时指定完整路径。 4. 启动MongoDB:执行`mongod`命令启动服务。 四、MongoDB的运行与管理 1. 运行MongoDB:使用`mongod`命令启动数据库...
通过以上步骤,您已经成功完成了 MongoDB 7.0 在 CentOS (Linux) 环境下的离线安装。此过程不仅确保了 MongoDB 的正常运行,还增加了系统的安全性。后续可根据需要进一步配置和优化 MongoDB 的各项功能,满足不同...
在Linux环境下部署MongoDB是开发者和系统管理员的常见任务,下面将详细介绍如何在Red Hat Enterprise Linux Server release 6.2 (Santiago)上进行MongoDB的安装。 首先,你需要访问MongoDB的官方网站...
使用 tar 命令来解压 MongoDB 安装包,并将其移动到 /usr/local/mongodb 目录下。 4. 配置 MongoDB 创建存放数据库路径和日志文件路径,并配置 MongoDB 的配置文件。配置文件内容包括数据库路径、日志文件路径、...
为了方便后续操作,还需要将MongoDB的bin目录添加到环境变量中: ```bash # 编辑/etc/profile文件 vi /etc/profile # 添加如下配置 export PATH=$PATH:/usr/local/mongodb/bin # 保存并退出 :wq # 使配置生效 ...
- 编辑 `/etc/profile` 添加 MongoDB 的环境变量,以便将 MongoDB 的 bin 目录添加到系统的路径中。 2. **配置服务器 (config server)** - 在所有三台服务器上配置 config server: - 创建配置文件,例如 `/usr/...
7. **监控与日志**:MongoDB会将日志输出到控制台,也可以通过配置文件指定日志文件路径。使用`--logpath`参数可以设置日志输出位置,如`./mongod --logpath /var/log/mongodb/mongod.log`。 8. **备份与恢复**:...
通过以上步骤,您可以成功地在Linux环境下搭建MongoDB主从集群,并实现基本的数据管理和维护功能。这样的配置能够有效地提高数据处理能力和系统可用性,特别是在高并发场景下表现更加突出。希望这些步骤能帮助您更好...
在Linux环境下安装和配置MongoDB是运维工作中的一项基本任务。本篇文章将详细讲解如何在RHEL 7.0系统上安装MongoDB 4.4.13版本,并探讨相关的配置文件设置。 首先,我们来看看提供的压缩包“mongodb-linux-x86_64-...