Ротация БД Log4j2 JDBCAppender для sqlite - PullRequest
0 голосов
/ 05 августа 2020

Я использую log4j2 для входа в базу данных SQLite с помощью JDBCAppender. Я хочу знать, как лучше всего выполнить ротацию базы данных sqlite в зависимости от размера файла.

Что-то похожее на приложение «RollingFile», где мы можем указать «SizeBasedTriggeringPolicy» и вручную указать максимальный размер файла. Я просмотрел документы и не нашел способа, которым это может быть достигнуто по умолчанию.

Итак, я обошел его, как я его реализовал. .. Каждый раз, когда делается вызов БД для регистрации, запускается метод getConnection () в ConnectionFactory. Поэтому при каждом вызове этого метода я проверяю размер файла sqlite DB, и если он превышает максимальный размер файла, я просто возвращаю новую строку подключения, указывающую на новую базу данных.

public static Connection getConnection() throws SQLException {
    Connection connection = null;
    String connectString = getConnectionString();   // returns connect string of SQLite currently being used

    if(isMaxFileSizeExceeded()) {                   // returns true if SQLite file exceeds max file limit 
         connectString = getNewConnectionString();  // returns connect string pointing to new SQLite DB
    }

    try {
        connection = DriverManager.getConnection(connectString);
    } catch (SQLException e) {
        // throw exception 
    }

    return connection;
}

Есть ли лучший способ сделать ротацию БД? Я считаю, что проверка размера файла для каждого вызова журнала - ненужные накладные расходы. Я хочу, насколько это возможно, избегать ручного кода и попытаться использовать для этого API log4j2.

...