日志记录—项目日志处理方案
来源:互联网 发布:大数据运维管理 编辑:程序博客网 时间:2024/05/16 01:14
前台日志处理方案
(记录学习 )
商城项目日志工具使用的是,sl4j+log4j,使用slf4j可方便以后切换成其他日志工具,点击查看sl4j的资料。
一、现在项目的日志管理现状
1、 日志工具没有统一起来,有些地方实例化log4j实例,可有些却是sl4j实例。
2、 在业务层代码,有些try..catch捕获了异常,有些没有捕获。
3、 在controller代码上,常常由于service层及以上没有捕获异常而将异常抛出,controller也没有进行处理,此时会有框架将异常抛出,往往造成不可预料的结果或者不友好的页面。
4、 Log4j原有配置,只有业务层日志配置和根日志,业务层日志按类别分为支付日志、o2o日志(商城主日志)、以及八大中心各自日志,每个都是按天回滚类型,级别都设置为debug(即使是生产环境)。
注:(1)级别没有控制好,非主要业务应该只记录error。重要业务记录info以上。
(2)业务日志,感觉用按天回滚不太合适。考虑用按大小回滚,由于文件太大不方便下载到本地和在服务器查看,定义每个日志文件的最大上限。
(3)八大中心的8个日志废弃,改为中台接口调用日志info级别。业务层日志分为业务主日志、购物车日志、订单日志、支付和退款日志。
5、 没有spring、hibernate日志。
二、考虑日志方案
1、日志类别定义
2 用户层级日志:用户登陆、退出、注册和绑定手机邮箱验证码
2 业务层级日志:购物车、订单、支付、退款和中台接口调用
2 系统层级日志:指代码中未捕获而由spring框架抛出的异常日志(controller),用spring3以上版本提供的@ControllerAdvice进行拦截以及异常捕获处理。
2 框架层级日志:SpringMVC框架日志以及hibernate日志(包括查询sql、ddl、hql参数以及异常捕获)
2、日志记录方向
text、mysql、email
用户层级日志,记录到mysql。考虑到用户行为分析。
订单、支付、退款、注册短信验证码,error级别日志,走email。
其他日志都记录到text。
3、日志记录格式
%d %5p [%t] %c(%F:%M:%L) - %m%n
时间 级别 日志名 文件名 类名 方法名 行数 日志信息
4、系统层级异常
包括controller抛出的异常和前台找不到资源的404。
(1)controller抛出异常,可通过@ControllerAdvice捕获并处理。
(2)找不到资源404,通过配置web.xml。跳转预设页面。
5、日志配置文件如下:
根日志
log4j.rootLogger=info,file,console
Console 根日志控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=info
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %5p [%t] %c(%F:%M:%L) - %m%n
file 根日志文本 按天回滚
log4j.logger.file=info,file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.file=${webapp.root}/WEB-INF/logs/tclshop.log
log4j.appender.file.DatePattern=’.’yyyy-MM-dd’.log’
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %5p [%t] %c(%F:%M:%L) - %m%n
用户日志
log4j.logger.user_logger=info, userlog
log4j.appender.userlog=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.userlog.URL=jdbc:mysql://10.120.99.174/tclshop_yh?useUnicode=true&characterEncoding=UTF-8
log4j.appender.userlog.driver=com.mysql.jdbc.Driver
log4j.appender.userlog.user=root
log4j.appender.userlog.password=tclshop_2015
log4j.appender.userlog.sql=INSERT INTO log4j_user_log (log_date, log_name, log_priority, log_class,log_line,log_method,log_message,log_trace) VALUES (‘%d’, ‘%c’, ‘%p’,’%F’,’%L’,’%M’,’%m’,’%l’)
log4j.appender.userlog.layout=org.apache.log4j.PatternLayout
业务日志
logger for cart
log4j.logger.cart_logger=error,cart
log4j.appender.cart=org.apache.log4j.RollingFileAppender
log4j.appender.cart.Append=true
log4j.appender.cart.file=${webapp.root}/WEB-INF/logs/cart_logger.log
log4j.appender.cart.MaxFileSize=10MB
log4j.appender.cart.MaxBackupIndex=50
log4j.appender.cart.layout=org.apache.log4j.PatternLayout
log4j.appender.cart.layout.ConversionPattern=%d %5p [%t] %c(%F:%M:%L) - %m%n
logger for order
log4j.logger.order_logger=info,order
log4j.appender.order=org.apache.log4j.RollingFileAppender
log4j.appender.order.Append=true
log4j.appender.order.file=${webapp.root}/WEB-INF/logs/order_logger.log
log4j.appender.order.MaxFileSize=10MB
log4j.appender.order.MaxBackupIndex=50
log4j.appender.order.layout=org.apache.log4j.PatternLayout
log4j.appender.order.layout.ConversionPattern=%d %5p [%t] %c(%F:%M:%L) - %m%n
logger for PAY
log4j.logger.pay_logger=info,PAY
log4j.appender.PAY=org.apache.log4j.RollingFileAppender
log4j.appender.PAY.Append=true
log4j.appender.PAY.file=${webapp.root}/WEB-INF/logs/pay_logger.log
log4j.appender.PAY.MaxFileSize=10MB
log4j.appender.PAY.MaxBackupIndex=50
log4j.appender.PAY.layout=org.apache.log4j.PatternLayout
log4j.appender.PAY.layout.ConversionPattern=%d %5p [%t] %c(%F:%M:%L) - %m%n
logger for refund
log4j.logger.refund_logger=info,refund
log4j.appender.refund=org.apache.log4j.RollingFileAppender
log4j.appender.refund.Append=true
log4j.appender.refund.file=${webapp.root}/WEB-INF/logs/refund_logger.log
log4j.appender.refund.MaxFileSize=10MB
log4j.appender.refund.MaxBackupIndex=50
log4j.appender.refund.layout=org.apache.log4j.PatternLayout
log4j.appender.refund.layout.ConversionPattern=%d %5p [%t] %c(%F:%M:%L) - %m%n
logger for interfacecall_logger
log4j.logger.interfacecall_logger=info,interfacecall
log4j.appender.interfacecall=org.apache.log4j.RollingFileAppender
log4j.appender.interfacecall.Append=true
log4j.appender.interfacecall.file=${webapp.root}/WEB-INF/logs/interfacecall_logger.log
log4j.appender.interfacecall.MaxFileSize=10MB
log4j.appender.interfacecall.MaxBackupIndex=50
log4j.appender.interfacecall.layout=org.apache.log4j.PatternLayout
log4j.appender.interfacecall.layout.ConversionPattern=%d %5p [%t] %c(%F:%M:%L) - %m%n
系统日志
logger for uncatch
log4j.logger.uncatch_logger=error,uncatch_logger
log4j.appender.uncatch_logger=org.apache.log4j.RollingFileAppender
log4j.appender.uncatch_logger.Append=true
log4j.appender.uncatch_logger.file=${webapp.root}/WEB-INF/logs/uncatch_logger.log
log4j.appender.uncatch_logger.MaxFileSize=10MB
log4j.appender.uncatch_logger.MaxBackupIndex=50
log4j.appender.uncatch_logger.layout=org.apache.log4j.PatternLayout
log4j.appender.uncatch_logger.layout.ConversionPattern=%d %5p [%t] %c(%F:%M:%L) - %m%n
框架日志
logger for spring
log4j.logger.org.springframework=info,springframework
log4j.appender.springframework=org.apache.log4j.RollingFileAppender
log4j.appender.springframework.Append=false
log4j.appender.springframework.File=${webapp.root}/WEB-INF/logs/spring.log
log4j.appender.springframework.MaxFileSize=10MB
log4j.appender.springframework.MaxBackupIndex=50
log4j.appender.springframework.layout=org.apache.log4j.PatternLayout
log4j.appender.springframework.layout.ConversionPattern=%d %5p [%t] %c(%F:%L) - %m%n
logger for hibernate
log4j.logger.org.hibernate=info,hibernate
hql解析语法树
log4j.logger.org.hibernate.hql.ast.AST=info
sql及参数打印
log4j.logger.org.hibernate.SQL=trace
log4j.logger.org.hibernate.type=trace
above two configs
log4j.logger.org.hibernate.tool.hbm2ddl=info
log4j.logger.org.hibernate.hql=info
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.transaction=info
log4j.logger.org.hibernate.jdbc=info
log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
log4j.appender.hibernate=org.apache.log4j.RollingFileAppender
log4j.appender.hibernate.Append=false
log4j.appender.hibernate.File=${webapp.root}/WEB-INF/logs/hibernate.log
log4j.appender.hibernate.Encoding=utf8
log4j.appender.hibernate.MaxFileSize=10MB
log4j.appender.hibernate.MaxBackupIndex=50
log4j.appender.hibernate.layout=org.apache.log4j.PatternLayout
log4j.appender.hibernate.layout.ConversionPattern=%d %5p [%t] %c(%F:%L) - %m%n
通用日志(输出到数据库和Email)
记录到数据库
log4j.logger.logToDb=ERROR, logToDb
log4j.appender.logToDb=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logToDb.URL=jdbc:mysql://10.120.99.174/tclshop_yh?useUnicode=true&characterEncoding=UTF-8
log4j.appender.logToDb.driver=com.mysql.jdbc.Driver
log4j.appender.logToDb.user=root
log4j.appender.logToDb.password=tclshop_2015
log4j.appender.logToDb.sql=INSERT INTO log4j_log (log_date, log_name, log_priority, log_class,log_line,log_method,log_message,log_trace) VALUES (‘%d’, ‘%c’, ‘%p’,’%F’,’%L’,’%M’,’%m’,’%l’)
log4j.appender.logToDb.layout=org.apache.log4j.PatternLayout
记录到邮件
log4j.logger.logToMail=ERROR, logToMail
log4j.appender.logToMail=com.aebiz.b2b2c.baseframework.log4j.SMTPExtAppender
log4j.appender.logToMail.SMTPAuth=true
日志达到这个大小,就发送邮件(KB)
log4j.appender.logToMail.BufferSize=10
log4j.appender.logToMail.Subject=Log4J Message
log4j.appender.logToMail.To= ljq@kuyumall.com
log4j.appender.logToMail.layout=org.apache.log4j.PatternLayout
log4j.appender.logToMail.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n
- 日志记录—项目日志处理方案
- Java项目日志记录方案
- 日志系列--计量日志处理方案
- 日志系列-常见处理方案
- SSH项目中异常处理与日志记录
- Spring-Aop处理记录日志
- Java项目如何记录日志
- 在项目中记录日志
- Java项目如何记录日志
- Java项目如何记录日志
- Java项目如何记录日志
- Java项目如何记录日志
- Java项目如何记录日志
- Java项目如何记录日志
- Java项目如何记录日志
- Java项目如何记录日志
- Java项目如何记录日志
- Java项目如何记录日志
- Eclipse解决“Archive for required library: ...”错误
- 正则的贪婪模式/preg_match/preg_match_all
- nodejs基础: 如何升级Noejs版本
- Android 获取本机号码(收集)
- js中方法和函数,函数的两种写发都是什么情况
- 日志记录—项目日志处理方案
- postgresql分表及数据迁移
- 小白的github个人博客稳搭绕坑详解
- CSS备忘录
- 做Android中遇到的问题,集锦
- 有关反射的一些理解
- Linux内核的整体架构
- setContentView究竟干了什么?(API21)
- 懒加载的形式创建一个按钮