Java-log4j实现每个线程输出到一个文件中如何设置

发布于 2016-10-28 23:25:44 字数 95 浏览 1157 评论 2

写了一个多线程爬虫程序,先把每个线程日志分别指定到一个输出文件,如何实现,貌似log4j.properties文件是针对全局的设置。有没有办法设置每个线程类的logger输出。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜无邪 2017-10-22 18:51:20

每个线程持有独自的log对象,使用ThreadLocal做线程封闭。log对象的生成可以用代码动态实现。

甜柠檬 2017-03-11 15:39:51

可以选择动态的获得logger对象,并设置logger的appender,而不是直接从配置文件中获取。

public class LoggerUtils {
public static Logger getLogger(String path) {
// 生成新的Logger
// 如果已經有了一個Logger實例返回現有的
Logger logger = Logger.getLogger(LoggerUtils.class.getName());
// 清空Appender。特別是不想使用現存實例時一定要初期化
logger.removeAllAppenders();
// 設定Logger級別。
logger.setLevel(Level.INFO);
// 設定是否繼承父Logger。
// 默認為true。繼承root輸出。
// 設定false後將不輸出root。
logger.setAdditivity(true);
// 生成新的Appender
FileAppender appender = new FileAppender();
PatternLayout layout = new PatternLayout();
// log的输出形式
String conversionPattern = "[%d{yyyy-MM-dd HH:mm:ss}] %p [%t] %m%n";
layout.setConversionPattern(conversionPattern);
appender.setLayout(layout);
// log输出路径
// 这里使用了环境变量[catalina.home],只有在tomcat环境下才可以取到
appender.setFile(path + File.separator+ "log.log");
// log的文字码
appender.setEncoding("UTF-8");
// true:在已存在log文件后面追加 false:新log覆盖以前的log
appender.setAppend(true);
// 适用当前配置
appender.activateOptions();
// 将新的Appender加到Logger中
logger.addAppender(appender);
return logger;
}
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文