首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次log4j日志文件小事故

记一次log4j日志文件小事故

作者头像
我是攻城师
发布2018-05-11 17:06:52
6370
发布2018-05-11 17:06:52
举报
文章被收录于专栏:我是攻城师我是攻城师

最近散仙在做公司的一个跟搜索有关的数据分析(Pig+Hadoop+MapReduce)项目,主要就是统计搜索的转化率,目的主要有以下几个: (1)通过数据分析挖掘,找出搜索业务在整个平台系统里的GMV里所占份额 (2)给公司的搜索算法调优,提供可靠的参考依照 (3)了解从搜索入口到最终交易之间各个阶段的数据比重,主要有搜索点击率,搜索曝光率,搜索添加购物车率,搜索下单率,搜索支付率,以及最终的成交金额等 当然还有其他的一些比较细的数据,这里就不细说了,今天,记录一个比较低级的问题,散仙在自己的web项目(数据结果展示)发现log4j记录的日志文件竟然找不到了,散仙结构图如下:

log4j.properties的配置文件如下:

Java代码

log4j.rootCategory=INFO,fileout,errorout,stdout    
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender   
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-30F\:%-5p\:%l] %m%n    
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout    
 
log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender    
log4j.appender.errorout.Threshold=ERROR   
log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-5p] %m%n    
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout    
log4j.appender.fileout.File=log/info.log   
log4j.appender.fileout.Append=true 
log4j.appender.fileout.DatePattern='.'yyyy-MM-dd   
 
log4j.appender.errorout=org.apache.log4j.RollingFileAppender    
log4j.appender.errorout.File=log/error.log   
log4j.appender.errorout.MaxFileSize=100000KB   
log4j.appender.errorout.MaxBackupIndex=10 
log4j.appender.errorout.Append=true 
log4j.appender.errorout.layout=org.apache.log4j.PatternLayout    
log4j.appender.errorout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-30F\:%-5p\:%l] %m%n  
log4j.rootCategory=INFO,fileout,errorout,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-30F\:%-5p\:%l] %m%n
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorout.Threshold=ERROR
log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-5p] %m%n
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.File=log/info.log
log4j.appender.fileout.Append=true
log4j.appender.fileout.DatePattern='.'yyyy-MM-dd

log4j.appender.errorout=org.apache.log4j.RollingFileAppender
log4j.appender.errorout.File=log/error.log
log4j.appender.errorout.MaxFileSize=100000KB
log4j.appender.errorout.MaxBackupIndex=10
log4j.appender.errorout.Append=true
log4j.appender.errorout.layout=org.apache.log4j.PatternLayout
log4j.appender.errorout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-30F\:%-5p\:%l] %m%n

程序运行出异常(测试使用)之后,发现这个log目录里空空如也,什么也没记,后来直接在控制台运行,发现log却生效了,比较奇怪,但既然log4j配置了记录日志,这功能肯定是有的,为什么没有记录下我指定的目录下呢? 后来查资料后,发现散仙犯了一个比较低级的错误,web工程里的日志记录路径和普通的java的日志记录路径是不一样的,web工程的日志是在web容器里的,普通的工程就在根目录下,所以散仙在这里使用MyEclipse启动Web项目后,其实是看不到日志的,因为编译后的工程是在MyEclipse集成的(自己可指定)tomcat里的路径下的,所以直接在MyEclipse下找日志文件是肯定不行的。 知道这个原因后,散仙就去该项目的根目录下的log文件夹里找log文件,结果依旧没有找到,后来在tomcat的bin目录下,找到了可爱的log文件夹,真是不容易,我擦,那么为什么会出现在这里呢? 因为我们的tomcat的启动脚本是在bin目录下的,而默认也会去把路径作为根目录,所以散仙在上面代码里配置的log/xxx.log结果自然而然就进入了该目录,知道这个原因后,我们只需要加上相对路径配置,便可以解决这个问题,当然也可以使用绝对路径,看自己的业务吧,散仙比较推荐使用相对路径,因为这样当我们下一次切换tomcat的路径时,我们不需要再改动路径,而如果你是绝对路径,则需要改动路径才行。 下面看下几种在web工程里配置路径方法: (1)log4j.appender.file.File=${catalina.home}/webapps/xxx项目路名/log/xxx.log,代表使用${catalina.home}引用当前的tomcat目录,这个变量无需在我们的环境变量里设置。 (2)log4j.appender.file.File=../webapps/xxx项目路名/log/xxx.log 使用相对路径,这个更简洁 最终的log4j.properties的配置如下:

Java代码

log4j.rootCategory=INFO,fileout,errorout,stdout    
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender   
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-30F\:%-5p\:%l] %m%n    
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout    
 
log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender    
log4j.appender.errorout.Threshold=ERROR   
log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-5p] %m%n    
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout    
#log4j.appender.errorout.File=${catalina.home}/webapps/DataShow/log/info.log    
log4j.appender.fileout.File=../webapps/DataShow/log/info.log    
log4j.appender.fileout.Append=true 
log4j.appender.fileout.DatePattern='.'yyyy-MM-dd   
 
log4j.appender.errorout=org.apache.log4j.RollingFileAppender    
 
#log4j.appender.errorout.File=${catalina.home}/webapps/DataShow/log/error.log    
log4j.appender.errorout.File=../webapps/DataShow/log/error.log    
log4j.appender.errorout.MaxFileSize=100000KB   
log4j.appender.errorout.MaxBackupIndex=10 
log4j.appender.errorout.Append=true 
log4j.appender.errorout.layout=org.apache.log4j.PatternLayout    
log4j.appender.errorout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-30F\:%-5p\:%l] %m%n  
log4j.rootCategory=INFO,fileout,errorout,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-30F\:%-5p\:%l] %m%n
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorout.Threshold=ERROR
log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-5p] %m%n
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
#log4j.appender.errorout.File=${catalina.home}/webapps/DataShow/log/info.log
log4j.appender.fileout.File=../webapps/DataShow/log/info.log
log4j.appender.fileout.Append=true
log4j.appender.fileout.DatePattern='.'yyyy-MM-dd

log4j.appender.errorout=org.apache.log4j.RollingFileAppender

#log4j.appender.errorout.File=${catalina.home}/webapps/DataShow/log/error.log
log4j.appender.errorout.File=../webapps/DataShow/log/error.log
log4j.appender.errorout.MaxFileSize=100000KB
log4j.appender.errorout.MaxBackupIndex=10
log4j.appender.errorout.Append=true
log4j.appender.errorout.layout=org.apache.log4j.PatternLayout
log4j.appender.errorout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS}[%-30F\:%-5p\:%l] %m%n

上面,二种写法都可以,大家可以根据自己习惯定义,改成完成之后,再次测试,发现log4j,终于如愿以偿的如何我们的要求了,另外建议大家在配置log4j时,最好把不同的log级别给分离开,这样便于快速定位查找问题,大部分情况下,我们只需要2个级别,info和error,当然你可以定义的更细,根据自己的业务,进行定制!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档