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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    各位,请问tomcat怎么按日期每天自动生成新的日志文件?
    44
    0

    我在catalina.bat这个文件 

    %ACTION% 后添加  >> %CATALINA_HOME%/logs/catalina.%date:~0,4%-%date:~5,2%-%date:~8,2%.out.

    第二天要重启才能生成

    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在Tomcat中,你可以使用LogbackLog4j这两个日志库来实现每天生成新的日志文件的功能。

      首先,你需要在你的项目中添加这两个库的依赖。如果你使用的是Maven,可以在你的pom.xml文件中添加以下依赖:

      xml <dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> </dependencies>

      然后,你可以创建一个Logback配置文件,比如logback.xml,并在其中定义你的日志记录规则。例如,你可以定义一个logback-access的配置文件,该配置文件可以将日志记录到access.log文件中:

      xml <configuration> <appender name="ACCESS" class="ch.qos.logback.core.FileAppender"> <file>access.log</file> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> </configuration>

      在这个配置文件中,%d{HH:mm:ss.SSS}是时间戳格式,%thread是线程ID,%logger{36}是日志级别,%-5level是日志级别,%msg%n是日志消息的格式。

      然后,你可以创建一个Log4j配置文件,比如log4j.xml,并在其中定义你的日志记录规则。例如,你可以定义一个log4j-access的配置文件,该配置文件可以将日志记录到access.log文件中:

      xml <configuration> <appender name="ACCESS" class="ch.qos.logback.core.FileAppender"> <file>access.log</file> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> </configuration>

      在这个配置文件中,%d{HH:mm:ss.SSS}是时间戳格式,%thread是线程ID,%logger{36}是日志级别,%-5level是日志级别,%msg%n是日志消息的格式。

      最后,你可以使用LogbackLog4j来创建一个LogbackAccess的类,该类继承自org.apache.logback.classic.Logger,并实现java.util.Date的构造函数和java.util.Date的equals()方法,以实现每天生成新的日志文件的功能。例如:

      ```java public class LogbackAccess extends Logger { private Date lastWriteTime;

      public LogbackAccess() {
          super();
      }
      
      @Override
      public Date date() {
          return lastWriteTime;
      }
      
      @Override
      public void date(Date date) {
          lastWriteTime = date;
      }
      
      @Override
      public boolean equals(Object obj) {
          if (this == obj) {
              return true;
          }
          if (obj == null || getClass() != obj.getClass()) {
              return false;
          }
          LogbackAccess that = (LogbackAccess) obj;
          return lastWriteTime == that.lastWriteTime;
      }
      
      @Override
      public int hashCode() {
          return Objects.hash(lastWriteTime);
      }
      

      } ```

      你可以使用这个类来创建一个LogbackAccess的实例,然后在需要的地方使用这个实例来记录日志。例如:

      java public class Main { public static void main(String[] args) { LogbackAccess access = new LogbackAccess(); access.info("This is an info message"); access.debug("This is a debug message"); access.warn("This is a warn message"); access.error("This is an error message"); access.out.println("This is an out.println message"); access.close(); } }

      在这个例子中,access.info()access.debug()access.warn()access.error()access.out.println()access.close()将被记录到access.log文件中。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部