Esempio n. 1
0
 /// <summary>
 /// add log service provider to service container
 /// </summary>
 /// <param name="services">Service container</param>
 /// <param name="dbLogConnection">connection string to db log</param>
 public static void AddDbLog(this IServiceCollection services, string dbLogConnection)
 {
     using var localizedDbContext = new DbLogDbContext(new DbContextOptionsBuilder <DbLogDbContext>().UseSqlServer(dbLogConnection).Options);
     localizedDbContext.Database.Migrate();
     services.Configure <DbLogOptions>(option => option.UseSettings(dbLogConnection));
     services.AddSingleton <ILoggerProvider, DbLoggerProvider>();
     services.AddSingleton <IBackgroundLogTaskQueue, LogBackgroundTaskQueue>();
     services.AddHostedService <LogQueuedHostedService>();
     services.AddTransient <ISystemLogData, SystemLogData>();
 }
Esempio n. 2
0
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            if (!IsEnabled(logLevel))
            {
                return;
            }

            if (formatter == null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }

            var logBuilder = new StringBuilder();
            var message    = formatter(state, exception);

            if (string.IsNullOrEmpty(message) && exception != null)
            {
                message = exception.Message;
            }

            SystemLog createEntity = new SystemLog()
            {
                Message     = CoreUtility.TruncateString(message, 512) ?? "Empty",
                FullMessage = CreateFullMessage(logLevel, eventId, message, exception) ?? "Empty",
                Level       = logLevel
            };

            if (_contextAccessor?.HttpContext != null)
            {
                createEntity.IpAddress   = _contextAccessor.HttpContext.GetCurrentIpAddress();
                createEntity.PageUrl     = _contextAccessor.HttpContext.GetThisPageUrl();
                createEntity.ReferrerUrl = _contextAccessor.HttpContext.GetUrlReferrer();
                createEntity.UserAgent   = _contextAccessor.HttpContext.Request?.Headers["User-Agent"];
            }

            _logtaskQueue.QueueBackgroundWorkItem(async token =>
            {
                using var localizedDbContext = new DbLogDbContext(new DbContextOptionsBuilder <DbLogDbContext>().UseSqlServer(_dbLogOptions.ConnectionString).Options);
                localizedDbContext.SystemLogs.Add(createEntity);
                await localizedDbContext.SaveChangesAsync();
            });

            string CreateFullMessage(LogLevel logLevel, EventId eventId, string message, Exception exception)
            {
                var logBuilder = new StringBuilder();

                var logLevelString = logLevel.ToString();

                logBuilder.Append($"{DateTime.Now.ToString(new System.Globalization.CultureInfo("vi-VN"))} - {logLevelString} - {_name}");

                if (null != eventId && eventId.Id > 0)
                {
                    logBuilder.Append($" [ {eventId.Id} - {eventId.Name ?? "null"} ] ");
                }

                AppendAndReplaceNewLine(logBuilder, message);

                if (exception != null)
                {
                    logBuilder.Append(' ');
                    AppendAndReplaceNewLine(logBuilder, exception.ToString());
                }

                return(logBuilder.ToString());
Esempio n. 3
0
 public SystemLogData(DbLogDbContext dbLogDbContext) : base(dbLogDbContext)
 {
 }