Log4j - 每个线程的文件日志
Log4j - file log for each thread
我有一个程序,一旦启动,它将多次执行一个流程(很少 类 涉及)- 每次都在不同的线程中。流程相同 - 只是每次调用时向其发送不同的参数。
每个流将在自己的线程上执行。
我希望能够为每个线程定义一个文件附加程序(本质上是文件日志)- 因此一旦流程开始,它就会以编程方式创建自己的日志文件并写入其中。
已搜索但找不到简单的解决方案
你能帮忙吗?
Ta
在 log4j 文件中为每个日志文件定义处理程序,例如,这样:
现在在同一个 xml 文件中添加如下内容:
<logger category="a.b.c.d">
<level name="INFO"/>
<handlers>
<handler name="a.b.c.d_FILE"/>
</handlers>
也许其中一种解决方案符合您的要求
- How do I setup log4j properties so that each thread outputs to its own log file?
- How to log multiple threads in different log files?
- Log4j: One log file per request
http://whosebug.com 上还有其他一些 ;-)
你可以自己实现:
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');
}
您可以通过编程方式执行此操作。例如:
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();
}
我有一个程序,一旦启动,它将多次执行一个流程(很少 类 涉及)- 每次都在不同的线程中。流程相同 - 只是每次调用时向其发送不同的参数。
每个流将在自己的线程上执行。
我希望能够为每个线程定义一个文件附加程序(本质上是文件日志)- 因此一旦流程开始,它就会以编程方式创建自己的日志文件并写入其中。
已搜索但找不到简单的解决方案 你能帮忙吗?
Ta
在 log4j 文件中为每个日志文件定义处理程序,例如,这样:
现在在同一个 xml 文件中添加如下内容:
<logger category="a.b.c.d"> <level name="INFO"/> <handlers> <handler name="a.b.c.d_FILE"/> </handlers>
也许其中一种解决方案符合您的要求
- How do I setup log4j properties so that each thread outputs to its own log file?
- How to log multiple threads in different log files?
- Log4j: One log file per request
http://whosebug.com 上还有其他一些 ;-)
你可以自己实现:
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');
}
您可以通过编程方式执行此操作。例如:
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();
}