我有一个程序,一旦启动,它将执行一次流程(涉及的几个类)几次 - 每个在不同的线程中。流程是相同的 - 每次调用时都会向它发送不同的参数。
每个流程都将在自己的线程上执行。
我希望能够为每个线程定义文件appender(本质上是文件日志) - 所以一旦流程启动,它就会以编程方式创建自己的日志文件并写入它。
搜索它但无法找到一个简单的解决方案 你能帮忙吗?
TA
答案 0 :(得分:3)
您可以通过编程方式执行此操作。 e.g:
class Task implements Runnable {
private final String path;
private final String name;
public Task(String path, String name) {
this.path = path;
this.name = name;
}
public void run() {
// Create file appender
FileAppender appender = new FileAppender();
appender.setFile(path);
appender.setLayout(new PatternLayout("%d [%t] %-5p %c - %m%n"));
appender.activateOptions();
// Get logger and add appender
Logger logger = Logger.getLogger(name);
logger.setAdditivity(false);
logger.addAppender(appender);
// Task
logger.info("Hello World!");
// Remove appender
logger.removeAppender(appender);
}
}
public static void main(String[] args) {
new Thread(new Task("logs/A.log", "com.company.A")).start();
new Thread(new Task("logs/B.log", "com.company.B")).start();
}
答案 1 :(得分:0)
为log4j文件中的每个日志文件定义处理程序,例如,这样:
现在在同一个xml文件中添加这样的内容:
<logger category="a.b.c.d">
<level name="INFO"/>
<handlers>
<handler name="a.b.c.d_FILE"/>
</handlers>
答案 2 :(得分:0)
可能其中一种解决方案符合您的要求
http://stackoverflow.com上有其他人; - )
答案 3 :(得分:0)
您可以自己实施:
RandomAccessFile logfile;
public void initLogger(String logPath) {
File fl = new File(logPath);
long fileLength = fl.length();
logfile = new RandomAccessFile(fl, "rw");
logfile.seek(fileLength);
}
public void log(String text) throws IOException {
logfile.writeChars(text);
logfile.writeChar('\n');
}