Zookeeper 日志输出到指定文件夹,并按照日期轮循输出

embedded/2024/12/23 1:28:08/

更改日志输出路径

如果不做修改,zookeeper的日志信息默认都打印到了zookeeper.out文件中,这样输出路径和大小没法控制,因为日志文件没有轮转。所以需要修改日志输出方式。具体操作如下:

1.修改${zkhome}/bin/zkEnv.sh

ZOO_LOG_DIR指定想要输出到哪个目录,ZOO_LOG4J_PROP指定INFO,ROLLINGFILE的日志APPENDER.

if [ "x${ZOO_LOG_DIR}" = "x" ]
then# 指定想要输出到哪个目录ZOO_LOG_DIR="/apps/logs/zookeeper"
fiif [ "x${ZOO_LOG4J_PROP}" = "x" ]
then# 指定日志生成规则ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fiif [ "$JAVA_HOME" != "" ]; thenJAVA="$JAVA_HOME/bin/java"
elseJAVA=java
fi

2.修改$ZOOKEEPER_HOME/conf/log4j.properties文件

zookeeper.root.logger的值与前一个文件的ZOO_LOG4J_PROP 保持一致,该日志配置是以日志文件大小轮转的,如果想要按照天轮转,可以修改为DaliyRollingFileAppender.
RollingFileAppender按log文件最大长度限度生成新文件,DailyRollingFileAppender按日期生成新文件。

# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO,ROLLINGFILE 
zookeeper.console.threshold=INFO
zookeeper.log.dir=.
zookeeper.log.file=zookeeper-1.log
zookeeper.log.threshold=DEBUG
zookeeper.tracelog.dir=.
zookeeper.tracelog.file=zookeeper_trace.log
#
#
# Add ROLLINGFILE to rootLogger to get log file output
#    Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}# Max log file size of 10MB
#log4j.appender.ROLLINGFILE.MaxFileSize=10MB
# uncomment the next line to limit number of backup files
#log4j.appender.ROLLINGFILE.MaxBackupIndex=10

zookeeperout_53">3.去掉zookeeper.out文件

美中不足的是在你设定的目录中, 仍会有zookeeper.out文件存在, 虽然它的size=0, 但是仍让我感到不爽.
究其原因是因为zkServer.sh会使用nohup进行zookeeper的启动, 然而nohup必然会输出一个日志文件到你设置的目录中。需要将此处的逻辑修改掉, 就可以将zookeeper.out移除啦, 如果你不是处女座当然可以省略这一步。
相关代码如下:

_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"case $1 in
start)echo  -n "Starting zookeeper ... "if [ -f "$ZOOPIDFILE" ]; thenif kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; thenecho $command already running as process `cat "$ZOOPIDFILE"`.exit 0fifinohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

按照日期轮循输出

log4j提供RollingFileAppenderDailyRollingFileAppender将日志记录输出到文件。RollingFileAppender按log文件最大长度限度生成新文件,DailyRollingFileAppender按日期生成新文件。

log4j.rootCategory=INFO, CONSOLE,Rlog4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/portal.log
log4j.appender.R.Encoding=GBK
log4j.appender.R.MaxFileSize=256KB
log4j.appender.R.Append=true 
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d %t %-5p [%c{1}:%L] %m%n

上面是使用RollingFileAppender的写法,将会在Tomcat的logs目录下,生成portal.log文件,当文件大小超过256KB时,将原来的文件更名为portal.log.1,再使用portal.log接收新的日志记录。
log4j.appender.R.MaxBackupIndex=10表示只保存10个备份文件。

下面是使用DailyRollingFileAppender的写法,配置完成的当天, 会在Tomcat的logs目录下,生成名为portal.log的文件,比如今天是2010-01-13, 到明天这个文件将更名为portal.log2010-01-13.log

log4j.rootCategory=INFO, CONSOLE,DailyRollinglog4j.appender.DailyRolling=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DailyRolling.File=${catalina.base}/logs/portal.log
log4j.appender.DailyRolling.DatePattern=yyyy-MM-dd'.log'  
log4j.appender.DailyRolling.layout=org.apache.log4j.PatternLayout
log4j.appender.DailyRolling.layout.ConversionPattern=%-d %t %-5p [%c{1}:%L] %m%n

ZooKeeper使用的log4j.properties的主要部分:

[java] view plain copyzookeeper.root.logger=INFO, CONSOLE  (1)  zookeeper.console.threshold=INFO  zookeeper.log.dir=.  zookeeper.log.file=zookeeper.log  zookeeper.log.threshold=DEBUG  zookeeper.tracelog.dir=.  zookeeper.tracelog.file=zookeeper_trace.log  log4j.rootLogger=${zookeeper.root.logger} (2)  log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender (3)  log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold} (4)  log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout (5)  log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] -  ...  log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender (6)  log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold} (7)  log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}  log4j.appender.ROLLINGFILE.MaxFileSize=10MB  log4j.appender.ROLLINGFILE.MaxBackupIndex=10  log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout                  log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] -  ...   

(1) 第一组设置以zookeeper开头,它们实际上是Java system property,可以被-D形式的命令行参数覆盖。第一行配置了日志级别,默认的设置是说在INFO级别以下的日志会被丢弃,并且日志会使用CONSOLE appender输出。你可以指定多个appender,例如如果你想使用CONSOLE appender和ROLLINGFILE appender输出日志,那么可以配置zookeeper.logger为INFO,CONSOLE,ROLLINGFILE。

(2) rootLogger处理所有日志的logger,因为我们没有定义其他logger。

(3) 这一行把CONSOLE appender和实际上处理日志输出的类绑定在一起,这里是ConsoleAppender类。

(4) appender也可以过滤日志。这一行将过滤任何在INFO级别之下的日志,因为这是在zookeeper.root.logger设置的threshold。

(5) appender使用一个布局(layout)类在输出前对日志进行格式化。我们使用pattern layout来记录日志的级别,日期,线程信息和调用位置信息以及消息本身。

(6) RollingFileAppender实现了rolling日志文件的功能,而不是持续的写到一个单独的文件或者控制台。如果rootLogger没有关联ROLLINGFILE,则此appender会被忽略。

(7) ROLLINGFILE的threshold设置成DEBUG。因为rootLogger过滤了所有在INFO级别之下的日志,没有DEBUG日志会输出到ROLLINGFILE。如果你想要看到DEBUG日志,你必须把zookeeper.root.logger从INFO改成DEBUG。

打日志会影响到进程的性能,尤其是在DEBUG级别下。同时日志会提供有价值的信息为诊断错误提供线索。一个平衡性能开销的有效方式是把appender的threshold设成DEBUG,并把rootLogger设成WARN级别,这在一般的情况都适用,一般只需要关注WARNING和它之上的日志。当你需要诊断问题时可以使用JMX动态设置为INFO或DEBUG级别,这样可以更方便定位问题。


http://www.ppmy.cn/embedded/104643.html

相关文章

SpringMVC基于注解使用:响应处理

视图解析器ViewResolver 在spring.xml里面设置ViewResolver作用是可以简化逻辑视图的名称 没简化之前 简化之后 在spring-mvc.xml里面设置视图控制器的作用&#xff0c;如果你想访问根目录的话就会进入index.jsp里面&#xff0c;如果你想访问/tuling&#xff0c;就会进入main.…

【王树森】RNN模型与NLP应用(1/9):数据处理基础(个人向笔记)

数值特征和分类特征 以下图为例子进行学习&#xff1a; Age&#xff1a; 年龄本身就是数值特征&#xff0c;数值特征可以比较大小。Gender&#xff1a; 二分的分类特征&#xff0c;可以用0和1来表示男性和女性。Natinoality&#xff1a; 可以用0-197的这些数字建立一一映射&…

Prometheus(八):Prometheus监控elasticsearch及常用API

目录 1 Prometheus监控elasticsearch1.1 启动ES自带的监控模块暴露指标数据1.2 通过Prometheus的插件 Elasticsearch Exporter来获取指标数据1、简介2、安装3、Prometheus配置 2 Prometheus常用API2.1 查询2.2 删除2.3 注册服务 1 Prometheus监控elasticsearch 使用Prometheus…

[bevformer渲染可视化] 2d框可视化 并可视化出小目标

可视化代码&#xff1a; 代码使用方法&#xff1a; 1.复制代码全文到任意python文件中 2.下载nuscenes v1.0-mini数据集,修改数据集路径&#xff0c;保证能读取到数据集 3.按照需求修改代码&#xff08;本文是2dbox面积的面积和整个图片的面积比小于0.03视为小目标&#xff0…

在ElementUI项目中集成iconfont图标库

在前端项目开发中经常会遇到使用的组件库提供的ICON图标不够用的情况。最常见的解决方案无非就是把设计图的图标切图引入到项目中。还有就是使用svg图标&#xff0c;封装一个渲染组件在项目里面直接引入这个组件。 本文将介绍另一种方法&#xff0c;即集成iconfont图标库的图标…

机器学习中的聚类算法概述

概述 聚类&#xff08;cluster&#xff09;与分类&#xff08;class&#xff09;问题不同&#xff0c;聚类是属于无监督学习模型&#xff0c;而分类属于有监督学习。聚类使用一些算法把样本分为N个群落&#xff0c;群落内部相似度较高&#xff0c;群落之间相似度较低。在机器学…

java简单平台跳跃游戏

对于渴望用Java创建简单平台跳跃游戏的朋友&#xff0c;这里有一个基础的游戏框架可以作为你的开始。 想象我们正开发一个2D的跳跃游戏&#xff0c;其核心玩法是让玩家控制角色以避开障碍。 下文将介绍如何利用Java结合java.awt和javax.swing库来制作一个具有图形界面的游戏示…

【SQL】餐馆营业额七日均线数据

目录 题目 分析 代码 题目 表: Customer ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | | visited_on | date | | amount | int | -----------------------…