簡體   English   中英

靜音斯坦福 coreNLP 日志記錄

[英]Mute Stanford coreNLP logging

首先,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);

希望能幫助到你。

按照克里斯托弗曼寧的建議,我按照這個鏈接如何配置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

陪伴類是

public class BlankOutputStream extends OutputStream {

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

}

Om 的回答禁用了所有日志記錄。 但是,如果您仍希望記錄錯誤,請使用:

RedwoodConfiguration.errorLevel().apply();

我還使用 jdk 日志記錄而不是 slf4j 日志記錄來避免加載 slfj 依賴項,如下所示:

RedwoodConfiguration.javaUtilLogging().apply();

這兩個選項可以以任何順序一起使用。 所需的導入是:

import edu.stanford.nlp.util.logging.RedwoodConfiguration;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM