`

Linux环境下将log4j的日志存储到mongoDB

 
阅读更多

转自: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


2.安装php的mongodb扩展

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里去会更优雅.

分享到:
评论

相关推荐

    Java与log4j2整合mongoDB需要的jar包

    Java编程语言开发时,利用log4j2将日志输出到mongoDB中存储,整合以上功能时所需的jar包

    log4j日志写入mongodb

    java工程,可以直接导入到Eclipse并执行看到结果,经过调试和测试。其中包含一个操作mongoDB的工具类和Test类,方法均进过了测试。可考虑在此基础添加消息队列等其他手段提升mongoDB的写入能力

    Log4j+MongoDB 完整实例

    Log4j+MongoDB Demo

    基于MongoDB的日志系统Mongodb-Log.zip

    mongodb-log 是一个基于MongoDB的Python日志系统。 MongoDB 的 Capped Collection是一个天生的日志系统,MongoDB自己的oplog就是用它来存储的,Capped Collection的特点是可以指定Collection的大小,当记录总大小...

    slf4j输入日志到mongodb

    演示了java中怎样使用slf4j把日志记录到mongodb中

    Log4j+MongoDB

    Log4j记录日志到MongoDB完整Dome

    linux环境下mongodb配置文档及安装包

    linux环境下mongodb配置文档及安装包,安装之前一定要检查系统是多少位的,MongoDb区分位数使用 getconf LONG_BIT 命令查看

    log4mongo-net, log4net附加组件到MongoDB数据库.zip

    log4mongo-net, log4net附加组件到MongoDB数据库 用于log4net的标题上写着。 如果需要更多信息,请检查 Log4Net站点或者站点。这是 log4mongo 项目的官方. NET 实现要开始,请查看 @sammleach 博客帖子: .NET 日志...

    mongodb+log4j jar包

    mongodb+log4j jar包.整合用的包,放上来备份

    linux安装mongodb教程

    本教材为redhat linux 4系统下安装mongodb 32位版本,mongodb是一个文件数据库,其他linux系统下安装都是类似的。

    在linux下配置 和启动mongodb

    在linux下配置 和启动mongodb 此为非常简单的配置

    mongodb-linux-x86_64-4.0.18.tgz

    4、进入到 bin 目录下,编辑 mongodb.conf 文件,内容如下: dbpath=/usr/local/mongodb/db logpath=/usr/local/mongodb/logs/mongodb.log port=27017 fork=true bind_ip=0.0.0.0#允许远程连接 5、在 bin 目录下...

    Linux环境下Mongodb部署

    Linux环境下Mongodb部署,Linux版本为CentOS release 6.5,mongodb版本为3.2.10

    Linux安装mongodb客户端

    sudo vim /etc/yum.repos.d/mongodb-org-4.2.repo 写入: [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpg...

    nosql实验六- MongoDB的安装与基本操作.docx

    在 Linux 环境下安装 MongoDB 需要下载 MongoDB Linux 版,设置数据文件和日志文件的存放目录,启动 MongoDB 服务,并将其作为 Linux 服务随机启动。 二、MongoDB 文档操作 ### 插入并保存文档 MongoDB 中文档的...

    centos7 下安装MongoDB

    使用 tar 命令来解压 MongoDB 安装包,并将其移动到 /usr/local/mongodb 目录下。 4. 配置 MongoDB 创建存放数据库路径和日志文件路径,并配置 MongoDB 的配置文件。配置文件内容包括数据库路径、日志文件路径、...

    Mongodb Log4j整合jar包

    log4j-1.2.17.jar log4mongo-java-0.7.4.jar mongo-java-driver-2.9.3.jar

    Linux安装ElasticSearch与MongoDB分布式集群环境下数据同步

    Linux安装ElasticSearch与MongoDB分布式集群环境下数据同步

    CentOS7.4 安装mongodb

    CentOS7.4 安装 MongoDB CentOS7.4 安装 MongoDB 是一...用户需要获取安装包,解压缩安装包,配置环境变量,创建数据库目录和日志文件夹,修改 MongoDB 配置文件,启动 MongoDB,最后使用 Robo 3T 工具连接 MongoDB。

    mongodb保存日志

    C#写的mongodb保存日志C#写的mongodb保存日志C#写的mongodb保存日志C#写的mongodb保存日志C#写的mongodb保存日志C#写的mongodb保存日志

Global site tag (gtag.js) - Google Analytics