やりたいこと
- ログ出力時にマスクを掛けて機密情報を出力しない
- ログ出力時にそもそもログを出力させない
環境
- Java 17
- lombok 1.18.28
Maskを掛けない場合
ログ出力対象のユーザークラスを作成し、@Data
アノテーションを付与
User.java
import lombok.Data;
import lombok.ToString;
@Data
public class UserInfo {
private String userId;
private String password;
private String mail;
}
ログ出力
var userInfo = new UserInfo();
userInfo.setUserId("user1234");
userInfo.setPassword("password");
userInfo.setMail("user123@gmail.com");
log.info(userInfo.toString());
ログ出力結果
パスワードがそのまま出力される
UserInfo(userId=user1234, password=password, mail=user123@gmail.com)
@ToString.Includeを指定
@ToString.Include
を付与することで、getterの戻り値をtoString()
で出力できるようになる
- Maskを行いたいメンバー変数のgetterに
@ToString.Include
を付与する - name属性にメンバー変数と同じ名前を指定する
getter名をgetPassword
にするとMaskされた値しか取れなくなるので注意
User.java
import lombok.Data;
import lombok.ToString;
@Data
public class UserInfo {
private String userId;
private String password;
private String mail;
@ToString.Include(name = "password")
public String getMaskPassword() {
return "***";
}
}
ログ出力結果
ログにMaskがかかっている
UserInfo(userId=user1234, mail=user123@gmail.com, password=***)
getPassword()
を呼べばMaskがかかっていない値が取得可能
log.info(userInfo.getPassword()); // password
@ToString.Excludeを指定
Maskを掛けるのではなくてログ出力させたくない場合は@ToString.Exclude
を付与する
- Maskを行いたいメンバー変数に
@ToString.Exclude
を付与する
User.java
import lombok.Data;
import lombok.ToString;
@Data
public class UserInfo {
private String userId;
@ToString.Exclude
private String password;
private String mail;
}
ログ出力結果
password
の項目自体がログ出力されない
UserInfo(userId=user1234, mail=user123@gmail.com)