我有这个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
答案 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\\
希望这会有所帮助:)