您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 系统程序Log日志编码规范
系统开发log日志使用规范目的在系统开发过程中,项目经理都非常强调编码中log的重要性,并且强迫每个程序员都要求写log。但是为啥要写log,怎么写log,却很少有人去说去讲,让大家明白写log的目的性,有利于大家理解这样的行为。现在我们就来讨论一下写log是目的是什么?在代码中嵌入log代码信息,主要记录下列信息:1、记录系统运行异常信息。2、记录系统运行状态信息。3、记录系统运行性能指标。通过对上述信息分析和诊断,我们能采取正确的手段来提高系统质量和提升系统性能。Java日志组件选型针对spring容器进行日志选型:选择slf4j+自己想用的实现log类(推荐采用log4j)。选择slf4j的理由:1、可以和多种实现融合,具体实现log类,只要替换响应的jar,对应用程序不要做任何修改。2、编码简化了,不需要判断是否需要输入的if-else语句,通过可变参量格式化输出,方便书写3、当系统发布正常运行时,需要关闭log时,只要把对应的实现jar删除即可。4、解决项目中多个log组件冲突问题,通过引入一个slf4j来实现所有的日志组件自由切换。在系统开发项目总需要引入以下文件:Slf4j-api.jarSlf4j-log4j.jarLog4j.jarLog4j.properties日志类型主要分三大类:安全类信息:记录系统边界交互行为和信息业务类信息:记录系统内部业务处理行为和信息性能类信息:记录系统硬件对业务处理的支撑能力日志级别一般分五级:ERROR(错误):此信息输出后,主体系统核心模块正常工作,需要修复才能正常工作。WARN(警告):此信息输出后,系统一般模块存在问题,不影响系统运行。INFO(通知):此信息输出后,主要是记录系统运行状态等关联信息DEBUG(调试):最细粒度的输出,除却上面各种情况后,你希望输出的相关信息,都可以在这里输出。TRACE(跟踪):最细粒度的输出,除却上面各种情况后,你希望输出的相关信息,都可以在这里输出。(我们系统中不采用此级别)日志记录准则ERRORWARNINFODEBUG安全类信息合法拒绝正常其他业务类信息重要模块异一般模块异常正常其他常性能类信息超越指标信息正常其他日志记录代码规范这里的细则以标准的三层架构来分析,包括表示层/接口层、业务层、存储层。需要写日志的java类请加入以下代码:(实现log日志功能)importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;publicclassHelloWorld{publicstaticvoidmain(String[]args){Loggerlogger=LoggerFactory.getLogger(HelloWorld.class);logger.info(HelloWorld);}}建议使用slf4j的高版本,使用可变参量的特性。安全类信息记录业务类信息记录性能类信息记录表示层/接口层类importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;publicclassLoginActionextendsBaseAction{/***员工登录*@return*@throwsException*/publicvoidempLogin(){Loggerlogger=LoggerFactory.getLogger(LoginAction.class);……/**可以采用syslog的中产生的id,id是由外部用户或者定时器调用产生*/longlogoID=System.currentTimeMillis();Stringuser=;Stringmethod=;logger.info(事务{}用户{}调用{},logoID,user,method);……try{logger.info(事务{}用户{}调用{}调用登陆服务,logoID,user,method);//调用登陆服务logger.info(事务{}用户{}调用{}调用登陆服务完成,logoID,user,method);}catch(Exceptione){logger.error(事务{}用户{}调用{}调用登陆服务异常,logoID,user,method);logger.error(事务id=+logoID,e);}if(null==loginEmp){logger.warn(事务{}用户{}调用{}登陆失败,logoID,user,method);//this.session.put(globalURL,this.request.getContextPath()+/index.jsp);outJson({\success\:false});}else{logger.info(事务{}用户{}调用{}用户验证通过,logoID,user,method);this.session.put(user,loginEmp);//取得登录员工可以查看的机构idStringids=;try{logger.info(事务{}用户{}调用{}调用权限服务,logoID,user,method);//调用权限服务logger.info(事务{}用户{}调用{}调用权限服务完成,logoID,user,method);}catch(Exceptione){logger.error(事务{}用户{}调用{}调用权限服务异常,logoID,user,method);logger.error(事务id=+logoID,e);e.printStackTrace();}//取得登录员工的机构上级银行基本的IdLongorgId=0L;StringorgName=;try{logger.info(事务{}用户{}调用{}调用获取机构服务,logoID,user,method);//调用获取机构服务logger.info(事务{}用户{}调用{}调用获取机构服务,logoID,user,method);}catch(Exceptione){logger.error(事务{}用户{}调用{}调用获取机构服务异常,logoID,user,method);logger.error(事务id=+logoID,e);e.printStackTrace();}this.session.put(bankCode,orgId);this.session.put(bankName,orgName);this.session.put(indexOrgIds,ids);if(MD5.MD5To32(loginEmp.getEmpNo()).equals(loginEmp.getEmpPwd())){logger.info(事务{}用户{}调用{}密码验证通过,logoID,user,method);outJson({\success\:true,\url\:\+request.getContextPath()+/jsp/main/system/updatepwd.jsp\});}else{logger.info(事务{}用户{}调用{}密码错误,logoID,user,method);outJson({\success\:true,\url\:\+request.getContextPath()+/jsp/main/\});}//returnSUCCESS;logger.debug(事务{}用户{}调用{}完成,user{},bankcode{},bankName{},indexOrgIds{},logoID,user,method,user,orgId,orgName,ids);logger.info(事务{}用户{}调用{}完成,logoID,user,method);}}业务层类参考表示层的记录方法存储层类由于大量采用成熟组件,自身带有日志,无需重复记录附件Log4j.properies标准模板log4j.rootLogger=info,stdout,Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p%d{yy-MM-ddHH:mm:ss}%c:%L-%m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=logs\\hcmm_core.loglog4j.appender.R.DatePattern='.'yyyy-MM-ddlog4j.appender.R.layout=org.apache.log4j.PatternLayout#[日志级别|时间][线程名|类名|方法名|行号]messagelog4j.appender.R.layout.ConversionPattern=[%p|%d{yyyy-MM-ddHH:mm:ss}][%t|%C|%M|%L]-%m%n#ERRORWARNINFODEBUG,级别越高,信息输出越少。log4j.logger.org.hibernate=DEBUGlog4j.logger.org.hibernate.cache=infolog4j.logger.org.hibernate=warnlog4j.logger.org.hibernate.cache=warnlog4j.logger.org.hibernate.SQL=infolog4j.logger.org.springframework=infolog4j.logger.com.wri.hy.hcmm_baseServer=infolog4j配置规则输出等级控制:等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO,WARN,ERROR的log信息,而DEBUG信息不会被显示。输出类型控制:org.apache.log4j.ConsoleAppender(控制台),org.apache.log4j.FileAppender(文件),org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)输出信息模式:org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)自定义模式:输出的信息
本文标题:系统程序Log日志编码规范
链接地址:https://www.777doc.com/doc-4738618 .html