最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用java -jar啟動并按日分包日志的最佳實踐

 更新時間:2025年07月14日 09:54:44   作者:碼農(nóng)阿豪@新空間  
在生產(chǎn)環(huán)境中,Java應(yīng)用程序通常以java -jar方式運(yùn)行,而日志管理是運(yùn)維的重要部分,如果日志文件過大,不僅影響性能,還會增加排查問題的難度,因此,按日分包日志成為常見的需求,本文將介紹4種實現(xiàn)方式,并提供詳細(xì)配置和代碼示例,需要的朋友可以參考下

1. 引言

在生產(chǎn)環(huán)境中,Java應(yīng)用程序通常以java -jar方式運(yùn)行,而日志管理是運(yùn)維的重要部分。如果日志文件過大,不僅影響性能,還會增加排查問題的難度。因此,按日分包日志成為常見的需求。本文將介紹4種實現(xiàn)方式,并提供詳細(xì)配置和代碼示例。

2. 為什么需要日志分包?

  • 防止單個日志文件過大:日志文件過大會影響讀寫性能,甚至導(dǎo)致磁盤空間不足。
  • 便于日志歸檔和檢索:按日期分割后,可以快速定位某一天的日志。
  • 符合日志管理規(guī)范:許多企業(yè)要求日志必須按天存儲,并保留一定周期(如30天)。

3. 日志管理方案對比

方案適用場景優(yōu)點(diǎn)缺點(diǎn)
LogbackSpring Boot項目原生支持,配置簡單需依賴Logback
Log4j2高性能日志需求異步日志,性能好配置稍復(fù)雜
logrotateLinux服務(wù)器不依賴應(yīng)用代碼需額外安裝
Shell+Cron簡單應(yīng)用無需修改代碼不夠可靠

4. 方案1:使用Logback實現(xiàn)日志按日分包

4.1 Logback簡介

Logback是Log4j的改進(jìn)版,Spring Boot默認(rèn)使用它。它支持基于時間的滾動策略,非常適合日志分包。

4.2 配置logback.xml

src/main/resources/logback.xml中添加:

<configuration>
    <!-- 定義日志存儲目錄 -->
    <property name="LOG_DIR" value="logs" />
    
    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 當(dāng)前日志文件 -->
        <file>${LOG_DIR}/app.log</file>
        
        <!-- 滾動策略:按天分割 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名格式 -->
            <fileNamePattern>${LOG_DIR}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保留30天日志 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        
        <!-- 日志格式 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 設(shè)置日志級別 -->
    <root level="INFO">
        <appender-ref ref="ROLLING_FILE" />
    </root>
</configuration>

4.3 啟動方式

直接運(yùn)行:

java -jar your-app.jar

日志會自動按天存儲:

logs/
├── app.log           # 當(dāng)前日志
├── app.2023-10-01.log # 前一天的日志
└── app.2023-10-02.log # 更早的日志

5. 方案2:使用Log4j2實現(xiàn)日志按日分包

5.1 Log4j2簡介

Log4j2是Log4j的升級版,支持異步日志,性能優(yōu)于Logback。

5.2 配置log4j2.xml

src/main/resources/log4j2.xml中配置:

<Configuration>
    <Appenders>
        <!-- 按天滾動日志 -->
        <RollingFile name="RollingFile" 
                     fileName="logs/app.log"
                     filePattern="logs/app.%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <!-- 每天滾動一次 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
            <!-- 最多保留30天 -->
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>
    </Appenders>
    
    <Loggers>
        <Root level="info">
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
</Configuration>

5.3 啟動方式

java -jar your-app.jar

日志存儲結(jié)構(gòu):

logs/
├── app.log           # 當(dāng)前日志
├── app.2023-10-01.log # 歷史日志
└── app.2023-10-02.log

6. 方案3:使用Linux logrotate管理日志

6.1 logrotate簡介

logrotate是Linux自帶的日志管理工具,可定時壓縮、刪除舊日志。

6.2 配置logrotate規(guī)則

/etc/logrotate.d/myapp中添加:

/path/to/logs/app.log {
    daily              # 按天分割
    missingok          # 如果日志不存在,不報錯
    rotate 30          # 保留30天
    compress           # 壓縮舊日志
    delaycompress      # 延遲一天壓縮
    notifempty         # 空日志不處理
    copytruncate       # 復(fù)制后清空原日志(避免重啟應(yīng)用)
}

6.3 啟動方式

java -jar your-app.jar > /path/to/logs/app.log 2>&1 &

logrotate會每天自動分割日志:

/path/to/logs/
├── app.log       # 當(dāng)前日志
├── app.log.1.gz  # 昨天的日志(壓縮)
└── app.log.2.gz  # 前天的日志

7. 方案4:使用Shell腳本+Cron定時任務(wù)

7.1 Shell腳本實現(xiàn)日志分割

#!/bin/bash
LOG_DIR="/path/to/logs"
TODAY=$(date +%Y-%m-%d)

# 如果日志文件存在,則重命名
if [ -f "$LOG_DIR/app.log" ]; then
    mv "$LOG_DIR/app.log" "$LOG_DIR/app-$TODAY.log"
fi

# 重新啟動應(yīng)用(可選)
# kill現(xiàn)有進(jìn)程并重啟
pkill -f "java -jar your-app.jar"
nohup java -jar your-app.jar > "$LOG_DIR/app.log" 2>&1 &

7.2 結(jié)合Cron定時執(zhí)行

# 每天0點(diǎn)執(zhí)行
0 0 * * * /path/to/rotate_logs.sh

