我有一个跟踪多个学生的应用程序。在处理该学生的信息时,我希望他们的日志消息进入该日志文件。
logs/system.log
logs/abby.log
logs/brett.log
logs/catherine.log
系统可以动态添加更多学生,因此我无法在日志配置文件中指定每个学生。我怎样才能在运行时指定记录器应该将信息写入catherine.log?
答案 0 :(得分:0)
您使用的是哪种日志框架?如果您使用Log4j,这是一个示例:
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;
public class MyTestClass {
/* Logger Instance should always be kept static final */
private static final Logger LOGGER = Logger.getLogger(MyTestClass.class);
public static void main(String args[]) {
/* Create Dynamic FileAppender */
SimpleLayout myLayout = new SimpleLayout();
FileAppender nwAppender = new FileAppender(myLayout,"file_nm",false);
LOGGER.addAppender(nwAppender);
LOGGER.setLevel((Level) Level.INFO);
/* Write Level : Debug */
LOGGER.debug("*** DEBUG ***");
/* Write Level : Info */
LOGGER.info("*** INFO ***");
/* Write Level : Error */
LOGGER.info("*** ERROR ***");
}
}
答案 1 :(得分:0)
我怎样才能在运行时指定记录器应该将信息写入catherine.log?
没有logging.properties选项可启用此行为。您必须编写代码来创建记录器(强烈引用)并在该记录器上安装FileHandler。
abby.log的消息同时写入系统日志和abby.log。
您应该创建一个记录器名称空间,以便在根记录器上安装系统文件处理程序,并且每个学生都是setUseParentHandlers设置为false的子记录器。
如果多个线程正在处理abby,它将打开abby-1,abby-2
这是因为您创建了多个具有相同文件名的FileHandler。创建一个地图并记住你打开的内容。