分析问题

(1)zookeeper在预装的时候并没有给我们很好的处理日志的问题,系统会默认在你启动的地方吧日志打印到当前的路径下面,比如我现在当前目录下面启动zk服务器并通过ll密令就发现在当前路径下面多出来了一个 zookeeper.out的文件

windows本地如何关闭zookeeper zookeeper关闭日志_zookeeper

设计思想

(2)从上面我们知道zookeeper的日志输出路径没有一个统一的模式,这样子日志文件不好控制,对于我们去维护没有一个精准,所以我们要给日志文件统一处理。

统一处理


a. 修改Zookeeper的home目录下面的bin目录的zkEnv.sh脚本




windows本地如何关闭zookeeper zookeeper关闭日志_zookeeper_02



(1)ZOO_LOG_DIR


把这个属性的值改成你要指定要输出日志的路径就可以了,比如这里是/app/zookeeper-3.4.5/logs。


测试


(1)首先我们在主目录下面启动服务器,然后查看zookeeper.out这个文件是否还在这个路径下面,如果不存在,那么我们就去我们制定的输出路径下面看看该文件已经存在,那么久可以证明我们的修改成功的!



windows本地如何关闭zookeeper zookeeper关闭日志_java_03



(2)使用命令pwd来验证我们在修改的路径就是现在这个路径,我们会发现zookeeper.out这个文件已经被统一放在这个路径下面了



windows本地如何关闭zookeeper zookeeper关闭日志_java_04



如果是集群环境的话,修改一个,然后scp到其他服务器就可以了。zookeeper服务在打印日志也是一种性能消耗和内存积累,但是日志文件很重要,通过日志我们可以分析出我们想要的信息,这个根绝业务需求,系统默认是INFO及以上级别的日志,INFO信息都是些启动服务器时候打印的信息,也可以修改成WARN级别以上的,这样子可以减少很多日志上面的性能消耗!


修改日志级别


修改日志级别需要修改两个地方:


(1)zookeeper全局变量的脚本:zkEnv.sh的ZOO_LOG4J_PROP属性值, 也就是上面蓝色的地方,把INFO改成WARN就可以。



windows本地如何关闭zookeeper zookeeper关闭日志_hadoop_05



(2)conf目录下面的log4j.properties文件的zookeeper.root.logger属性



windows本地如何关闭zookeeper zookeeper关闭日志_zookeeper_06



(3)测试日志级别打印


a.测试启动看看有没有启动日志


[hadoop@hadoop07 logs]$ zkServer.sh restart
JMX enabled by default
Using config: /app/zookeeper-3.4.5/bin/../conf/zoo.cfg
JMX enabled by default
Using config: /app/zookeeper-3.4.5/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
JMX enabled by default
Using config: /app/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop07 logs]$ ll
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Dec 30 15:00 zookeeper.out

从上面我们可以看到当前的zookeeper.out这个文件大小为0,所以里面是没有任何东西的。


b.我们把改服务器的myid里面的值改变一下,然后重启,系统肯定报错,然后再查看日志是否会打印!



windows本地如何关闭zookeeper zookeeper关闭日志_hadoop_07



[hadoop@hadoop07 logs]$ cat zookeeper.out 
2017-12-30 15:02:32,981 [myid:5] - ERROR [main:QuorumPeer@171] - Setting LearnerType to PARTICIPANT but 5 not in QuorumPeers. 
2017-12-30 15:02:32,990 [myid:5] - ERROR [main:QuorumPeerMain@89] - Unexpected exception, exiting abnormally
java.lang.RuntimeException: My id 5 not in the peer list
	at org.apache.zookeeper.server.quorum.QuorumPeer.startLeaderElection(QuorumPeer.java:479)
	at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:411)
	at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:151)
	at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
	at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
[hadoop@hadoop07 logs]$

从上面我们不难看出,我们修改了myid的值以后,报错日志级别在WARN以上,所以会在zookeeper.out写入错误信息,说明我们的修改成功!


完!