8. 方案對比與選擇建議

方案適用場景推薦指數(shù)
LogbackSpring Boot項目?????
Log4j2高性能需求????
logrotateLinux服務(wù)器管理???
Shell+Cron簡單臨時方案??

推薦選擇:

  • Spring Boot項目 → Logback
  • 需要高性能日志 → Log4j2
  • 非Java管理(如純Shell部署) → logrotate

9. 最佳實踐與注意事項

  1. 日志目錄權(quán)限:確保應(yīng)用有寫入權(quán)限。
  2. 磁盤空間監(jiān)控:避免日志占滿磁盤。
  3. 日志清理策略:建議保留30天,避免無限增長。
  4. 日志格式統(tǒng)一:方便后續(xù)分析(如ELK)。

10. 總結(jié)

本文介紹了4種java -jar啟動的日志分包方案:

  1. Logback(推薦Spring Boot使用)
  2. Log4j2(適合高性能需求)
  3. logrotate(適合Linux運(yùn)維)
  4. Shell+Cron(臨時方案)

最佳選擇取決于項目架構(gòu),但Logback/Log4j2是最可靠的方式。

以上就是Java使用java -jar啟動并按日分包日志的最佳實踐的詳細(xì)內(nèi)容,更多關(guān)于Java java -jar按日分包日志的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot進(jìn)行參數(shù)校驗的方法詳解

    SpringBoot進(jìn)行參數(shù)校驗的方法詳解

    在日常的接口開發(fā)中,為了防止非法參數(shù)對業(yè)務(wù)造成影響,經(jīng)常需要對接口的參數(shù)進(jìn)行校驗。本文通過示例詳細(xì)講解了SpringBoot如何進(jìn)行參數(shù)校驗的,感興趣的可以學(xué)習(xí)一下
    2022-04-04
  • SpringBoot?使用?Sa-Token?完成權(quán)限認(rèn)證的操作方法

    SpringBoot?使用?Sa-Token?完成權(quán)限認(rèn)證的操作方法

    Sa-Token是一款輕量級Java權(quán)限認(rèn)證框架,適用于快速搭建權(quán)限系統(tǒng),它提供了豐富的功能,下面給大家介紹SpringBoot?使用?Sa-Token?完成權(quán)限認(rèn)證的相關(guān)操作,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • Java中實現(xiàn)用戶之間的通訊方式

    Java中實現(xiàn)用戶之間的通訊方式

    在Java中實現(xiàn)用戶間通訊主要有兩種方法:Socket編程和WebSocket,Socket編程允許兩個設(shè)備間進(jìn)行數(shù)據(jù)交換,適用于基本的網(wǎng)絡(luò)通訊,本文提供了兩種方法的基本實現(xiàn)代碼和相關(guān)配置,幫助開發(fā)者根據(jù)需求選擇合適的通訊方式
    2024-09-09
  • Java中的for循環(huán)結(jié)構(gòu)及實例

    Java中的for循環(huán)結(jié)構(gòu)及實例

    這篇文章主要介紹了Java中的for循環(huán)結(jié)構(gòu)及實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Mybatis 逆向工程的三種方法詳解

    Mybatis 逆向工程的三種方法詳解

    這篇文章主要介紹了Mybatis 逆向工程的三種方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 對Java的面對對象編程中對象和引用以及內(nèi)部類的理解

    對Java的面對對象編程中對象和引用以及內(nèi)部類的理解

    這篇文章主要介紹了對Java的面對對象編程中對象和引用以及內(nèi)部類的理解,需要的朋友可以參考下
    2016-01-01
  • 淺談線性表的原理及簡單實現(xiàn)方法

    淺談線性表的原理及簡單實現(xiàn)方法

    下面小編就為大家?guī)硪黄獪\談線性表的原理及簡單實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java?Maven?Settings配置參考教程

    Java?Maven?Settings配置參考教程

    這篇文章主要介紹了Java?Maven?Settings配置參考,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Springboot編寫CRUD時訪問對應(yīng)數(shù)據(jù)函數(shù)返回null的問題及解決方法

    Springboot編寫CRUD時訪問對應(yīng)數(shù)據(jù)函數(shù)返回null的問題及解決方法

    我在學(xué)習(xí)springboot,其中在編寫CRUD時發(fā)現(xiàn)訪問數(shù)據(jù)的函數(shù)執(zhí)行下去返回值是null但是其它部分正常,這篇文章主要介紹了Springboot在編寫CRUD時,訪問對應(yīng)數(shù)據(jù)函數(shù)返回null,需要的朋友可以參考下
    2024-02-02
  • 將Java程序包打包為.exe文件的操作步驟

    將Java程序包打包為.exe文件的操作步驟

    將Java程序打包為為.exe文件分為倆個步驟:將Java程序打包成Jar包和打包為.exe文件,文中通過圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-06-06

最新評論

故城县| 安丘市| 孝昌县| 大渡口区| 罗源县| 吉安县| 潍坊市| 阿城市| 黄平县| 洛宁县| 永丰县| 新绛县| 山丹县| 迁西县| 岳池县| 枣庄市| 布尔津县| 长兴县| 崇文区| 嘉鱼县| 石狮市| 阿克陶县| 玛沁县| 犍为县| 新绛县| 福安市| 宁明县| 东乡族自治县| 镇平县| 洛扎县| 正安县| 游戏| 翁源县| 石景山区| 寻乌县| 佛冈县| 依兰县| 余姚市| 呼伦贝尔市| 溆浦县| 汕尾市|