溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Zookeeper中怎么解決zookeeper.out文件輸出位置問題

發布時間:2023-04-03 11:51:11 來源:億速云 閱讀:216 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Zookeeper中怎么解決zookeeper.out文件輸出位置問題”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Zookeeper中怎么解決zookeeper.out文件輸出位置問題”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

使用過 Zookeeper 的小伙伴都知道,Zookeeper 中運行日志 zookeeper.out 文件的輸出路徑默認為啟動腳本的當前路徑,導致Zookeeper 集群啟動失敗想看日志時總是不記得輸出日志在哪兒,不方便查看日志文件,所以需要修改日志輸出位置及方式,方便查看日志。

具體操作如下:

注釋:以下所用 $ZOOKEEPER_HOME 為 Zookeeper 的根目錄

修改 $ZOOKEEPER_HOME/bin/zkEnv.sh 文件

將 ZOO_LOG_DIR 設置成自定義路徑,本次設置為 ${ZOOKEEPER_PREFIX}/logs,其中 ZOOKEEPER_PREFIX 變量是此腳本開頭獲取的 Zookeeper 的 bin 路徑,我們直接以此來定位自己的日志路徑即可。

具體如下:

# 修改前
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="."
fi

# 修改后
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
#    ZOO_LOG_DIR="."
    # 自定義運行日志文件輸出路徑
    ZOO_LOG_DIR="${ZOOKEEPER_PREFIX}/logs"
fi

將日志文件寫到 Zookeeper 安裝目錄下的 logs 文件夾中(logs 不需要創建,它會自己創建)。

這樣在每次使用 zkSever.sh 的時候,都能將運行日志 zookeeper.out 輸出到指定路徑下,但這樣配置有個問題,就是每次運行 Zookeeper 時,此日志都會被覆蓋,而不是 append 到文件中,故每次運行結束后只會保存有本次運行日志,若單次運行時間很長也會導致日志文件也很大。

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

在之前的配置中,我們只是實現了保存本次Zookeeper運行日志在指定路徑下,這次我們通過配置 $ZOOKEEPER_HOME/conf/log4j.properties 來使用 log4j 日志框架將 Zookeeper 每次的運行日志都保存到指定路徑下。

修改其中的 zookeeper.root.logger、zookeeper.log.dir 這兩個參數。

具體如下:

# 修改前
zookeeper.root.logger=INFO, CONSOLE
zookeeper.log.dir=.

# 修改后
zookeeper.root.logger=INFO, CONSOLE, ROLLINGFILE
zookeeper.log.dir=/opt/module/zookeeper-3.4.10/logs

其中參數 zookeeper.root.logger 是設置日志優先級和打印方式,默認為控制臺打印 CONSOLE,而在 zkServer.sh 中會啟動后臺命令,將控制臺輸出的日志輸出重定向到 zookeeper.out 文件中。

修改后添加了滾動產生文件輸出方式 ROLLINGFILE;通過參數 zookeeper.log.dir 設置日志文件 zookeeper.log 的存儲路徑,這里直接采用絕對路徑,相對路徑可能不識別;默認日志文件名為 zookeeper.log,其中所有參數都可以自定義修改。其余參數不再贅述。

修改 $ZOOKEEPER_HOME/bin/zkEnv.sh 文件

這里為什么又要修改 zkEnv.sh 文件呢?

因為 zkEnv.sh 文件中也有 log 文件的輸出位置及方式,所以我們要將其中的 ZOO_LOG4J_PROP 設置成與 log4j 配置文件中相同,避免參數覆蓋。

具體如下:

# 修改前
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,CONSOLE"
fi

# 修改后
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
#    ZOO_LOG4J_PROP="INFO,CONSOLE"
    #自定義運行日志信息輸出方式,增加了滾動輸出的方式,初始只有控制臺輸出
    ZOO_LOG4J_PROP="INFO,CONSOLE,ROLLINGFILE"
fi

修改 $ZOOKEEPER_HOME/bin/zkServer.sh 文件

完成以上配置就可以將日志文件按照自己想要的方式輸出,唯一美中不足的是在你設定的目錄中,仍會有 zookeeper.out 文件存在, 雖然它的 size=0,究其原因是因為 zkServer.sh 會使用 nohup 進行 Zookeeper 的啟動,然而 nohup 必然會輸出一個日志文件到你設置的目錄中,所以修改 _ZOO_DAEMON_OUT 此處的邏輯修改掉, 就可以將zookeeper.out了。

具體如下:

#修改前
_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"

#修改后
_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.log"

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

上述日志配置是以日志文件大小輪轉的,如果想要按照天輪轉,可以將 log4j.appender.ROLLINGFILE 修改為 DaliyRollingFileAppender。

通過參數 log4j.appender.ROLLINGFILE.MaxBackupIndex 設置最大日志數量,每個日志文件大小最大默認為 10MB,以此文件大小進行分割。

具體如下:

# 修改前
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
#log4j.appender.ROLLINGFILE.MaxBackupIndex=10

# 修改后
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ROLLINGFILE.MaxBackupIndex=10

DailyRollingFileAppender特點是固定周期時間生成一個日志文件,比如,默認情況是每天生成一個文件。

這種日志可以方便根據時間來定位日志位置,使日志清晰易查。但是這種日志有個不好地方是,不能限制日志數量,MaxBackupIndex 屬性和 MaxFileSize 在DailyRollingFileAppender 中是無效的,這個還是按照自己的需求來定!

當然還有其他一些參數:

log4j.appender.ROLLINGFILE.File=zookeeper.log
## 按照什么頻率滾動文件:yyyy-MM(每月)、yyyy-ww(每周)、yyyy-MM-dd(每天)、yyyy-MM-dd-a(每半天)、yyyy-MM-dd-HH(每小時)、yyyy-MM-dd-HH-mm(每分鐘)
## 此處文件名為zookeeper.log.yyyy-MM-dd,最新文件名為zookeeper.log
log4j.appender.ROLLINGFILE.DataPattern='.'yyyy-MM-dd
log4j.appender.ROLLINGFILE.encoding=UTF-8
## 是否啟動追加模式,默認為true,false為覆蓋
log4j.appender.ROLLINGFILE.Append=false

補充

修改原始輸出邏輯,不再將本次運行日志信息所有輸出到 zookeeper.out 中,而是使用log4j框架輸出到 zookeeper.log 中,便于管理。而 zookeeper.out 只用于輸出標準錯誤。

具體如下所示:

注意:要想實現此處操作,上述 _ZOO_DAEMON_OUT=“$ZOO_LOG_DIR/zookeeper.out” 不能修改為 _ZOO_DAEMON_OUT=“$ZOO_LOG_DIR/zookeeper.log”

# 修改前
141     nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
142     -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

# 修改后: 將原始指令注釋,設置新的輸出邏輯,只將標準錯誤輸出到zookeeper.out中.
141 #    nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
142 #    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
143     nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
144     -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" 2> "$_ZOO_DAEMON_OUT" 1> /dev/null &

這樣就能保證歷史運行日志都能輸出到指定文件夾中,并且不會因為運行日志文件堆積造成負載點爆炸。

而標準錯誤都會輸出到 zookeeper.out 文件中,和運行日志放置在同一文件夾中。

當需要查看腳本命令錯誤時,可以查看 zookeeper.out 文件,當需要查看程序錯誤時就查看 zookeeper.log 運行日志文件。

需要注意的是:每次啟動 Zookeeper 時,都會覆蓋 zookeeper.out 文件,所以要做重啟處理時記得備份文件。

讀到這里,這篇“Zookeeper中怎么解決zookeeper.out文件輸出位置問題”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女