发表于: 2017-10-18 23:27:22
2 669
今天做的事情:
测试一下log4j来打印日志。
<1> 添加日志记录基于三个目的:
1 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;
2 跟踪代码运行时轨迹,作为日后审计的依据;
3 担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
<2> Logger 负责处理日志记录的大部分操作。
其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, … 其中,level 是日志记录的优先级,分为OFF、 FATAL。ERROR、WARN、INFO、DEBUG、ALL。
建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。
ALL:打印所有的日志,OFF:关闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。
#定义LOG输出级别
log4j.rootLogger=INFO,Console,File
#定义日志输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
#文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定输出目录
log4j.appender.File.File = logs/ssm.log
#定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
<3> 配置日志信息输出目的地 Appende Appender 负责控制日志记录操作的输出
Log4j提供的appender有以下五种:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
<4> 配置日志信息的格式(布局)Layout Layout 负责格式化Appender的输出:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
<5> 格式化日志信息打印参数如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS}
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
深度思考:
1.maven是什么,和Ant有什么区别?
maven的定位是软件项目管理工具,Ant是软件构建工具。@1:Ant的脚本是可以运行在maven上面,而maven编译所有脚本都有一个基础pom. @2:maven对所依赖的包有明确的定义,使用什么包,有版本控制,而Ant只是简单的include所有的jar包。 @3:maven是基于中央仓库的编译,把所有编译资源放在中央仓库里,发布时只需要发布源码,而Ant发布时只能把所有jar包一起发布。@4:maven有大量的重用脚步可以利用,而Ant需要自己去写,试试maven site @5: maven不足的地方就是没有ant那样的成熟的GUI界面。
2.clean,install,package,deploy分别代表什么含义?
这些命令属于maven的生命周期阶段。clean生命周期处理工作的清理工作,包含3个阶段:pre-clean clean,post-clean 一般用作清理清除jar
, install:在本地的repository上安装发布包, package: 以发布的格式打包编译的代码 deploy: 在远程的repository上安装发布包
3.怎么样能让Maven跳过JUnit?
可以使用 mvn install -DskipTests 或者 mvn install -Dmaven.test.skip=true . 还可以在build添加 plugin 使用插件Surefire ,当到达test目标,将maven.test.skip 设置为true,就会跳过单元测试。
4.为什么要用Log4j来替代System.out.println?
首先一点是调试错误信息,使用System.out.println在输出完之后,删除挺麻烦。而log4j可以输出到控制台和文本里面,方便查看。还有思考占用资源的问题,log4j可以通过配置文件减少一些资源的占用。日志输出方式的不同,对系统系能也是有一定影响的,采用异步输出方式比同步输出方式性能要高。
5.为什么DB的设计中要使用Long来替换掉Date类型?
因为DATE有固定的格式,不同的地区有不同的时间表示方法,而且外国有夏令时与冬令时之分,非常麻烦,使用BigInt也能较为清晰的表示时间.而bigint的范围是所有数字,date用于表示年月日,取值范围:1000-01-01~9999-12-31.
6.自增ID有什么坏处?什么样的场景下不使用自增ID?
在做分布式数据库时,要求数据同步时,这种自增id就会出现严重的问题,因为无法用id来唯一标识记录,同时在数据库做移植时,也会出现各种问题。
7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
索引可以理解为特殊的目录,没有索引的表,单表查询可能十几万就是瓶颈。在数据超多的情况,经常和其他表进行连接的表,在连接字段上建立索引,还有就是查询条件多的。
8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
普通索引是最基本的索引,没有任何限制。也就是BTREE类型的索引,唯一索引的值必须唯一,但允许有空值,创建放法和普通索引类似
9.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
需要,数据库帮助判断。
评论