public MongoCollection GetCollection(MongoDBAppender appender) { MongoDatabase db = GetDB(appender); if (db == null) throw new ApplicationException("can not retreive db"); string colName = string.IsNullOrWhiteSpace(appender.CollectionName) ? "logs" : appender.CollectionName; MongoCollection collection = db.GetCollection(colName); if (!string.IsNullOrWhiteSpace(appender.ShardKey)) { Uri u = GetConnectionString(appender); string col = u + "#" + colName; bool ok; if (!_colmap.TryGetValue(col, out ok) || !ok) { lock (_colmap) { _colmap.AddOrUpdate(col, true, (s, b) => true); ShardCollection(collection, appender); } } } return collection; }
public void TestFixtureSetUp() { log4net.Config.XmlConfigurator.Configure(); var appenders = log.Logger.Repository.GetAppenders(); Assert.IsTrue(appenders.Length > 0, "Seems that MongoDB Appender is not configured"); appender = appenders[0] as MongoDBAppender; Assert.IsNotNull(appender, "MongoDBAppender is expected to be the only one configured for tests"); // Use mongo collection configured at appender level for tests collection = appender.LogCollection; }
/// <summary> /// 创建MongoDBAppender /// </summary> /// <returns>返回logName</returns> public static string CreateMongoDBAppender() { var hier = LogManager.GetRepository(); if (hier == null) { return(string.Empty); } MongoDBAppender mongoDBAppender = new MongoDBAppender(); mongoDBAppender.Name = string.Format("mongoDBAppender_{0}", DateTime.Now.Ticks); mongoDBAppender.ConnectionString = LogDBString; mongoDBAppender.CollectionName = "logs"; mongoDBAppender.BufferSize = 2; #if DEBUG mongoDBAppender.BufferSize = 1; #endif mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "level", Layout = new Layout2RawLayoutAdapter(new PatternLayout("%level")) }); mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "appid", Layout = new Layout2RawLayoutAdapter(new CustomLayout("%appid")) }); mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "serverip", Layout = new Layout2RawLayoutAdapter(new CustomLayout("%serverip")) }); mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "method", Layout = new Layout2RawLayoutAdapter(new CustomLayout("%method")) }); mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "title", Layout = new Layout2RawLayoutAdapter(new CustomLayout("%title")) }); mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "index", Layout = new Layout2RawLayoutAdapter(new CustomLayout("%index")) }); mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "group", Layout = new Layout2RawLayoutAdapter(new CustomLayout("%group")) }); mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "message", Layout = new Layout2RawLayoutAdapter(new CustomLayout("%clientMessage")) }); mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "exception", Layout = new Layout2RawLayoutAdapter(new ExceptionLayout()) }); mongoDBAppender.AddParameter(new MongoDBAppenderParameter { ParameterName = "logdate", Layout = new RawTimeStampLayout() }); BasicConfigurator.Configure(mongoDBAppender); mongoDBAppender.ActivateOptions(); return(mongoDBAppender.Name); }
protected IAppender CreateMongoUnbufferedAppender(Boolean looseFix) { _mongoAppender = new MongoDBAppender { Settings = new MongoLog() { ConnectionString = String.Format(connectionString, "test-db-log"), CollectionName = "logs", LooseFix = looseFix, } }; _mongoAppender.ActivateOptions(); return(_mongoAppender); }
public MongoDatabase GetDB(MongoDBAppender appender) { Uri u = GetConnectionString(appender); MongoDatabase db; if (_dbmap.TryGetValue(u, out db) && db != null) return db; else { MongoUrl url = MongoUrl.Create(u.ToString()); MongoServerSettings settings = MongoServerSettings.FromUrl(url); lock (_dbmap) //lock only during creation... { var conn = new MongoServer(settings); string dbname = string.IsNullOrWhiteSpace(url.DatabaseName) ? DEFAULT_DB : url.DatabaseName; db = conn.GetDatabase(dbname); EnableSharding(db); return _dbmap.AddOrUpdate(u, db, (uri, currentDb) => db); //replaces existing ones... } } }
static void ShardCollection(MongoCollection col, MongoDBAppender appender) { var cmd = new CommandDocument { { "shardCollection", col.Database.Name + '.' + col.Name }, { "key", new BsonDocument(appender.ShardKey, 1) }, }; try { CreateIndex(col, appender.ShardKey); MongoServer server = col.Database.Server; var dbCfg = new MongoDatabaseSettings(); var adminDb = new MongoDatabase(server, "admin", dbCfg); server.Connect(); CommandResult shcr = adminDb.RunCommand(cmd); } catch (MongoCommandException mex) { if (!mex.Message.ToLower().Contains("already ")) throw; else Console.WriteLine("Sharding already enabled!"); } }
static Uri GetConnectionString(MongoDBAppender appender) { if (appender == null) throw new ArgumentNullException("appender"); Uri u = new Uri(string.IsNullOrWhiteSpace(appender.ConnectionString) ? DEFAULT_CONNECTION + DEFAULT_DB : appender.ConnectionString); return u; }