[java] SLF4J와 Log4j의 로그 파일 암호 처리하기

로그 파일은 애플리케이션 개발 시 핵심적인 정보를 저장하는 중요한 파일입니다. 때로는 이러한 로그 파일을 암호화하여 민감한 정보의 노출을 방지해야 할 때도 있습니다. 이번 포스트에서는 SLF4J와 Log4j를 사용하여 로그 파일을 암호화하는 방법에 대해 알아보겠습니다.

1. SLF4J( Simple Logging Facade for Java) 이란?

SLF4J는 자바 로깅을 위한 간단한 로깅 퍼사드(facade)입니다. 여러 로깅 프레임워크의 표준화된 인터페이스를 제공하여 애플리케이션에서 특정 로깅 프레임워크에 종속되지 않도록 만들어줍니다. SLF4J를 사용하면 로깅 프레임워크 변경 시 코드 수정을 최소화할 수 있습니다.

2. Log4j

Log4j는 자바에서 가장 널리 사용되는 로깅 프레임워크 중 하나입니다. Log4j를 사용하면 로그 메시지를 다양한 대상에 출력할 수 있으며, 로그 레벨 설정 등의 다양한 기능을 제공합니다.

3. SLF4J와 Log4j를 사용하여 로그 파일 암호화하기

SSL4J와 Log4j를 사용하여 로그 파일을 암호화하기 위해서는 다음 단계를 따라야 합니다:

단계 1: 암호화된 로그 파일 생성을 위한 Log4j 설정 수정

log4j.properties 또는 log4j.xml 파일에서 로그 파일 생성을 위한 appender 설정을 수정해야 합니다. 예를 들어, 다음과 같이 FileAppender를 사용하여 로그를 파일에 기록하는 설정을 만들 수 있습니다:

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/path/to/logfile.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

위의 설정에서 log4j.appender.file.File 속성을 수정하여 암호화된 로그 파일의 경로를 지정할 수 있습니다.

단계 2: SLF4J와 Log4j 의존성 추가

로그 파일 암호화를 위해 SLF4J와 Log4j 의존성을 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다:

<dependencies>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.32</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.32</version>
  </dependency>
  <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
  </dependency>
</dependencies>

단계 3: 암호화된 로그 파일 생성 로직 추가

암호화된 로그 파일을 생성하기 위해 필요한 암호화 로직을 Java 코드에 추가해야 합니다. 예를 들어, AES 암호화 알고리즘을 사용하여 로그 파일을 암호화하는 코드는 다음과 같습니다:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

public class LogEncryptor {
  private static final String ALGORITHM = "AES";
  private static final String KEY = "YourEncryptionKey";

  public static void main(String[] args) {
    String logMessage = "This is a test log message.";

    try {
      Cipher cipher = Cipher.getInstance(ALGORITHM);
      SecretKey secretKey = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
      cipher.init(Cipher.ENCRYPT_MODE, secretKey);
      byte[] encryptedBytes = cipher.doFinal(logMessage.getBytes());
      String encryptedMessage = Base64.encodeBase64String(encryptedBytes);

      // Write the encrypted log message to the log file
      // (e.g., using SLF4J and Log4j)

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

위의 코드는 AES 암호화 알고리즘과 Base64 인코딩을 사용하여 로그 메시지를 암호화합니다. 암호화된 로그 메시지는 로그 파일에 기록되어야 합니다.

참고 자료