public void TEMPLATE_IS_PUT_WHEN_IS_VALID() { //Arrange var template = new TemplateInfo(_fileAccessor, _eventWriter) { FileName = "file", Name = "template" }; var rawBody = "body"; _fileAccessor.Exists("file").Returns(true); _fileAccessor.ReadAllText(template.FileName).Returns(rawBody); template.ActivateOptions(); var appender = new ElasticSearchAppender(_elasticClientFactory, "index", "type", _timer, _tolerateCallsFactory, _bulk, _logEventConverterFactory, _elasticFilters, _fileAccessor, _eventWriter) { Template = template }; //Act appender.ActivateOptions(); //Assert _elasticClient.Received().PutTemplateRaw(template.Name, rawBody); }
public void BULK_IS_NOT_INDEXED_WHEN_BULK_LIMIT_IS_ZERO() { //Arrange const int bulkSize = 0; var appender = new ElasticSearchAppender(_elasticClientFactory, "index", "type", _timer, _tolerateCallsFactory, _bulk, _logEventConverterFactory, _elasticFilters, _fileAccessor, _eventWriter) { DropEventsOverBulkLimit = false, BulkSize = bulkSize, }; _bulk.Count.Returns(bulkSize + 1); var bulk = new List <InnerBulkOperation> { new InnerBulkOperation() }; _bulk.ResetBulk().Returns(bulk); appender.ActivateOptions(); //Act appender.DoAppend(new LoggingEvent(new LoggingEventData())); //Assert _elasticClient.DidNotReceiveWithAnyArgs().IndexBulk(null); _elasticClient.DidNotReceiveWithAnyArgs().IndexBulkAsync(null); }
public void BULK_SHOULD_BE_RESET_WHEN_TIMER_ELAPSED() { //Arrange var appender = new ElasticSearchAppender(_elasticClientFactory, "index", "type", _timer, _tolerateCallsFactory, _bulk, _logEventConverterFactory, _elasticFilters, _fileAccessor, _eventWriter); _bulk.ResetBulk().Returns(new List <InnerBulkOperation>()); //Act _timer.Elapsed += Raise.Event <EventHandler>(this, null); //Assert _bulk.Received().ResetBulk(); }
public void CALLS_TOLERATOR_CREATED_WHEN_PROPERTY_CHANGED(int numOfSeconds) { //Arrange var appender = new ElasticSearchAppender(_elasticClientFactory, "index", "type", _timer, _tolerateCallsFactory, _bulk, _logEventConverterFactory, _elasticFilters, _fileAccessor, _eventWriter); appender.ActivateOptions(); //Act appender.TolerateLogLogInSec = numOfSeconds; //Assert _tolerateCallsFactory.Received().Create(numOfSeconds); }
public void EMPTY_BULK_IS_NOT_INDEXED_WHEN_TIMER_ELAPSES() { //Arrange var appender = new ElasticSearchAppender(_elasticClientFactory, "index", "type", _timer, _tolerateCallsFactory, _bulk, _logEventConverterFactory, _elasticFilters, _fileAccessor, _eventWriter); _bulk.ResetBulk().Returns(new List <InnerBulkOperation>()); //Act _timer.Elapsed += Raise.Event <EventHandler>(this, null); //Assert _elasticClient.DidNotReceiveWithAnyArgs().IndexBulk(null); _elasticClient.DidNotReceiveWithAnyArgs().IndexBulkAsync(null); }
public void TEMPLATE_IS_NOT_PUT_WHEN_IS_NOT_VALID() { //Arrange var appender = new ElasticSearchAppender(_elasticClientFactory, "index", "type", _timer, _tolerateCallsFactory, _bulk, _logEventConverterFactory, _elasticFilters, _fileAccessor, _eventWriter) { Template = new TemplateInfo() }; //Act appender.ActivateOptions(); //Assert _elasticClient.DidNotReceiveWithAnyArgs().PutTemplateRaw(null, null); }
public void BULK_IS_INDEXED_ASYNC_WHEN_TIMER_ELAPSES() { //Arrange var appender = new ElasticSearchAppender(_elasticClientFactory, "index", "type", _timer, _tolerateCallsFactory, _bulk, _logEventConverterFactory, _elasticFilters, _fileAccessor, _eventWriter); var bulk = new List <InnerBulkOperation> { new InnerBulkOperation() }; _bulk.ResetBulk().Returns(bulk); appender.IndexAsync = true; appender.ActivateOptions(); //Act _timer.Elapsed += Raise.Event <EventHandler>(this, null); //Assert _elasticClient.Received().IndexBulkAsync(bulk); }
public void INDEX_BULK_EXCEPTION_IS_NOT_THROWN_IN_APPENDER() { //Arrange var appender = new ElasticSearchAppender(_elasticClientFactory, "index", "type", _timer, _tolerateCallsFactory, _bulk, _logEventConverterFactory, _elasticFilters, _fileAccessor, _eventWriter) { IndexAsync = false }; _elasticClient.WhenForAnyArgs(x => x.IndexBulkAsync(null)).Throw(new Exception()); var bulk = new List <InnerBulkOperation> { new InnerBulkOperation() }; _bulk.ResetBulk().Returns(bulk); appender.ActivateOptions(); //Act //Assert _timer.Elapsed += Raise.Event <EventHandler>(this, null); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } #region 添加log4net try { throw new Exception("使用log4net.ElasticSearch,不使用 log4stash 操作 ElasticSearch"); //使用 log4stash var Log4NetConfig = $"log4net.Joson{(env.IsDevelopment() ? Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") : String.Empty)}.config"; loggerFactory.AddLog4Net(new Log4NetProviderOptions { Name = "Log4Net", Log4NetConfigFileName = Log4NetConfig }); } catch (Exception) { #region log4net.ElasticSearch 设置数据库 log4net.Repository.Hierarchy.Hierarchy Hierarchy = LogManager.GetRepository() as log4net.Repository.Hierarchy.Hierarchy; if (Hierarchy != null) { //get ADONetAppender var SQLServerAppender = (AdoNetAppender)Hierarchy.GetAppenders() .Where(appender => appender.Name.Equals("SQLServerAppender", StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault(); var SQLiteNetAppender = (AdoNetAppender)Hierarchy.GetAppenders() .Where(appender => appender.Name.Equals("SQLiteNetAppender", StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault(); ElasticSearchAppender ElasticSearchAppender = (ElasticSearchAppender)Hierarchy.GetAppenders() .Where(appender => appender.Name.Equals("ElasticSearchAppender", StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault(); ElasticSearchAppender ElasticSearchCustomaryAppender = (ElasticSearchAppender)Hierarchy.GetAppenders() .Where(appender => appender.Name.Equals("ElasticSearchCustomaryAppender", StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault(); if (SQLServerAppender != null) { //SQLServerAppender.ConnectionString = "数据库连接"; string SQLServer = Configuration.GetConnectionString("SQLServer"); //更新数据库连接 SQLServerAppender.ConnectionString = Configuration.GetConnectionString(SQLServer); //SQLServerAppender.ConnectionStringName = "SQLServer"; //刷新AdoNetAppender SQLServerAppender.ActivateOptions(); } if (SQLiteNetAppender != null) { string SQLite = Configuration.GetConnectionString("SQLite"); SQLiteNetAppender.ConnectionString = Configuration.GetConnectionString(SQLite); SQLiteNetAppender.ActivateOptions(); } if (ElasticSearchAppender != null) { string ElasticSearch = Configuration.GetConnectionString("ElasticSearch"); ElasticSearchAppender.ConnectionString = Configuration.GetConnectionString(ElasticSearch); ElasticSearchAppender.ActivateOptions(); } if (ElasticSearchCustomaryAppender != null) { string ElasticSearch = Configuration.GetConnectionString("ElasticSearchCustomary"); ElasticSearchCustomaryAppender.ConnectionString = Configuration.GetConnectionString(ElasticSearch); ElasticSearchCustomaryAppender.ActivateOptions(); } } #region 动态修改log4net设置 //https://www.cnblogs.com/jinzhao/archive/2009/08/06/1540214.html //var log4netConfig = new FileInfo("~/log4net.Relase.config"); //log4net.Config.XmlConfigurator.ConfigureAndWatch(log4netConfig); #endregion using (Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Elastic.Kibana.Log4Net.log4net.Relase.config")) { log4net.Config.XmlConfigurator.Configure(stream); } #endregion } #endregion app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
public ActionResult Index() { using (Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Net.Framerwork.AdoNetAppenders.Properties.log4net.config")) { log4net.Config.XmlConfigurator.Configure(stream); } Hierarchy hier = LogManager.GetRepository() as Hierarchy; if (hier != null) { //get ADONetAppender var adoAppender = (AdoNetAppender)hier.GetAppenders() .Where(appender => appender.Name.Equals("SQLServerAppender", StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault(); adoAppender = (AdoNetAppender)hier.GetAppenders() .Where(appender => appender.Name.Equals("SQLiteNetAppender", StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault(); ElasticSearchAppender ElasticSearchAppenders = (ElasticSearchAppender)hier.GetAppenders() .Where(appender => appender.Name.Equals("ElasticSearchAppender", StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault(); if (adoAppender == null) { //connStr = adoAppender.ConnectionString; //SQLiteConnection cn = new SQLiteConnection(connStr); ////按照路径创建数据库文件 ////cn.Open(); ////创建数据库表 //if (cn.State != System.Data.ConnectionState.Open) //{ // cn.Open();//打开数据库 // SQLiteCommand cmd = new SQLiteCommand(); // cmd.Connection = cn;//把 SQLiteCommand的 Connection和SQLiteConnection 联系起来 // cmd.CommandText = "CREATE TABLE IF NOT EXISTS Joson(ID varchar(4),score int)";//输入SQL语句 // cmd.ExecuteNonQuery();//调用此方法运行 // cmd.CommandText = "INSERT INTO Log(Date, Level, Logger, Message) VALUES('@Date', '@Level', '@Logger', '@Message')"; // cmd.ExecuteNonQuery();//调用此方法运行 //} //cn.Close(); // update connectionstring //adoAppender.ConnectionString = configuration.GetConnectionString(ConnectionStringNames.Log).ConnectionString; adoAppender.ConnectionString = "设置数据库连接"; //refresh settings of appender adoAppender.ActivateOptions(); } } ILog log = log4net.LogManager.GetLogger("Log"); //https://stackoverflow.com/questions/12139486/log4net-how-to-add-a-custom-field-to-my-logging log4net.LogicalThreadContext.Properties["BrowserInfo"] = "Custom value BrowserInfo"; log4net.GlobalContext.Properties["ClientIP"] = "192.168.0.1"; log4net.GlobalContext.Properties["ClientName"] = "ClientName"; log.Error("ActionResult -Index"); Monitor.Helper.Log4NetHelper logHelper = new Monitor.Helper.Log4NetHelper(); logHelper.Write(new Monitor.Helper.LogEntity { ClientName = "ClientName", BrowserInfo = "Custom value BrowserInfo", CustomData = new { Requesturl = "Requesturl", Others = "Others", Referrerurl = "Referrerurl" } }); Monitor.Helper.LogEncapsulation.Info(new { ClientIP = "192.168.0.1", ClientName = "ClientName", Requesturl = "Requesturl", Referrerurl = "Referrerurl", CustomData = new { Others = "Others", Joson = "Jiang" } }); return(View()); }