账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    使用 logback 记录日志, 想把定时器产生的日志生成单独的文件中
    54
    0

    由于定时器频繁产生日志, 干扰其他业务的日志, 我想把定时器产生的相关日志都记录到一个单独的日志中.

    查看了网上的一些方式, 都是提到某个包或某个类单独采用一种 appender , 比如

    <configuration scan="true">
        <springProperty scope="context" name="logName" source="spring.application.name" defaultValue="localhost.log"/>
    
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>logs/${logName}.log</file>
            <append>true</append>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>logs/${logName}-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
                <maxFileSize>100MB</maxFileSize>
                <maxHistory>7</maxHistory>
                <totalSizeCap>3GB</totalSizeCap>
            </rollingPolicy>
            <encoder>
                <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] &#45;&#45;%mdc{client} %msg%n</pattern>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>DEBUG</level>
            </filter>
        </appender>
    
        <logger name="com.test.ScheduleTask" level="${logging.level}" additivity="false">
            <appender-ref ref="FILE" />
        </logger>
        
        .... 省略其他配置
    </configuration>

    上面这样虽然 ScheduleTask 类中的日志单独输出了, 但是 ScheduleTask 类中如果调用了其他类的方法, 那么其他类中的日志还是会打印到原日志文件中.

    请问有没有办法把 ScheduleTask 类以及该类调用的相关类的日志都统一输出到一个单独的日志文件中

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 流年划过岁月 普通会员 1楼

      在Logback中,你可以使用rolling配置来指定日志文件的滚动方式。滚动模式用于在不重新写入原始日志文件的情况下,定期地从原始日志文件中提取日志条目。

      要将定时器产生的日志生成单独的文件中,你需要将定时器的输出设置为System.out.println("Hello, World!");。然后,你可以使用Logback的PatternLayout来配置日志输出的格式。

      以下是一个示例,说明如何在Logback中实现这个功能:

      ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFutureTask; import org.springframework.util.concurrent.ThreadPoolTaskExecutor;

      @Component public class LogbackExample {

      @Autowired
      private ThreadPoolTaskExecutor executor;
      
      @Autowired
      private System.out.println("Hello, World!");
      
      @Override
      protected void configure() throws Exception {
          // 设置滚动模式
         rollingPattern("yyyy-MM-dd HH:mm:ss.SSS");
          // 设置日志文件的位置
          file("log.log");
          // 设置日志文件的大小
          size(10000);
          // 设置日志的级别
          level("debug");
          // 设置日志格式
          format("%d{HH:mm:ss.SSS} %-5level %c{1}:%L - %m%n");
      }
      
      public static void main(String[] args) {
          new LogbackExample().configure();
      }
      

      } ```

      在这个示例中,我们首先设置了滚动模式为yyyy-MM-dd HH:mm:ss.SSS,这表示每天的凌晨1点到午夜1点生成日志。然后,我们设置了日志文件的位置为log.log,并且设置了一个大小为10000的文件。接着,我们设置了日志的级别为debug,这意味着我们的日志级别将会被记录在debug级别。最后,我们设置了日志的格式为%d{HH:mm:ss.SSS} %-5level %c{1}:%L - %m%n,这意味着我们的日志将使用%d{HH:mm:ss.SSS}%5level%c{1}:%L%m%n这四个字段来记录日志条目。

      当定时器触发时,它将打印出Hello, World!,然后将日志条目写入log.log文件中。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部