解决logback无法生成第二天日志的问题

本文介绍如何配置Logback,确保每天自动创建新的日志文件,以实现按日期进行日志管理。内容涉及Logback的日志滚动策略和日期格式设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天都生成日志,按日期。

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/日志/1日志" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %green([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>30</MaxHistory>
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 过滤器,只记录ERROR级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.errorlog</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <MaxFileSize>100MB</MaxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE1"/>
    </root>

</configuration>

 

虽然这个问题偏向Linux系统操作层面而非直接与Java相关,但我可以为你介绍一些常用的查看日志的命令,在开发环境中(尤其是基于Linux的服务端Java应用)这也是非常有用的技能。 在Linux中查看日志文件最常使用的命令包括`cat`,`less`, `more`, `tail`以及带有颜色高亮显示效果的`ccze`等工具,并且结合使用`grep`进行过滤查找也是非常常见的需求。 1. **Cat**:这个命令会将整个文本内容一次性全部输出到屏幕上。 ```bash cat /path/to/logfile.log ``` 然而对于大文件而言不建议用此方法因为可能会导致屏幕被大量信息刷满难以阅读并且无法滚动回溯。 2. **Less/More**:这两个工具都可以分页地展示文档内容但相比之下`less`功能更加强大支持向前及向后翻阅而`more`只可向下读取不能返回上一行或页面。 - 使用`q`退出浏览; - 可以上下左右键、空格键翻页; - `/pattern`搜索匹配的内容。 例如利用`less`打开日志并查询包含特定关键词的日志行: ```bash less +F logfile.log # 实时跟踪最新添加的日志条目直到按下Ctrl+C停止监听模式然后可以通过其他快捷键如?keyword来进行历史记录中的反向搜索 # 或者先启动less再按shift+F进入类似尾部追踪的状态 less logfile.log ``` 3. **Tail**:通常用来打印出指定文件的最后一部分数据,默认情况下为最后一屏的信息。加上参数-f可以让其持续监控新增加的数据。 例如一直关注某个正在写入的日志的变化情况: ```bash tail -f catalina.out # 对于Tomcat服务器来说catalina.out就是很典型的应用程序运行期标准输出流重定向后的目标之一 ``` 4. 如果安装了`ccze`(需自行确认环境是否具备),那么它能给普通纯文本形式的日志增添色彩标记从而更容易识别不同类型的事件。 ```bash tail -f access_log | ccze -A ``` 5. 结合Grep对海量日志做初步筛选是非常实用的做法比如找出所有含有错误(ERROR)级别的消息或是某一天内发生的活动。 ```bash grep 'ERROR' application.log # 获取所有的error级别日志 # 加上时间戳过滤条件 grep $(date +"%Y-%m-%d") myapp-debugging-info.txt # 这样就能拿到今天生成的相关联调试详情片段啦! # 当然也可以两者一起用同时限定日期范围和关键字 grep "WARN" catalina.out | grep "$(date --date="yesterday" +%Y-%m-%d)" ``` 6. 此外还有专门用于处理syslog格式(大多数守护进程默认采用该结构化布局存储自身运作状态报告)的专业软件像Logwatch,Swatch等等这里就不展开介绍了。 7. 对于Java应用程序开发者特别要注意的是如果是在生产环境下部署Web容器(Jetty,Tomcat...)或者框架(Spring Boot..),这些平台往往会自带私有的日志管理体系(SLF4J+Logback...,java.util.logging...).所以应当熟悉查阅对应官方手册了解具体配置项含义以便准确高效定位故障点。 8. 最近还流行起一种集中式管理分布式架构下的各类异构来源产生的非结构化半结构性元数据的方法——ELK(Elasticsearch Logstash Kibana)/EFK(Elastisearch Fluent-bit Kibana)...借助这类解决方案我们可以跨越多个主机甚至云端实例收集整理分析庞大的二进制流转换之后的文字描述进而绘制可视化图表辅助决策制定优化业务逻辑提高运维效率降低成本支出... 综上所述掌握基本shell脚本指令只是第一步更重要是要学会根据实际场景选择合适的技术手段灵活组合运用才能真正发挥最大价值!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值