Linux中后台运行Java程序,并按天输出日志

    我们写好的Java程序(非web项目),直接在服务器中敲入命令 java -jar app_name.jar就可以运行,如果想让程序一直在服务器中运行,则需要nohup命令。如下:

        nohup java -jar app_name.jar

    如果需要将程序输出的日志放在指定的文件中,使用“>>”来指向文件,命令如下:

        nohup java -jar app_name.jar >> /home/log/app_name.log 2>&1 

    如上app_name.log文件存储了程序的输出信息,当程序运行了较长时间,日志文件也就会变得越来越大,所以我们需要按天来存储日志,每天生成一个日志文件;如下命令可以实现:

        nohup java -jar app_name.jar >> /home/log/app_name-$(date +%Y-%m-%d).log 2>&1

Linux 环境下,Java 程序实现按生成日志的方式主要依赖于日志框架的配置以及系统工具的支持。以下是几种可行的实现方法: ### 1. 使用 `logback` 或 `log4j2` 配置按滚动日志 Spring Boot 应用默认使用 `logback` 作为日志框架,可以通过配置文件定义日志文件的滚动策略。以下是一个基于 `logback-spring.xml` 的配置示例,实现每天生成一个新的日志文件: ```xml <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/home/pro/application/monitor/zop-monitor-web.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 按滚动 --> <fileNamePattern>/home/pro/application/monitor/logs/zop-monitor-web.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 保留最近7日志 --> <maxHistory>7</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration> ``` 此配置中,`TimeBasedRollingPolicy` 实现了按滚动日志的功能,通过 `maxHistory` 控制保留的日志数。 ### 2. 使用 `cronolog` 工具进行日志分隔 如果程序本身不支持按滚动日志,可以借助外部工具 `cronolog` 来实现。`cronolog` 是一个可以根据时间格式将日志写入不同文件的工具。 首先安装 `cronolog`: ```bash sudo apt-get install cronolog # Debian/Ubuntu # 或者 sudo yum install cronolog # CentOS/RHEL ``` 然后修改启动命令,将标准输出重定向到 `cronolog`,如下所示: ```bash nohup java -jar /home/pro/application/monitor/zop-monitor-web.jar | cronolog /home/pro/application/monitor/logs/zop-monitor-web.%Y-%m-%d.log & ``` 该方式会将 Java 程序的标准输出分割为不同的日志文件。 ### 3. 后台启动输出日志 对于后台启动 Java 程序输出日志的需求,可使用 `nohup` 命令结合重定向操作符来实现: ```bash nohup java -jar /home/pro/application/monitor/zop-monitor-web.jar > /home/pro/application/monitor/logs/zop-monitor-web.log 2>&1 & ``` 此命令将程序的标准输出和错误输出都重定向到指定的日志文件中,后台运行模式启动。 ### 4. 自动清理过期日志 为了防止日志文件占用过多磁盘空间,建议设置自动清理机制。可以通过编写 Shell 脚本配合 `crontab` 定时任务定期删除旧日志文件。 例如,创建脚本 `delete-old-logs.sh`: ```bash #!/bin/bash LOG_DIR="/home/pro/application/monitor/logs" RETENTION_DAYS=7 find "$LOG_DIR" -type f -name "*.log" -mtime +"$RETENTION_DAYS" -exec rm -f {} \; ``` 赋予执行权限: ```bash chmod +x delete-old-logs.sh ``` 然后将其加入 `crontab`,每天凌晨执行一次: ```bash 0 0 * * * /path/to/delete-old-logs.sh ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值