Example #1
0
        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;
        }
Example #3
0
        /// <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);
 }
Example #5
0
 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...
         }
     }
 }
Example #6
0
        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!");
            }
        }
Example #7
0
        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;
        }