将多个实例记录到控制台-java.util.logging.logger中



使Java Logger在控制台内回声返回单个消息。成功加载多个JSON对象后。

在我的服务器/客户端框架中,我有多个定义的JSON对象,服务器侧。因此,java.util.logging.Logger是一个有用的线人。如果或没有,则在最初的Bootstrap(加载阶段(中成功创建了JSON文件或"对象"。消息回声内置,详细介绍了这一点。完全按照记录器对象进行。

在这里,我将在代码中举一个示例,从而增强了在级别上运行的这样的记录器的需求;Level.INFO&Level.SEVERE


代码样本

此样本来自类别DefinitionLoader.java。如明显的run()方法所暗示的可运行。

public abstract void load() throws Throwable;
public abstract String file();
@Override
public void run() {
    try {
        long start = System.currentTimeMillis();
        load();
        long elapsed = System.currentTimeMillis() - start;
        Server.getLogger().log(Level.INFO, "Loaded definitions for: "+file()+". It took "+elapsed+" milliseconds.");
    } catch(Throwable e) {
        e.printStackTrace();
        Server.getLogger().log(Level.SEVERE, "Loaded definitions for: "+file(), e);
    }
}

每个单数json对象被执行为&通过load()/file()调用内存。必须记录它们。

我的&Java 8的记录功能。每个记录消息或成功加载的JSON文件的指示都是"吐出"或以更好的条款打印到控制台上。产生大量的信息,只会进一步发展任何假设问题。我很想说,

所有定义已成功加载。

一次,在控制台内,以及其他引导语言学。

最后,

仅在run()方法中放置System.out属性而不是像这样记录它有什么含义?理想情况下,伐木不会造成其他伤害,然后当您被;

轰炸时

控制台输出

INFO: Initializing the Bootstrap...
Feb 23, 2018 10:01:40 PM com.MYPACKAGE.definition.loader.DefinitionLoader run
INFO: Loaded definitions for: ./DIRECTORY/definitions/SOMEJSONFILE.json. It took 344 milliseconds.
Feb 23, 2018 10:01:40 PM com.MYPACKAGE.definition.loader.DefinitionLoader run
INFO: Loaded definitions for: ./DIRECTORY/definitions/SOMEJSONFILE.json. It took 609 milliseconds.
Feb 23, 2018 10:01:40 PM com.MYPACKAGE.definition.loader.DefinitionLoader run
INFO: Loaded definitions for: ./DIRECTORY/definitions/SOMEJSONFILE.json. It took 2 milliseconds.
Feb 23, 2018 10:01:40 PM com.MYPACKAGE.definition.loader.DefinitionLoader run
INFO: Loaded definitions for: ./DIRECTORY/definitions/SOMEJSONFILE.json. It took 32 milliseconds.
Feb 23, 2018 10:01:40 PM com.MYPACKAGE.definition.loader.DefinitionLoader run
INFO: Loaded definitions for: ./DIRECTORY/definitions/SOMEJSONFILE.json. It took 125 milliseconds.
Feb 23, 2018 10:01:40 PM com.MYPACKAGE.definition.loader.DefinitionLoader run
INFO: Loaded definitions for: ./DIRECTORY/definitions/SOMEJSONFILE.json. It took 42 milliseconds.
Feb 23, 2018 10:01:40 PM com.MYPACKAGE.definition.loader.DefinitionLoader run
INFO: Loaded definitions for: ./DIRECTORY/definitions/SOMEJSONFILE.json. It took 47 milliseconds.
Feb 23, 2018 10:01:41 PM com.MYPACKAGE.Server main
INFO: The Bootstrap has been bound, SERVER is now online!

总而言之,

我尝试通过for loop处理记录器。另外,我使用构造函数:log(Level level, String msg, Object[] params)传递了bool参数。最后,令我惊讶的是,在网络上寻求解决我的情况时的答案。我能找到的任何和唯一的线索,都没有提供与登录垃圾邮件有关的。只想说,谢谢陌生人(S(愿意提供帮助!

可能的解决方案可能是倒数闩锁。这基本上意味着每个线程都有一种机制,以表明其已经完成了工作,并且调用线程可以等待所有线程完成。

这是Java实现的示例

 class Driver2 {
   void main() throws InterruptedException {
     CountDownLatch doneSignal = new CountDownLatch(N);
     Executor e = ...
     for (int i = 0; i < N; ++i) // create and start threads
       e.execute(new WorkerRunnable(doneSignal, i));
     doneSignal.await();           // wait for all to finish
   }
 }
 class WorkerRunnable implements Runnable {
   private final CountDownLatch doneSignal;
   WorkerRunnable(CountDownLatch doneSignal) {
      this.doneSignal = doneSignal;
   }
   public void run() {
      try {
        doWork();
        doneSignal.countDown();
      } catch (InterruptedException ex) {} // return;
   }
 }

await完成后,您可以添加日志消息,还可以检查每个线程是否成功完成(通过让它们在某个地方写入结果或直接检查公共财产(。

最新更新