论坛首页 Java企业应用论坛

Log4J实战

浏览 14040 次
锁定老帖子 主题:Log4J实战
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-07-25  
请问LZ,依照你的log4j配置,我也写了一个,为什么会提示log4j:ERROR Could not find value for key log4j.appender.project-util-db.layout这个呢。

其中project-util-db.layout这项在properties里的确没有配置,看你的似乎没有,不知道是不是真的需要配置?
0 请登录后投票
   发表时间:2011-07-25  
sokoo108 写道


# 设置其根为 INFO 级别, 处理的 loggerName 为 cons
log4j.rootLogger=INFO, cons

# 至控制台
log4j.appender.cons=org.apache.log4j.ConsoleAppender
log4j.appender.cons.layout=org.apache.log4j.PatternLayout
log4j.appender.cons.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss sss} [%p] %r %l [%t] - %m%n

...

# 至数据库
log4j.logger.database=INFO, db
# 如果为 true 则表示也输出至 根级别, 亦即输出至控制台
log4j.additivity.database=false

log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.layout.conversionPattern=%m
log4j.appender.db.URL=...
log4j.appender.db.driver=...
log4j.appender.db.user=...
log4j.appender.db.password=...
log4j.appender.db.sql=INSERT INTO ... VALUES('%X{id}'...


用的时候:

private Logger log = Logger.getLogger(getClass());

private static final Logger dbLog = Logger.getLogger("database");

...

// 使用 dbLog 输出的日志会记录至数据库, log 输出的会记录至控制台
MDC.put("id", "XXX");
dbLog.info("...");
MDC.remove("id");


LZ 发关于 log4j 的帖子很频繁啊...
0 请登录后投票
   发表时间:2011-07-25  
liu.anxin 写道
sokoo108 写道


# 设置其根为 INFO 级别, 处理的 loggerName 为 cons
log4j.rootLogger=INFO, cons

# 至控制台
log4j.appender.cons=org.apache.log4j.ConsoleAppender
log4j.appender.cons.layout=org.apache.log4j.PatternLayout
log4j.appender.cons.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss sss} [%p] %r %l [%t] - %m%n

...

# 至数据库
log4j.logger.database=INFO, db
# 如果为 true 则表示也输出至 根级别, 亦即输出至控制台
log4j.additivity.database=false

log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.layout.conversionPattern=%m
log4j.appender.db.URL=...
log4j.appender.db.driver=...
log4j.appender.db.user=...
log4j.appender.db.password=...
log4j.appender.db.sql=INSERT INTO ... VALUES('%X{id}'...


用的时候:

private Logger log = Logger.getLogger(getClass());

private static final Logger dbLog = Logger.getLogger("database");

...

// 使用 dbLog 输出的日志会记录至数据库, log 输出的会记录至控制台
MDC.put("id", "XXX");
dbLog.info("...");
MDC.remove("id");


LZ 发关于 log4j 的帖子很频繁啊...

上周花了几天时间做这个,所以就顺便总结出来一些东西
0 请登录后投票
   发表时间:2011-07-25  
linginfanta 写道
我也考虑过filter,LZ有木有觉得对应用性能有影响?
最终,我还是放弃了这种方案,采取网卡抓包来记录访问日志。


请教下,我理解的转包就是想到与tomcat里面配置,他可以自动记录相关的ip 访问时间什么的

但是当我要记录不同级别的用户访问怎么做呢(除了在fiter里面可以判断)?

现在做的这个log4j配置性强,根据需求可以很好的扩展

0 请登录后投票
   发表时间:2011-07-25  
zshui_2007 写道
JREBEL  就不用让服务器做热部署启动了,比较方便;

log4j配置到数据库是很方便的,支持一下,和具体的使用场景有关。尽量使用大家约

定俗成的东西,不要做重复无谓的搭建轮子。



用log4j关键是在项目中集成一个根据需求配置的记录模块

比如:项目只要数据库里面记录不要文件记录,那么我改下log4j的配置文件就可以了

需求再改变--记录vip访问行为,我再配个fiter,如果fiter太多影响到性能,我就配置输出文件,然后写job扫描进入数据库
0 请登录后投票
   发表时间:2011-07-25  
sokoo108 写道
请问LZ,依照你的log4j配置,我也写了一个,为什么会提示log4j:ERROR Could not find value for key log4j.appender.project-util-db.layout这个呢。

其中project-util-db.layout这项在properties里的确没有配置,看你的似乎没有,不知道是不是真的需要配置?


确实不需要,它是制定输出格式,现在输入数据库,配置对应project-util-db.sql就可以了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics