2017-09-22 33 views
0

我正在使用logback,我需要將客戶端查詢的所有數據記錄到日誌文件中。所有客戶端查詢的數據都需要記錄到同一個文件中。在記錄過程只是看起來像如下:在java中記錄一個大尺寸的字符串

private static final OUTPUTFILELOGGER = Logger.getLogger(...); 
String outputString = null; 
try { 
    Map<String, Object> outputMap = doService(); // queries data requested by clients. 
    .... // do something after business logic.. 
    outputLog = outputMap.toString(); // critical!! 
} catch (Throwable e) { 
    handling exception 
} finally { 
    OUTPUTFILELOGGER.info(outputString); 
} 

它通常工作得很好,但有時出現的OutOfMemoryError用的toString到outputMap變量呼叫時所請求的數據量太大,使一個字符串。

所以我想讓它在沒有任何問題的情況下以流的方式工作。我不知道如何有效和優雅地做到這一點。

有什麼想法?

回答

0

遍歷地圖,使你與一小部分每次只工作:

LOGGER.info("Map contains:") 
map.forEach((key, value) -> LOGGER.info("{}: {}", key, value)); 

(假設的Java 8和SLF4J)

但是如果地圖是足夠大的您爲了生成OOM而給出的代碼,您應該考慮是否適當地記錄這些細節 - 或者您的服務是否應該限制響應大小。