Webアプリケーションでユーザー操作を記録する方法は?
質問
私のアプリケーションの環境:Webベース、Spring MVC + Security、Hibernate、MySQL(InnoDB)
私は、Webインターフェースから操作する小さなデータベースアプリケーションで作業しています。保存されたデータを処理する特定の既知のユーザーがいます。ここで、ユーザーがデータベース上で実行するすべての作成/更新/削除アクションを追跡し、単純な「リストのような」ものを作成する必要があります。これからの報告。今のところ、「ログ」を考えています。テーブル(列:userId +タイムスタンプ+説明など)。このテーブルにログ行を挿入するC(R)UD操作でアスペクトが発生する可能性があると思います。しかし、これがどのように行われるべきかはわかりません。
また、通常のMySQLログとlog4jについても認識しています。ログファイルに関しては、MySQLで利用できる情報よりも多くの情報が必要になる場合があります。 Log4jは解決策かもしれませんが、MySQLテーブルに書き込む方法がわかりません。また、ログテーブルにいくつかの関連付け(たとえば、ユーザーID)を保存して、dbに基本的なフィルター処理などを行わせたいと思います。
何をお勧めしますか? Hibernate / Springに組み込みのサポートもありますか、それともlog4jが正しい方法ですか?
ありがとう!
解決
- Log4jはモジュール式です。必要に応じて、ログをデータベースに書き込む独自のバックエンドを作成できます。実際、 JDBCアペンダーも付属しています。 すぐに使用できますが、大きな赤い警告が表示されます。
- Hibernateの場合、おそらくすべての変更を追跡し、特別な監査テーブルに記録するインターセプターとイベント。
他のヒント
C(R)UD操作ログにMappedSuperclassを使用することを検討しましたか?
@MappedSuperclass
public class BaseEntity {
@Basic
@Temporal(TemporalType.TIMESTAMP)
public Date getLastUpdate() { ... }
public String getLastUpdater() { ... }
...
}
@Entity class Order extends BaseEntity {
@Id public Integer getId() { ... }
...
}
ロギングソリューションを探して自分でそれを探している場合は、JDBCAppenderを検索してみてください。完璧ではありませんが、機能するはずです。
一元化されたロギングのために既製の製品が必要な場合- logFaces を試すことを検討してください。独自のデータベースに直接(開示:私はこの製品の著者です。)