@@ -19,32 +19,6 @@ public class YdbTracerImpl implements YdbTracer {
1919 private static final ThreadLocal <YdbTracer > LOCAL = new ThreadLocal <>();
2020 private static final AtomicLong ANONYMOUS_COUNTER = new AtomicLong (0 );
2121
22- public static final Storage ENABLED = new Storage () {
23- @ Override
24- public YdbTracer get () {
25- YdbTracer tracer = LOCAL .get ();
26- if (tracer == null ) {
27- tracer = new YdbTracerImpl ();
28- LOCAL .set (tracer );
29- }
30-
31- return tracer ;
32- }
33-
34- @ Override
35- public void clear () {
36- LOCAL .remove ();
37- }
38- };
39-
40- private final Date startDate = new Date ();
41- private final long startedAt = System .currentTimeMillis ();
42- private final List <Record > records = new ArrayList <>();
43-
44- private String txID = null ;
45- private String label = null ;
46- private boolean isMarked = false ;
47-
4822 private class Record {
4923 private final long executedAt = System .currentTimeMillis ();
5024 private final String message ;
@@ -56,70 +30,119 @@ private class Record {
5630 }
5731 }
5832
33+ private class Tx {
34+ private final Date startDate = new Date ();
35+ private final long startedAt = System .currentTimeMillis ();
36+ private final List <Record > records = new ArrayList <>();
37+
38+ private String id = null ;
39+ private String label = null ;
40+ private boolean isMarked = false ;
41+
42+ private void log (Level level ) {
43+ if (!LOGGER .isLoggable (level ) || records .isEmpty ()) {
44+ return ;
45+ }
46+
47+ long finishedAt = System .currentTimeMillis ();
48+ long requestsTime = 0 ;
49+
50+ String idName = id != null ? id : "anonymous-" + ANONYMOUS_COUNTER .incrementAndGet ();
51+ String traceID = label == null ? idName : label + "-" + idName ;
52+ LOGGER .log (level , "Trace[{0}] started at {1}" , new Object [] {traceID , startDate });
53+ long last = startedAt ;
54+ long requestsCount = 0 ;
55+ boolean lastIsRequest = false ;
56+ for (Record record : records ) {
57+ if (record .isRequest ) {
58+ requestsCount ++;
59+ lastIsRequest = true ;
60+ if (record .message != null ) {
61+ String clean = record .message .replaceAll ("\\ s" , " " );
62+ LOGGER .log (level , "Query[{0}] {1}" , new Object [] {traceID , clean });
63+ }
64+ } else {
65+ long ms = record .executedAt - last ;
66+ if (lastIsRequest ) {
67+ requestsTime += ms ;
68+ lastIsRequest = false ;
69+ }
70+ LOGGER .log (level , "Trace[{0}] {1} ms {2}" , new Object [] {traceID , ms , record .message });
71+ last = record .executedAt ;
72+ }
73+ }
74+ LOGGER .log (level , "Trace[{0}] finished in {1} ms, {2} requests take {3} ms" , new Object [] {
75+ traceID , finishedAt - startedAt , requestsCount , requestsTime
76+ });
77+ }
78+ }
79+
80+ private Tx tx = null ;
81+
82+ public static <T extends YdbTracer > T use (T tracer ) {
83+ LOCAL .set (tracer );
84+ return tracer ;
85+ }
86+
87+ public static YdbTracer get () {
88+ YdbTracer tracer = LOCAL .get ();
89+ if (tracer == null ) {
90+ tracer = new YdbTracerImpl ();
91+ LOCAL .set (tracer );
92+ }
93+
94+ return tracer ;
95+ }
96+
97+ public static void clear () {
98+ YdbTracer tracer = LOCAL .get ();
99+ if (tracer != null ) {
100+ tracer .close ();
101+ }
102+ LOCAL .remove ();
103+ }
104+
105+ private Tx ensureOpen () {
106+ if (tx == null ) {
107+ tx = new Tx ();
108+ }
109+ return tx ;
110+ }
111+
59112 @ Override
60113 public void trace (String message ) {
61- records .add (new Record (message , false ));
114+ ensureOpen (). records .add (new Record (message , false ));
62115 }
63116
64117 @ Override
65118 public void query (String queryText ) {
66- records .add (new Record (queryText , true ));
119+ ensureOpen (). records .add (new Record (queryText , true ));
67120 }
68121
69122 @ Override
70123 public void setId (String id ) {
71- if (!Objects .equals (id , txID )) {
72- this .txID = id ;
124+ Tx local = ensureOpen ();
125+ if (!Objects .equals (id , local .id )) {
126+ local .id = id ;
73127 trace ("set-id " + id );
74128 }
75129 }
76130
77131 @ Override
78132 public void markToPrint (String label ) {
79- if (!isMarked || !Objects .equals (label , this .label )) {
80- this .isMarked = true ;
81- this .label = label ;
133+ Tx local = ensureOpen ();
134+ if (!local .isMarked || !Objects .equals (label , local .label )) {
135+ local .isMarked = true ;
136+ local .label = label ;
82137 trace ("markToPrint " + label );
83138 }
84139 }
85140
86141 @ Override
87142 public void close () {
88- LOCAL .remove ();
89-
90- final Level level = isMarked ? Level .INFO : Level .FINE ;
91- if (!LOGGER .isLoggable (level ) || records .isEmpty ()) {
92- return ;
93- }
94-
95- long finishedAt = System .currentTimeMillis ();
96- long requestsTime = 0 ;
97-
98- String id = txID != null ? txID : "anonymous-" + ANONYMOUS_COUNTER .incrementAndGet ();
99- String traceID = label == null ? id : label + "-" + id ;
100- LOGGER .log (level , "Trace[{0}] started at {1}" , new Object [] {traceID , startDate });
101- long last = startedAt ;
102- long requestsCount = 0 ;
103- boolean lastIsRequest = false ;
104- for (Record record : records ) {
105- if (record .isRequest ) {
106- requestsCount ++;
107- lastIsRequest = true ;
108- if (record .message != null ) {
109- LOGGER .log (level , "Query[{0}] {1}" , new Object [] {traceID , record .message .replaceAll ("\\ s" , " " )});
110- }
111- } else {
112- long ms = record .executedAt - last ;
113- if (lastIsRequest ) {
114- requestsTime += ms ;
115- lastIsRequest = false ;
116- }
117- LOGGER .log (level , "Trace[{0}] {1} ms {2}" , new Object [] {traceID , ms , record .message });
118- last = record .executedAt ;
119- }
143+ if (tx != null ) {
144+ tx .log (tx .isMarked ? Level .INFO : Level .FINE );
145+ tx = null ;
120146 }
121- LOGGER .log (level , "Trace[{0}] finished in {1} ms, {2} requests take {3} ms" , new Object [] {
122- traceID , finishedAt - startedAt , requestsCount , requestsTime
123- });
124147 }
125148}
0 commit comments