配置 log4j 将日志写到数据库

属性文件:
log4j.rootLogger = warn,stdout
log4j.logger.mysql = info,mysql

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.mysql =org.apache.log4j.jdbc.JDBCAppender
log4j.appender.mysql.driver =com.mysql.jdbc.Driver
log4j.appender.mysql.URL=jdbc:mysql://localhost:3306/tl
log4j.appender.mysql.user =root
log4j.appender.mysql.password =alen
#log4j.appender.mysql.bufferSize =1
log4j.appender.mysql.sql=INSERT INTO loginLog(message,ip)  VALUES('[framework] %d - %c -%4r [%t] %-5p %c %x - %m%n','%m%n')

log4j.appender.mysql.layout=org.apache.log4j.PatternLayout
log4j.appender.mysql.layout.ConversionPattern=[framework] %d - %c -%4r [%t] %-5p %c %x - %m%n'


XML:
<appender name="database"
class="org.apache. log4j.jdbc. JDBCAppender">
<param name="BufferSize" value="5" />
<param name="Driver" value="com.mysql.jdbc.Driver" />
<param name="URL"
value="jdbc:mysql://192.168.0.14/ispc?useUnicode=true&characterEncoding=UTF-8" />
<param name="User" value="root" />
<param name="Password" value="admin" />
<layout class="org.apache. log4j.PatternLayout">
<param name="ConversionPattern"
value="INSERT INTO log (level,msg,datetime) VALUES ( '%p', '%m','%d{yyyy-MM-dd HH:mm:ss}')" />
</layout>
<filter class="org.apache. log4j.varia.LevelRangeFilter">
<param name="levelMin" value="WARN" />
<param name="levelMax" value="WARN" />
<param name="acceptOnMatch" value="false" />
</filter>
</appender>


问题:
假设在登陆接口中,要把登陆失败的人的ID,IP写入数据库(即多个自定义信息), log4j能做吗?
// logger.warn(??);//方法中这里应该怎样写??
logger.warn(ID + "," + IP)//这样??,插进数据库时怎样把ID, IP分别插进2个字段?

自己写的appender再怎么改也只能拿个%m ...

log4j中有个MDC也许可以做到分开插,但写一个LOG麻烦多少倍,倒不如自己插数据表 ?
MDC.put("ID", ID);
MDC.put("IP", IP);
logger.warn("login failed");

一个解决方法:
包装 log4j ,自定义 warn(Object... msgs){
    //一些处理,让此方法满足配置文件及我们的要求
    MDC.put("ID", ID);
    MDC.put("IP", IP);
    logger.warn("login failed");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值