以编程方式配置RollingFileAppender无法使用我的spring启动应用程序中的logback将日志写入特定文件夹

时间:2016-12-28 06:46:06

标签: spring spring-boot logback

我有这个Loggerutils类,它返回记录器对象。

public class Loggerutils {

 public static Logger createLoggerFor(String string, String file) {

      LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
      PatternLayoutEncoder ple = new PatternLayoutEncoder();
      ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
      ple.setContext(lc);
      ple.start();
      RollingFileAppender<ILoggingEvent>  rollingFileAppender = new RollingFileAppender<ILoggingEvent>();
      FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy();
      rollingPolicy.setFileNamePattern("pilogs.%i.log.zip");
      rollingPolicy.setMinIndex(1);
      rollingPolicy.setMaxIndex(3);
      rollingPolicy.setContext(lc);
      rollingFileAppender.setFile(file);
      rollingFileAppender.setEncoder(ple);
      rollingFileAppender.setContext(lc);
      rollingFileAppender.setRollingPolicy(rollingPolicy);
      rollingFileAppender.start();
      Logger logger = (Logger) LoggerFactory.getLogger(string);
      logger.addAppender(rollingFileAppender);
      logger.setLevel(Level.ALL);
      logger.setAdditive(false); /* set to true if root should log too */
      return logger;
    }
}

我使用下面的代码行来实例化记录器

Logger logger = Loggerutils.createLoggerFor("UserController", "UserControllerFile");
logger.info("Inside User controller..........");

并在我配置的application.properties中

logging.path=E:/LOGS/WebAPI

但在给定位置只创建了一个文件,即spring.log。我的要求是我希望在指定位置创建我的日志文件。 我的资源文件夹中没有logback.xml

2 个答案:

答案 0 :(得分:1)

您应该提及日志文件的完整路径,而不仅仅是文件名。试试这个

public class Loggerutils {

 public static Logger createLoggerFor(String string, String file) {

      LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
      PatternLayoutEncoder ple = new PatternLayoutEncoder();
      ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
      ple.setContext(lc);
      ple.start();
      RollingFileAppender<ILoggingEvent>  rollingFileAppender = new RollingFileAppender<ILoggingEvent>();
      FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy();
      rollingPolicy.setFileNamePattern("pilogs.%i.log.zip");
      rollingPolicy.setMinIndex(1);
      rollingPolicy.setMaxIndex(3);
      rollingPolicy.setContext(lc);
      rollingPolicy.start(); 
      rollingFileAppender.setFile("E:/LOGS/WebAPI/" + file);
      rollingFileAppender.setEncoder(ple);
      rollingFileAppender.setContext(lc);
      rollingFileAppender.setRollingPolicy(rollingPolicy);
      rollingFileAppender.start();
      Logger logger = (Logger) LoggerFactory.getLogger(string);
      logger.addAppender(rollingFileAppender);
      logger.setLevel(Level.ALL);
      logger.setAdditive(false); /* set to true if root should log too */
      return logger;
    }
}

答案 1 :(得分:0)

对createLoggerFor()方法进行了一些更改。现在它有效。

@Component
public class Loggerutils {


private static String logDirectory;

@Value("${logging.path}")
public void setLogDirectory(String path){
    logDirectory = path;
}


public static Logger createLoggerFor(String loggerName, String fileName) {
    Logger rootLogger = (Logger) LoggerFactory.getLogger(loggerName);

    LoggerContext loggerContext = rootLogger.getLoggerContext();
    loggerContext.reset();

    RollingFileAppender<ILoggingEvent> rfAppender = new RollingFileAppender<ILoggingEvent>();
    rfAppender.setContext(loggerContext);
    rfAppender.setFile(logDirectory+loggerName+"\\"+fileName);

    FixedWindowRollingPolicy fwRollingPolicy = new FixedWindowRollingPolicy();
    fwRollingPolicy.setContext(loggerContext);
    fwRollingPolicy.setFileNamePattern(logDirectory+loggerName+"\\"+"pilogs.%i.log.zip");
    fwRollingPolicy.setParent(rfAppender);
    fwRollingPolicy.start();

    SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<ILoggingEvent>();
    triggeringPolicy.setMaxFileSize("10MB");
    triggeringPolicy.start();

    PatternLayoutEncoder encoder = new PatternLayoutEncoder();
    encoder.setContext(loggerContext);
    encoder.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
    encoder.start();

    rfAppender.setEncoder(encoder);
    rfAppender.setRollingPolicy(fwRollingPolicy);
    rfAppender.setTriggeringPolicy(triggeringPolicy);
    rfAppender.start();

    rootLogger.addAppender(rfAppender);

    return rootLogger;
  }

}
我的application.properties中的

和logging.path是,

logging.path=E:\\LOGS\\WebAPI\\

希望这会有所帮助:)

相关问题