博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux环境下将log4j的日志存储到mongoDB
阅读量:7114 次
发布时间:2019-06-28

本文共 5308 字,大约阅读时间需要 17 分钟。

hot3.png

    单位有很多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.下载 jar包

3.下载 jar包 注意版本,一定要1.2.16及以上。

4.下载 jar包

5.请将这三个jar文件放置在你的项目classpath中。

6.在你的classpath中创建一个名为log4j.properties的文件

7.在log4j.properties文件尾添加以下几行

log4j.rootLogger=INFO, MongoDB                              log4j.appender.MongoDB=org.log4mongo.MongoDbAppender        log4j.appender.MongoDB.databaseName=appname                 log4j.appender.MongoDB.collectionName=log                   

如果你的mongoDB不是在本地,那添加mongoDB数据库的IP地址和端口

log4j.appender.MongoDB.hostname=172.17.0.9  log4j.appender.MongoDB.port=27017

创建一个Java类,如:

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、建立一个web项目,项目名为logmongo,在项目当中引入jar包,见步骤2~4(指你写的)描述,共3个jar包。2、log4j.properties内容:log4j.rootLogger=debug, stdout, R, MongoDBlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%-d{MM-dd HH:mm:ss.SSS} %-5p - [%c{1}.%t] %m%nlog4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File=logs/client.loglog4j.appender.R.MaxFileSize=1000KBlog4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%-d{MM-dd HH:mm:ss.SSS} %-5p - [%c{1}.%t] %m%nlog4j.appender.MongoDB=org.log4mongo.MongoDbAppenderlog4j.appender.MongoDB.databaseName=appnamelog4j.appender.MongoDB.collectionName=loglog4j.appender.MongoDB.hostname=172.17.0.9log4j.appender.MongoDB.port=270173、web.xml内容
index.jsp
log4jConfigLocation
classpath:/log4j.properties
log4jServlet
log4jServlet
log4jServlet
/log4jServlet
4、log4jServlet.javaimport 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,看是否有记录

[root@zabbix bin]# ./mongoMongoDB shell version: 2.2.2connecting to: test> show dbsadmin	(empty)appname	0.203125GBlocal	(empty)> use appnameswitched 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扩展包:

2.安装php的mongodb扩展

tar zxvf mongo-1.3.4.tgzcd 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-configmake && make install

php读取mongodb日志数据程序如下

appname; $collection = $db->log;?> log4j for mongodb
find(); while($cursor->hasNext()){ $r = $cursor->getNext();?>
ID TIMESTAMP LEVEL THREAD MESSAGE LOGGERNAME FILENAME METHOD lineNumber CLASS HOST
fullyQualifiedClassName package className fullyQualifiedClassName package className process name ip

运行效果如图:

另:log4j还可以通过配置写到MySQL数据库里去。不过论现在形式而言,存到nosql里去会更优雅.

转载于:https://my.oschina.net/chinaearl/blog/111552

你可能感兴趣的文章
随着传媒业的不断发展,炒作已然成为企业“一鸣惊人
查看>>
远程端口镜像(span)和本地端口镜像(rspan)
查看>>
OSI模型(OSI model)和 TCP/IP协议栈
查看>>
p12文件中导出公钥和私钥
查看>>
数据转储概念
查看>>
openstack I版的搭建二
查看>>
openstack I版的搭建六--
查看>>
Maven学习总结(六)——Maven与Eclipse整合
查看>>
CODEVS 3289 花匠
查看>>
大型网站技术架构(六)网站的伸缩性架构
查看>>
Maven学习总结(一)——Maven入门
查看>>
matlab飞机飞行
查看>>
我的友情链接
查看>>
Java基础学习总结(20)——基础语法
查看>>
CENTOS WDCP 安装及安全设置教程
查看>>
【51CTO学院三周年】编程学习之路 -- 51CTO学院
查看>>
python函数递归的几个例子
查看>>
js 简单实现 LFU
查看>>
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>
BZOJ2793[Poi2012]Vouchers——枚举
查看>>