我希望能够在db中的每个inserte / update / delete中记录某个地方(可能是表)。我正在使用spring + hibernate。我愿意接受基于其中之一或两者的解决方案。
有什么想法吗?
修改
我不是指文本记录,而是实际拦截操作或让他们登录一些可以处理的数据结构。
答案 0 :(得分:2)
如果记录到属性文件是可以的,只需添加log4j.xml配置:
<category name="org.hibernate.SQL" additivity="false">
<priority value="trace"/>
<appender-ref ref='file'/>
</category>
使用log4j.properties:
log4j.category.org.hibernate.SQL=TRACE, file
其中“file”是这样定义的appender:
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=SOME_PATH/sql_log.log
log4j.appender.file.Append=true
log4j.appender.file.encoding=UTF-8
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss,SSS} [%-9t] %-5p %c{1}.%m%n
答案 1 :(得分:0)
如果您不需要实际的SQL语句,则可以使用一个方面而不是DAO。这样您就可以拦截每个数据访问操作,并在DATA_ACCESS_LOG表中插入一个寄存器来描述操作和传递的参数。