您的位置:首页 > 数据库 > Mongodb

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: