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

news/2024/9/18 21:10:49/ 标签: zookeeper, debian, 分布式

更改日志输出路径

如果不做修改,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/news/1518322.html

相关文章

我的推荐:腾讯云罗云《从零构建向量数据库》

在2024年8月&#xff0c;好几本和数据库相关的图书相继出版&#xff0c;我以为&#xff0c;这恰恰是数据库领域蓬勃向上的一种表现。 数据库需要更多的人关注&#xff0c;哪怕是谈论&#xff0c;所以我的《数据库简史》是一种尝试&#xff0c;希望以一种科普的风格&#xff0c;…

信息安全数学基础(4)最大公因数

前言 在信息安全数学基础中&#xff0c;最大公因数&#xff08;Greatest Common Divisor, GCD&#xff09;是一个核心概念&#xff0c;它在密码学、数论等多个领域都有广泛应用。以下是对最大公因数的详细阐述&#xff1a; 一、定义 设a和b是两个非零整数&#xff0c;若整数d同…

框架 +【Mybatis】概述 以及 基础环境搭建

目录 什么是框架&#xff1f; java后端框架包括 Mybatis概述 1、背景介绍 2、mybatis介绍 Mybatis环境搭建 1.创建一个maven项目 2.导入mysql数据库驱动包 导入mybatis依赖的jar包 3.创建一个全局的mybatis配置文件 4.创建数据库,创建表,准备数据 5.创建一个访问接口…

PHP一体化解决方案高效整合与优化学校管理系统小程序源码

一体化解决方案&#xff0c;让学校管理系统焕发新生✨ &#x1f3eb; 开篇&#xff1a;传统管理的瓶颈与挑战 在快节奏的教育时代&#xff0c;传统的学校管理系统是否让你感到力不从心&#xff1f;&#x1f914; 信息孤岛、流程繁琐、效率低下...这些问题是否正困扰着你的工作…

vue 使用el-table 设置了show-overflow-tooltip属性,路由跳转后,气泡不消失的解决办法

文章目录 一、问题场景二、解决方法1.问题bug2.最终解决 总结 一、问题场景 在vue项目里使用el-table做一个列表页面&#xff0c;表格设置了show-overflow-tooltip属性&#xff0c;文字过长时鼠标滑过会展示气泡显示全部文字内容&#xff0c;因为设置路由缓存&#xff0c;如果…

哈苏相机SD卡数据恢复指南:从格式化到重生

在摄影的世界里&#xff0c;‌哈苏相机以其卓越的画质和精湛的工艺赢得了无数摄影师的青睐。‌然而&#xff0c;‌面对不慎的误操作&#xff0c;‌如SD卡格式化&#xff0c;‌珍贵的照片和视频数据可能瞬间消失&#xff0c;‌这无疑是对摄影师的重大打击。‌本文将深入探讨如何…

PostgreSQL遍历所有的表并为其创建基于某个字段的索引

完整代码 以下以"collect_time"字段为例&#xff0c;其他字段请自行全局替换 DO $$ DECLAREtable_name TEXT;index_name TEXT; BEGIN-- 遍历 public 模式下的所有表FOR table_name IN (SELECT table_nameFROM information_schema.tablesWHERE table_schema publicOR…

网上商城|基于SprinBoot+vue的分布式架构网上商城系统(源码+数据库+文档)

分布式架构网上商城系统 目录 基于SprinBootvue的分布式架构网上商城系统 一、前言 二、系统设计 三、系统功能设计 5.1系统功能模块 5.2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍…

大语言模型之Qwen2技术报告阅读笔记

QWEN2 TECHNICAL REPORT——2024 核心内容 介绍了Qwen2 大模型系列&#xff1a;基于transformer架构的LLMs 通过以下四个部分来展开介绍&#xff1a; Tokenizer & Model 四个dense models&#xff0c;参数计数为 0.5 亿、15 亿、70 亿和 720 亿一个Mixture-of-Experts (…

svn迁移到git

通过git bash将svn迁移到git上&#xff0c;并保留svn的提交历史。 一、准备 1、在电脑上安装git 2、确认svn账号具备该svn地址的操作权限 3、准备将要操作的svn项目地址、以及该项目下所有提交人的账号信息&#xff08;在idea工具看提交历史&#xff09;&#xff0c;将信息存放…

classA cla= ...; if(cla == nullptr) 这种写法是否安全

在C中&#xff0c;classA cla …; 这行代码创建了一个名为 cla 的 classA 类型的对象&#xff08;假设 classA 是一个已经定义好的类&#xff09;。这个对象 cla 是在栈上分配的&#xff0c;而不是在堆上。因此&#xff0c;&cla&#xff08;即 cla 的地址&#xff09;永远…

Nginx负载均衡中的缓存过期配置:策略与实现

在Nginx负载均衡的高级应用中&#xff0c;合理配置缓存过期策略对于提升网站性能和保证内容的新鲜度至关重要。缓存过期意味着存储在代理缓存中的响应在一定时间后将被视为过时&#xff0c;并在下一次请求时从原始服务器重新获取。本文将详细介绍如何在Nginx中配置缓存过期&…

从PCB开始研究FPGA设计问题

从PCB开始研究FPGA设计问题 文章目录 从PCB开始研究FPGA设计问题前言一、高速电路板1.1 电源供电1.1.1 供电要求1.1.2 退耦 总结 前言 这里只针对FPGA告诉电路板设计问题进行讨论 一、高速电路板 一个成功的高速电路板&#xff0c;需要再复杂的板路中&#xff0c;应该避免与…

Nginx: 反向代理和动静分离概述

反向代理 反向代理服务器介于用户和真实服务器之间&#xff0c;提供请求和响应的中转服务对于用户而言&#xff0c;访问反向代理服务器就是访问真实服务器反向代理可以有效降低服务器的负载消耗&#xff0c;提升效率 1 &#xff09;反向代理的模型 现在我们有一个用户和真实服…

Java笔试面试题AI答之集合(4)

文章目录 19. 简述Java集合框架机制与原理&#xff1f;1. 集合框架的组成2. 核心接口3. 集合框架的原理3.1 底层数据结构3.2 操作原理 4. 集合框架的优势 20. 简述集合框架中的泛型有什么作用和优点 &#xff1f;作用优点 21. Java集合框架的基础接口有哪些&#xff1f;22. 解释…

群晖7.2.1 半洗白后安装AME

1. 群晖打开SSH 2. Xshell登录群晖 用管理员账户登录&#xff0c;然后使用sudo -i 获取root权限&#xff0c;sudo -i是要再次验证管理员密码 sudo -iSA6400还需要运行这个命令 /usr/syno/etc/rc.sysv/apparmor.sh stop #DSM7.2 AME版本3.1.0-3005强制解锁激活命令 curl -sk…

mysqlcheck

mysql bin中的其他工具包 对于mysql的其他工具, 有很多选项是公共的, 例如你在对数据库进行检查的时候, 需要指定host和user以及其password来连接上mysqlserver来进行相关操作, 这个时候其实用到的host等东西跟我们之前的mysql-client其实是类似的 也就是说他们是作为mysql众…

学习之SQL语言之DDL

查询 查询所有数据 SHOW DATABASES&#xff1b; 查询当前数据库 SELECT DATABASE(); 创建 CREATE DATABASE IF NOT EXISTS 数据库名&#xff1b; 删除 DROP DATABASE IF EXISTS 数据库名&#xff1b; 使用 USE 数据库名&#xff1b; 查询当前数据库所有表 SHOW TABLES; 查…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——8.stackqueuepriority_queue(模拟实现)

1.stack 可通过模板使用其他类来建立stack&#xff08;如vector&#xff0c;list&#xff09; #include<vector>namespace zone {template<class T,class container> //两个模板参数class stack{public:void push(const T& x){it.push_back(x); //使用it的p…

Spring Cloud Open Feign 超时配置及源码分析

前言&#xff1a; 在开发 Spring Cloud 微服务项目时候&#xff0c;Feign 调用是非常常见的&#xff0c;Feign 调用的底层还是 HTTP 的远程调用&#xff0c;会有超时问题&#xff0c;如果没有搞清楚超时问题&#xff0c;生产环境的调用肯那个会有种种问题出现&#xff0c;本篇…