Как настроить log4net в приложении asp.net core 2.1 для базы данных postgres? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть log4net.config файл со следующим содержимым:

<log4net>
  <appender name="PostgresAppender" type="App.PostgresAppender, App">
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="PostgresAppender" />
  </root>
</log4net>

PostgresAppender:

public class PostgresAppender : AppenderSkeleton
{
    protected override void Append(LoggingEvent loggingEvent)
    {
        using (NpgsqlConnection conn = new NpgsqlConnection(Startup.Configuration.GetConnectionString("Logging")))
        {
            conn.Open();
            using (NpgsqlCommand command = new NpgsqlCommand("insert into public.logs(app_name,thread,level,location,message,log_date,exception) values(:app_name,:thread,:level,:location,:message,:log_date,:exception)", conn))
            {
                var appName = command.CreateParameter();
                appName.Direction = System.Data.ParameterDirection.Input;
                appName.DbType = System.Data.DbType.String;
                appName.ParameterName = ":app_name";
                appName.Value = loggingEvent.LookupProperty("AppName");
                command.Parameters.Add(appName);

                var thread = command.CreateParameter();
                thread.Direction = System.Data.ParameterDirection.Input;
                thread.DbType = System.Data.DbType.String;
                thread.ParameterName = ":thread";
                thread.Value = loggingEvent.ThreadName;
                command.Parameters.Add(thread);

                var level = command.CreateParameter();
                level.Direction = System.Data.ParameterDirection.Input;
                level.DbType = System.Data.DbType.String;
                level.ParameterName = ":level";
                level.Value = loggingEvent.Level;
                command.Parameters.Add(level);

                var location = command.CreateParameter();
                location.Direction = System.Data.ParameterDirection.Input;
                location.DbType = System.Data.DbType.String;
                location.ParameterName = ":location";
                location.Value = loggingEvent.LocationInformation.FullInfo;
                command.Parameters.Add(location);

                var message = command.CreateParameter();
                message.Direction = System.Data.ParameterDirection.Input;
                message.DbType = System.Data.DbType.String;
                message.ParameterName = ":message";
                message.Value = loggingEvent.RenderedMessage;
                command.Parameters.Add(message);

                var log_date = command.CreateParameter();
                log_date.Direction = System.Data.ParameterDirection.Input;
                log_date.DbType = System.Data.DbType.DateTime2;
                log_date.ParameterName = ":log_date";
                log_date.Value = loggingEvent.TimeStamp;
                command.Parameters.Add(log_date);

                var exception = command.CreateParameter();
                exception.Direction = System.Data.ParameterDirection.Input;
                exception.DbType = System.Data.DbType.String;
                exception.ParameterName = ":exception";
                exception.Value = loggingEvent.GetExceptionString();
                command.Parameters.Add(exception);

                command.ExecuteNonQuery();
            }
            conn.Close();
        }
    }
}

В appsettings.json Я настраиваю log4net следующим образом:

"Log4NetConfigFile": {
    "Name": "log4net.config"
  }

Затем я пытаюсь войти в систему, настроив регистратор в program.cs:

 public static readonly ILog _log = LogManager.GetLogger(typeof(Program));

и используя это где-то еще так:

log4net.GlobalContext.Properties["App"] = Startup.Configuration.GetSection("Log4NetConfigFile");
Program._log.Info("It works my friends");

Но яне в состоянии что-либо войти.

Я пытался настроить его, ориентируясь на этот учебник , но больше всего у меня возникли проблемы с преобразованием из xml app.config / web.config в мои appsettings.jsonи log4net.config.Моя строка подключения к моей базе данных postgres также должна быть в порядке.Я установил точку останова в PostgresAppender, но она не срабатывает при запуске журнала, поэтому я думаю, что это должно что-то делать с настройкой.Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

...