1 package org.slf4j.impl;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.apache.maven.shared.utils.logging.MessageUtils.level;
23 import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
24
25 import java.io.PrintStream;
26
27
28
29
30
31
32 public class MavenSimpleLogger
33 extends SimpleLogger
34 {
35 MavenSimpleLogger( String name )
36 {
37 super( name );
38 }
39
40 @Override
41 protected String renderLevel( int level )
42 {
43 switch ( level )
44 {
45 case LOG_LEVEL_TRACE:
46 return level().debug( "TRACE" ).toString();
47 case LOG_LEVEL_DEBUG:
48 return level().debug( "DEBUG" ).toString();
49 case LOG_LEVEL_INFO:
50 return level().info( "INFO" ).toString();
51 case LOG_LEVEL_WARN:
52 return level().warning( "WARNING" ).toString();
53 case LOG_LEVEL_ERROR:
54 default:
55 return level().error( "ERROR" ).toString();
56 }
57 }
58
59 @Override
60 protected void writeThrowable( Throwable t, PrintStream stream )
61 {
62 if ( t == null )
63 {
64 return;
65 }
66 stream.print( buffer().failure( t.getClass().getName() ) );
67 if ( t.getMessage() != null )
68 {
69 stream.print( ": " );
70 stream.print( buffer().failure( t.getMessage() ) );
71 }
72 stream.println();
73
74 printStackTrace( t, stream, "" );
75 }
76
77 private void printStackTrace( Throwable t, PrintStream stream, String prefix )
78 {
79 for ( StackTraceElement e : t.getStackTrace() )
80 {
81 stream.print( prefix );
82 stream.print( " " );
83 stream.print( buffer().strong( "at" ) );
84 stream.print( " " + e.getClassName() + "." + e.getMethodName() );
85 stream.print( buffer().a( " (" ).strong( getLocation( e ) ).a( ")" ) );
86 stream.println();
87 }
88 for ( Throwable se : t.getSuppressed() )
89 {
90 writeThrowable( se, stream, "Suppressed", prefix + " " );
91 }
92 Throwable cause = t.getCause();
93 if ( cause != null )
94 {
95 writeThrowable( cause, stream, "Caused by", prefix );
96 }
97 }
98
99 private void writeThrowable( Throwable t, PrintStream stream, String caption, String prefix )
100 {
101 stream.print( buffer().a( prefix ).strong( caption ).a( ": " ).a( t.getClass().getName() ) );
102 if ( t.getMessage() != null )
103 {
104 stream.print( ": " );
105 stream.print( buffer().failure( t.getMessage() ) );
106 }
107 stream.println();
108
109 printStackTrace( t, stream, prefix );
110 }
111
112 protected String getLocation( final StackTraceElement e )
113 {
114 assert e != null;
115
116 if ( e.isNativeMethod() )
117 {
118 return "Native Method";
119 }
120 else if ( e.getFileName() == null )
121 {
122 return "Unknown Source";
123 }
124 else if ( e.getLineNumber() >= 0 )
125 {
126 return String.format( "%s:%s", e.getFileName(), e.getLineNumber() );
127 }
128 else
129 {
130 return e.getFileName();
131 }
132 }
133 }