centos7自动清理nohup.out文件、*.log文件

centos7自动清理nohup.out文件、*.log文件

1、自动定时清空nohup.out文件内容(不删除该文件)

1、输入命令:crontab -e
2、写入语句:
# 每2分钟清理大于5m的nohup.out文件
*/2 * * * * find /usr/local/soft/projects -name "nohup.out" -size +5M -exec /bin/sh -c 'echo -n > {}' \;
# 每天凌晨2点执行清空大于20m的nohup.out
0 2 * * * find /usr/local/
<think>我们正在处理用户关于在CentOS7上配置SpringBoot项目按日生成日志并包含标准输出的问题。用户使用了logback作为日志框架。根据用户需求,我们需要配置logback,使其按天滚动生成日志文件,并且捕获标准输出(即控制台输出)。步骤:1.在SpringBoot项目中,默认使用logback,因此我们需要在resources目录下创建logback-spring.xml配置文件。2.配置一个控制台Appender(用于输出到控制台)和一个按天滚动的文件Appender。3.配置日志文件的按天滚动策略,并设置日志文件名的模式,包括日期。4.确保标准输出(System.out)和标准错误(System.err)也被捕获到日志文件中。注意:logback默认不会捕获System.out,除非我们配置了`<consoleAppender>`,但通常我们使用日志框架的API(如logger.info)来记录日志。然而,有些第三方库可能会直接输出到控制台,因此我们需要将控制台输出重定向到日志文件。在SpringBoot中,默认已经将控制台输出(通过logback的ConsoleAppender)同时输出到了控制台和日志文件(如果配置了文件Appender)。但是,如果我们想要将标准输出(System.out)和标准错误(System.err)也写入文件,我们可以通过配置来实现。实际上,SpringBoot在启动时会将System.out和System.err重定向到logback,但默认情况下logback的ConsoleAppender只会输出到控制台。因此,我们需要在文件Appender中捕获这些输出。我们可以通过以下方式:-配置一个RollingFileAppender,按天滚动日志文件。-配置一个ConsoleAppender,用于在控制台输出,同时我们也可以将日志输出到文件。但是,为了捕获所有输出(包括System.out和System.err),我们需要确保这些输出被重定向到logback。SpringBoot已经做了这个工作,所以我们只需要配置好文件Appender,并将rootlogger的日志输出到文件和控制台(如果需要)即可。配置示例(logback-spring.xml):```xml<?xmlversion="1.0"encoding="UTF-8"?><configuration><!--定义日志文件的存储位置--><propertyname="LOG_PATH"value="/var/log/myapp"/><propertyname="LOG_FILE"value="${LOG_PATH}/application.log"/><!--控制台输出--><appendername="CONSOLE"class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern></encoder></appender><!--按天滚动日志文件--><appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE}</file><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--每日滚动,文件格式:application-2020-01-01.log--><fileNamePattern>${LOG_PATH}/application-%d{yyyy-MM-dd}.log</fileNamePattern><!--保留30天的日志--><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern></encoder></appender><!--设置日志级别--><rootlevel="INFO"><appender-refref="CONSOLE"/><appender-refref="FILE"/></root></configuration>```注意:-日志文件将存储在`/var/log/myapp`目录下,请确保该目录存在且应用程序有写入权限。-我们配置了按天滚动,并且保留30天的日志。-同时输出到控制台和文件。但是,上述配置中,控制台输出(CONSOLEappender)会将日志输出到控制台,而文件输出(FILEappender)会输出到文件。由于rootlogger同时引用了这两个appender,所以日志会同时输出到两个地方。关于标准输出:SpringBoot在启动时会将System.out和System.err重定向到logback,所以通过System.out.println打印的内容也会被logback捕获,但是默认情况下,这些内容会被输出到控制台(通过CONSOLEappender)。如果我们希望将这些内容也写入文件,那么只需要将rootlogger配置为同时使用文件appender即可,如上配置。然而,需要注意的是,System.out.println输出的日志级别是INFO,所以会被rootlogger的INFO级别捕获,从而写入文件。另外,如果我们需要将标准输出和错误输出分开,可以单独配置,但上述配置已经将它们都包含在同一个日志文件中了。在CentOS7上部署时,我们还需要确保:1.日志目录存在:在服务器上创建日志目录,并赋予写权限。```bashmkdir-p/var/log/myappchown<user>:<group>/var/log/myapp#替换为运行SpringBoot的用户和组chmod755/var/log/myapp```2.在SpringBoot的application.properties中,我们可以通过`logging.file.name`或`logging.file.path`来指定日志文件,但是如果我们已经配置了logback-spring.xml,则logback的配置会覆盖application.properties中的配置。3.如果使用systemd服务来管理SpringBoot应用,我们也可以配置systemd的日志管理(如journald)来捕获日志,但这里我们使用logback来管理日志文件。4.如果希望将标准输出和错误输出重定向到文件,我们也可以在启动脚本中指定输出重定向,例如:```bashjava-jarmyapp.jar>>/var/log/myapp/console.log2>&1```但是这样做的话,日志文件就不会按天滚动了,而且会一直增长。因此,我们不推荐这种方式,而是使用logback的滚动功能。因此,我们推荐使用logback配置文件来管理日志。总结配置步骤:1.在SpringBoot项目的src/main/resources目录下创建logback-spring.xml文件,内容如上。2.服务器上创建日志目录并设置权限。3.启动应用,检查日志是否按天生成。相关问题:§§相关问题§§1.如何在logback中配置日志文件的最大大小?2.如何将不同级别的日志输出到不同的文件?3.CentOS7上,如何设置logback日志文件自动清理?4.如何配置logback以同时输出JSON格式的日志?</think>### Spring Boot 在 CentOS 7 上配置按天生成日志(含标准输出) 以下是使用 Logback 在 CentOS 7 上实现 Spring Boot 日志按天滚动并捕获标准输出的完整配置方案: #### 1. 添加 Logback 配置文件 在 `src/main/resources` 下创建 **logback-spring.xml**: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义日志存储目录 --> <property name="LOG_PATH" value="/var/log/myapp" /> <property name="LOG_FILE" value="${LOG_PATH}/application.log" /> <!-- 控制台输出(捕获标准输出) --> <appender name="CONSOLE" 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>${LOG_FILE}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每日滚动日志文件 --> <fileNamePattern>${LOG_PATH}/application-%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 保留30天日志 --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 捕获 System.out --> <appender name="STDOUT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/stdout.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/stdout-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <!-- 重定向 System.out 到日志 --> <logger name="STDOUT_LOGGER" additivity="false"> <appender-ref ref="STDOUT" /> </logger> <!-- 根日志配置 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> </configuration> ``` #### 2. 重定向标准输出 在 Spring Boot 主类中添加初始化方法: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import java.io.PrintStream; @SpringBootApplication public class MyApplication { // 创建专用 Logger private static final Logger stdoutLogger = LoggerFactory.getLogger("STDOUT_LOGGER"); public static void main(String[] args) { // 重定向 System.out System.setOut(new PrintStream(System.out) { @Override public void println(String x) { stdoutLogger.info(x); } }); SpringApplication.run(MyApplication.class, args); } } ``` #### 3. CentOS 7 服务器配置 ```bash # 创建日志目录并授权 sudo mkdir -p /var/log/myapp sudo chown -R $USER:$USER /var/log/myapp # 替换为实际运行用户 sudo chmod 755 /var/log/myapp # 验证目录权限 ls -ld /var/log/myapp # 期望输出: drwxr-xr-x 2 youruser yourgroup 4096 Jan 1 12:00 /var/log/myapp ``` #### 4. 应用部署命令 使用 nohup 确保后台运行: ```bash nohup java -jar your-app.jar > /dev/null 2>&1 & ``` #### 5. 验证日志生成 ```bash # 查看当天日志 ls /var/log/myapp # 应包含类似文件: # application-2023-10-01.log # stdout-2023-10-01.log # 查看实时日志 tail -f /var/log/myapp/application.log ``` ### 关键配置说明 1. **按天滚动机制** ```xml <fileNamePattern>${LOG_PATH}/application-%d{yyyy-MM-dd}.log</fileNamePattern> ``` 每天 00:00 自动创建新日志文件 2. **标准输出捕获** 通过重定向 `System.out` 到 SLF4J Logger,确保 `System.out.println()` 内容写入滚动日志 3. **日志保留策略** ```xml <maxHistory>30</maxHistory> <!-- 自动保留最近30天日志 --> ``` 4. **权限管理** CentOS 的 `/var/log` 目录需要显式授权,避免出现 `Permission denied` 错误[^1] > 提示:生产环境建议配合 `logrotate` 实现日志压缩和定期清理[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值