系统开发中日志的使用
来源:互联网 发布:修改定位软件 编辑:程序博客网 时间:2024/06/15 10:33
一.首先总结下log和system.out.println()的区别
1.System.out.print和java运行程序运行在同一线程,也就是说,业务程序会等待System.out的动作,导致资源被占用;使用日志工具时是进行调试信息的打印,这类工具是异步线程的,不会使程序处于等待状态。
2.System.out.print的优点:直观、方便;Log的优点:异步、解耦、灵活、策略多。
3.System.out.print是在控制台输出,只能输出到控制台,功能上线后,总不能一直盯着控制台吧,而且日志文件需要保留,以供日后分析,是需要一套管理规范的,即便使用tomcat服务器,System.out会输出到catalina.out文件,catalina.out文件也不会一直存在,需要定期清空,如果不清空,大文件的读写也是挺影响性能的。说到这里,System.out.print写入的文件只有一个,对于一个文件的读写,这个io肯定会排队写,且System.out.print在当前线程,肯定对性能会有稍微的影响。
4.需要指出的是,真正的开发环境下,存在大量的System.out.print是不规范的开发习惯。
二.学习下Log4j
Log4j中有三个重要的组件:
1. Loggers日志信息的优先级
日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度,设置为高级别的优先级时,低优先级的日志将不会输出,比如将日志级别设置为INFO,则DEBUG级别的目录不会被记录,为了防止日志输出泛滥,最好不要将日志级别设置太低,一般为INFO即可。
2. Appenders,日志信息的输出目的地
日志信息的输出目的地指定了日志将打印到控制台还是文件中,参数如下:
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件,本文中的案例选择的策略)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件,也是一个不错的选择)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
3. Layouts,日志信息的输出格式
输出格式的功能是控制日志信息的显示内容,参数如下:org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式,本案例所选择的策略,需对日志格式进行设置)
三. 项目中集成日志管理
#log4j.rootLogger = [level],appenderName,appenderName2,...#level是日志记录的优先级,分为OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL##Log4j建议只使用四个级别,优先级从低到高分别是DEBUG,INFO,WARN,ERROR#通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关#比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来log4j.rootLogger=DEBUG, debug#Log4j针对不同包指定level:#一般在生产环境中应用系统,日志级别调整为INFO以避免过多的输出日志。#但某些时候,需要跟踪具体问题,那么就得打开DEBUG日志。#但是如果打开log4j.rootLogger,则需要的信息就会淹没在日志的海洋中。#此时,需要单独指定某个或者某些Logger的日志级别为DEBUG,而rootLogger保持INFO不变。#参考配置如下(指定com.ssm.maven.core.admin类的日志输出)#分包设置,admin与service包中的日志输出分离log4j.logger.com.ssm.maven.core.admin=INFO,adminlog4j.logger.com.ssm.maven.core.service=INFO,servicelog4j.logger.org.springframework=OFFlog4j.logger.org.mybatis.spring=ONlog4j.logger.org.springframework.context.annotation=OFFlog4j.appender.admin=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.admin.layout=org.apache.log4j.PatternLayoutlog4j.appender.admin.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%nlog4j.appender.admin.datePattern='.'yyyy-MM-ddlog4j.appender.admin.Threshold = INFOlog4j.appender.admin.append=true#admin包下的日志输出到admin.log文件中log4j.appender.admin.File=${catalina.home}/logs/ssm-maven/admin.loglog4j.appender.service=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.service.layout=org.apache.log4j.PatternLayoutlog4j.appender.service.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%nlog4j.appender.service.datePattern='.'yyyy-MM-ddlog4j.appender.service.Threshold = INFOlog4j.appender.service.append=true#admin包下的日志输出到service.log文件中log4j.appender.service.File=${catalina.home}/logs/ssm-maven/service.loglog4j.logger.debug=debuglog4j.appender.debug=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.debug.layout=org.apache.log4j.PatternLayoutlog4j.appender.debug.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%nlog4j.appender.debug.datePattern='.'yyyy-MM-ddlog4j.appender.debug.Threshold = DEBUGlog4j.appender.debug.append=truelog4j.appender.debug.File=${catalina.home}/logs/ssm-maven/debug.loglog4j.logger.java.sql.ResultSet=INFOlog4j.logger.org.apache=INFOlog4j.logger.java.sql.Connection=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG
- 系统开发中日志的使用
- 系统开发中日志管理
- 关于软件开发中系统日志的记录
- ACE中日志系统(Logging Facility)的基本使用
- ACE中日志系统(Logging Facility)的基本使用
- web开发中log4j.properties日志文件的使用
- 代码开发过程中对日志的使用总结
- log4j系统日志的使用
- MFC下的日志系统开发
- C#系统开发操作日志的实现
- 实践:使用 Apache Hadoop 处理日志使用典型 Linux 系统上的 Hadoop 从日志中提取有用数据
- PC Camera开发日志(二十二)------ 系统中控件默认的长宽值
- django 个人博客系统开发 - 日志器 基本信息的全局使用
- 系统开发日志
- 系统日志中展现的段错误
- 系统日志中系统启动时间的含义
- Linux系统中查看日志的常用命令
- Linux系统中查看日志的常用命令
- jenkins安装与使用(Linux下)
- J
- Dji 实现数据透传注意事项
- RT3070开发过程总结
- Java自定义注解和反射获取注解
- 系统开发中日志的使用
- C--最短路(Bellman-Ford算法)
- Javascript 面向对象编程(一):封装
- 算法的时间复杂度和空间复杂度-总结
- 浮点数在内存中的存储
- padding与margin区别
- [NOIP模拟赛]统计
- 异常处理
- Python初学者学习案例之一