[英]How to write caller location information in a log file using Java, without hurting performance?
如何使用Java和log4j在日志文件中編寫調用者位置信息(Java源文件和行),但不會影響性能? log4j允許您在日志文件中寫入此類信息,但它使用堆棧跟蹤來獲取該信息,每次發出日志語句時,都會導致性能下降。 我正在尋找一個性能友好的替代方案,比如在編譯時獲取位置信息而不是在運行時。 可以使用注釋來實現這一目標嗎? 或者其他一些技巧?
如何讓它成為構建過程的一部分來替換某些占位符,例如此片段中的$filename$
和$linenumber$
。
logger.info("The original message... $filename$ $linenumber$");
要替換文件名,可以使用修訂控制系統替換關鍵字。 免責聲明:這只是我的頭腦,我從未嘗試過。
我同意Rob的意見,認為這通常是不必要的。 通常在日志消息中有一些不同的字符串,搜索它會到達源。 有了一個好的IDE,這真的很快。
現在,考慮到問題,這是一個可能的解決方案:
Class Foo
void bar()
new Logger(){} . warn("blah");
對於運行時的每個日志操作,都會創建一個新對象 - 這不是問題。
對於包含此類日志語句的每行源,將創建一個新類。 這可能太多了。
魔法是如何運作的:
abstract public class Logger
static Map<Class, String> sourceInfo = new ...
public Logger()
Class thisClass = this.getClass();
String info = sourceInfo.get(thisClass);
if(info==null)
info = ... // init from stack trace
sourceInfo.put(thisClass,info)
this.info = info
public void warn(msg)
log(WARN, this.info,msg)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.