log4jはどのようにして行番号を取得しますか?



How Does Log4j Get Line Number



log4jが行番号を取得する方法

log4j_1.2.15を使用して、そのソースコードで分析しています。

examplesディレクトリのMyPatternLayout.javaを変更します


//Layout layout = new MyPatternLayout('[counter=%.10#] - %m%n')
Layout layout = new MyPatternLayout('[counter=%.10#]%L - %m%n')

行番号を出力させます。


org / apache / log4j / spi /LocationInfo.javaを変更します

2つの出力を追加します。

this.fullInfo = s.substring(ibegin, iend)//150 lines or so
System.out.println('151 s:' + s)
System.out.println('152 fullInfo:' + fullInfo)


実行の結果を分析すると、例外が発生してから行番号が取得されることは明らかです。

LocationInfo.javaには、主に次のメソッドがあります。
getClassName
getFileName
getLineNumber
getMethodName

行番号に加えて、他のいくつかの属性の取得も例外を通じて取得する必要があります。これは非常に多くのリソースを消費します。

[b] [color = red]
結論:log4jの出力行番号といくつかの補助情報を取得するには、多くのリソースが必要です。必ず注意して使用してください。
[/ color] [/ b]

添付
演算結果:



151 s:java.lang.Throwable
at org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:247)
at org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65)
at org.apache.log4j.PatternLayout.format(PatternLayout.java:502)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:302)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:160)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:208)
at org.apache.log4j.Category.forcedLog(Category.java:396)
at org.apache.log4j.Category.debug(Category.java:263)
at examples.MyPatternLayout.main(MyPatternLayout.java:59)

152 fullInfo:examples.MyPatternLayout.main(MyPatternLayout.java:59)
[counter=1]59 - Hello, log
151 s:java.lang.Throwable
at org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:247)
at org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65)
at org.apache.log4j.PatternLayout.format(PatternLayout.java:502)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:302)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:160)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:208)
at org.apache.log4j.Category.forcedLog(Category.java:396)
at org.apache.log4j.Category.info(Category.java:637)
at examples.MyPatternLayout.main(MyPatternLayout.java:60)

152 fullInfo:examples.MyPatternLayout.main(MyPatternLayout.java:60)
[counter=2]60 - Hello again...