Mongodb的日志扩展--logback(顶)
2016-02-22 16:04
429 查看
所需的jar包
使用方式:
<!-- LogBack --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.3</version> </dependency>
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.5.2</version> </dependency>
package ch.qos.logback.classic.db.ext; import ch.qos.logback.core.UnsynchronizedAppenderBase; import com.mongodb.*; import java.net.UnknownHostException; /** * * * 类说明:logback的日志扩展基础类 * * @author 作者 LzwGlory * @version 创建时间:2016年2月22日 下午3:58:14 * */ public abstract class MongoDBAppenderBase<E> extends UnsynchronizedAppenderBase<E> { private Mongo mongo; private DBCollection eventsCollection; private String host = "localhost"; private int port = 27017; private String dbName = "db"; private String collectionName; private String username; private String password; protected String source; private int connectionsPerHost = 10; private int threadsAllowedToBlockForConnectionMultiplier = 5; private int maxWaitTime = 1000 * 60 * 2; private int connectTimeout; private int socketTimeout; private boolean autoConnectRetry; private boolean slaveOk; private boolean safe; private int w; private int wtimeout; private boolean fsync; protected MongoDBAppenderBase(String collectionName) { this.collectionName = collectionName; } @Override public void start() { try { connectToMongoDB(); super.start(); } catch (UnknownHostException e) { addError( "Error connecting to MongoDB server: " + host + ":" + port, e); } } private void connectToMongoDB() throws UnknownHostException { mongo = new Mongo(new ServerAddress(host, port), buildOptions()); DB db = mongo.getDB(dbName); if (username != null && password != null) db.authenticate(username, password.toCharArray()); eventsCollection = db.getCollection(collectionName); } private MongoOptions buildOptions() { final MongoOptions options = new MongoOptions(); options.connectionsPerHost = connectionsPerHost; options.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier; options.maxWaitTime = maxWaitTime; options.connectTimeout = connectTimeout; options.socketTimeout = socketTimeout; options.autoConnectRetry = autoConnectRetry; options.slaveOk = slaveOk; options.safe = safe; options.w = w; options.wtimeout = wtimeout; options.fsync = fsync; return options; } protected abstract BasicDBObject toMongoDocument(E event); @Override protected void append(E eventObject) { eventsCollection.insert(toMongoDocument(eventObject)); } @Override public void stop() { if (mongo != null) mongo.close(); super.stop(); } public void setHost(String host) { this.host = host; } public void setPort(int port) { this.port = port; } public void setDbName(String dbName) { this.dbName = dbName; } public void setCollectionName(String collectionName) { this.collectionName = collectionName; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setConnectionsPerHost(int connectionsPerHost) { this.connectionsPerHost = connectionsPerHost; } public void setThreadsAllowedToBlockForConnectionMultiplier( int threadsAllowedToBlockForConnectionMultiplier) { this.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier; } public void setMaxWaitTime(int maxWaitTime) { this.maxWaitTime = maxWaitTime; } public void setConnectTimeout(int connectTimeout) { this.connectTimeout = connectTimeout; } public void setSocketTimeout(int socketTimeout) { this.socketTimeout = socketTimeout; } public void setAutoConnectRetry(boolean autoConnectRetry) { this.autoConnectRetry = autoConnectRetry; } public void setSlaveOk(boolean slaveOk) { this.slaveOk = slaveOk; } public void setSafe(boolean safe) { this.safe = safe; } public void setW(int w) { this.w = w; } public void setWtimeout(int wtimeout) { this.wtimeout = wtimeout; } public void setFsync(boolean fsync) { this.fsync = fsync; } public String getSource() { return source; } public void setSource(String source) { this.source = source; } }
package ch.qos.logback.classic.db.ext; import jodd.datetime.JDateTime; import ch.qos.logback.classic.spi.ILoggingEvent; import com.mongodb.BasicDBObject; /** * * * 类说明:自定义Mongodb输出类 * * @author 作者 LzwGlory * @version 创建时间:2016年2月22日 下午3:59:14 * */ public class MongoDBAppender extends MongoDBAppenderBase<ILoggingEvent> { public MongoDBAppender() { super("loggingEvents"); } @Override protected BasicDBObject toMongoDocument(ILoggingEvent eventObject) { final BasicDBObject doc = new BasicDBObject(); doc.append("date", new JDateTime(eventObject.getTimeStamp()).toString("YYYY-MM-DD hh:mm:ss")); doc.append("source", source); doc.append("level", eventObject.getLevel().toString()); doc.append("logger", eventObject.getLoggerName()); doc.append("thread", eventObject.getThreadName()); doc.append("message", eventObject.getFormattedMessage()); if (eventObject.getMdc() != null && !eventObject.getMdc().isEmpty()) doc.append("mdc", eventObject.getMdc()); //... return doc; } }
使用方式:
<!-- mongo 日志 --> <appender name="MONGO" class="ch.qos.logback.classic.db.ext.MongoDBAppender"> <host>127.0.0.1</host> <port>27017</port> <username>lzw</username> <password>123</password> <dbName>logdb</dbName> <collectionName>logdb</collectionName> <source>XXX</source> </appender>
<root level="DEBUG"> <appender-ref ref="MONGO" /> </root>
相关文章推荐
- mongodb之浅析性能&应用场景-1
- windows下mongodb安装
- 两款MongoDB的可视化管理工具
- MongoDB的备份(mongodump)与恢复(mongorestore)
- windows下安装和配置mongoDB
- mongodb自学
- Mongodb 安装配置,启动关闭
- MongoDB常用命令
- MongoDB 进阶(命令\固定集合)
- 浅谈MongoDB中几种不同查询方法
- windows下mongodb安装与使用整理
- 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
- mongodb
- 用户方式登陆MongoDB
- 初建MongoDB
- mongodb3.2系统性学习——5、游标 模糊查询 findAndModify函数
- MongoDb的基本使用以和关系性数据库的基本差异
- 如何将MongoDB做一项windows服务启动
- MONGODB(四)——DBObject与JavaBean转换
- MongoDB javaApi