View Javadoc

1   /*-
2    * #%L
3    * prolobjectlink-jpi-jpl7
4    * %%
5    * Copyright (C) 2012 - 2019 Prolobjectlink Project
6    * %%
7    * Redistribution and use in source and binary forms, with or without
8    * modification, are permitted provided that the following conditions are met:
9    * 
10   * 1. Redistributions of source code must retain the above copyright notice,
11   *    this list of conditions and the following disclaimer.
12   * 2. Redistributions in binary form must reproduce the above copyright notice,
13   *    this list of conditions and the following disclaimer in the documentation
14   *    and/or other materials provided with the distribution.
15   * 
16   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26   * POSSIBILITY OF SUCH DAMAGE.
27   * #L%
28   */
29  package io.github.prolobjectlink.prolog.jpl7;
30  
31  import java.text.SimpleDateFormat;
32  import java.util.Date;
33  import java.util.logging.Formatter;
34  import java.util.logging.Level;
35  import java.util.logging.LogRecord;
36  
37  import io.github.prolobjectlink.prolog.PrologFormatter;
38  
39  /**
40   * 
41   * @author Jose Zalacain
42   * @since 1.0
43   */
44  final class JplFormatter extends Formatter implements PrologFormatter {
45  
46  	private static final String ERROR = "ERROR";
47  	private static final String WARN = "WARN";
48  	private static final String INFO = "INFO";
49  	private static final String DEBUG = "DEBUG";
50  	private static final String TRACE = "TRACE";
51  
52  	@Override
53  	public String format(LogRecord record) {
54  		StringBuilder buffer = new StringBuilder();
55  
56  		// retrieve record data
57  		String levelString = "";
58  		Level level = record.getLevel();
59  		if (level.intValue() == Level.SEVERE.intValue()) {
60  			levelString = ERROR;
61  		} else if (level.intValue() == Level.WARNING.intValue()) {
62  			levelString = WARN;
63  		} else if (level.intValue() == Level.INFO.intValue()) {
64  			levelString = INFO;
65  		} else if (level.intValue() == Level.CONFIG.intValue()) {
66  			levelString = DEBUG;
67  		} else if (level.intValue() == Level.FINE.intValue()) {
68  			levelString = DEBUG;
69  		} else if (level.intValue() == Level.FINER.intValue()) {
70  			levelString = DEBUG;
71  		} else if (level.intValue() == Level.FINEST.intValue()) {
72  			levelString = TRACE;
73  		}
74  
75  		long millisecs = record.getMillis();
76  		String name = record.getLoggerName();
77  		String message = record.getMessage();
78  		Throwable throwable = record.getThrown();
79  		SimpleDateFormat f = new SimpleDateFormat("MMM-dd-yyyy HH:mm");
80  		Date resultdate = new Date(millisecs);
81  		String date = f.format(resultdate);
82  
83  		// create log line
84  		buffer.append('[');
85  		buffer.append(name);
86  		buffer.append(']');
87  		buffer.append(' ');
88  		buffer.append(levelString);
89  		buffer.append(' ');
90  		buffer.append(date);
91  		buffer.append(' ');
92  		buffer.append(message);
93  		if (throwable != null) {
94  			buffer.append('\n');
95  			buffer.append(throwable);
96  			buffer.append('\n');
97  			StackTraceElement[] s = throwable.getStackTrace();
98  			for (StackTraceElement stackTraceElement : s) {
99  				buffer.append(stackTraceElement);
100 				buffer.append('\n');
101 			}
102 		}
103 		buffer.append('\n');
104 		return "" + buffer + "";
105 	}
106 
107 }