静音Stanford coreNLP日志记录

首先,Java不是我常用的语言,所以我对它非常基础。 我需要将它用于这个特定项目,所以请耐心等待,如果我遗漏了任何相关信息,请提出要求,我很乐意提供。

我已经能够实现coreNLP,并且,似乎已经正常工作,但是产生了许多消息,如:

ene 20, 2017 10:38:42 AM edu.stanford.nlp.process.PTBLexer next ADVERTENCIA: Untokenizable: 【 (U+3010, decimal: 12304) 

经过一些研究(文档,谷歌,其他线程),我认为 (对不起,我不知道我怎么能确定)coreNLP正在我的类路径中找到slf4j-api.jar并记录它。

我可以使用哪些JVM属性来设置将要打印的消息的日志记录级别?

另外,我可以在哪个.properties文件中设置它们? (我已经在项目的资源文件夹中有一个commons-logging.properties ,一个simplelog.properties和一个StanfordCoreNLP.properties来设置其他包的属性)。

Om的答案很好,但另外两种可能有用的方法:

  • 如果只是来自令牌器的这些警告令你烦恼,你可以(在代码中或在StanfordCoreNLP.properties中)设置一个属性,使它们消失: props.setProperty("tokenize.options", "untokenizable=NoneKeep");
  • 如果slf4j在类路径上,那么,默认情况下,我们自己的Redwoods记录器确实会记录slf4j。 因此,您还可以使用slf4j设置日志记录级别。

如果我了解您的问题,您希望在程序执行时禁用所有StanfordNLP日志消息。

您可以禁用日志消息。 Redwood日志框架用作斯坦福NLP的日志框架。 首先,清除Redwood的默认配置(显示日志消息),然后创建StanfordNLP管道。

 import edu.stanford.nlp.util.logging.RedwoodConfiguration; RedwoodConfiguration.current().clear().apply(); StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 

希望能帮助到你。

按照Christopher Manning的建议,我按照这个链接如何配置slf4j-simple

我使用行org.slf4j.simpleLogger.defaultLogLevel=warn创建了一个文件src/simplelogger.properties

我可以通过将空白输出流设置为系统错误流来解决它。

 System.setErr(new PrintStream(new BlankOutputStream())); // set blank error stream // ... Add annotators ... System.setErr(System.err); // Reset to default 

陪同class是

 public class BlankOutputStream extends OutputStream { @Override public void write(int b) throws IOException { // Do nothing } }