|
18 | 18 | */
|
19 | 19 |
|
20 | 20 | /*
|
21 |
| - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. |
| 21 | + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. |
22 | 22 | */
|
23 | 23 | package org.opengrok.indexer.logger;
|
24 | 24 |
|
25 |
| -import org.opengrok.indexer.logger.formatter.ConsoleFormatter; |
26 |
| -import org.opengrok.indexer.logger.formatter.FileLogFormatter; |
27 |
| - |
28 |
| -import java.io.File; |
29 |
| -import java.io.IOException; |
30 |
| -import java.lang.reflect.InvocationTargetException; |
| 25 | +import java.util.Arrays; |
31 | 26 | import java.util.logging.ConsoleHandler;
|
32 |
| -import java.util.logging.FileHandler; |
33 |
| -import java.util.logging.Formatter; |
34 |
| -import java.util.logging.Handler; |
35 | 27 | import java.util.logging.Level;
|
36 | 28 | import java.util.logging.LogManager;
|
37 | 29 | import java.util.logging.Logger;
|
|
41 | 33 | */
|
42 | 34 | public class LoggerUtil {
|
43 | 35 |
|
44 |
| - private static final Logger LOGGER = LoggerFactory.getLogger(LoggerUtil.class); |
45 |
| - |
46 | 36 | public static final String BASE_LOGGER = "org.opengrok";
|
47 |
| - private static final int DEFAULT_FILEHANDLER_LIMIT = 52428800; |
48 |
| - private static final int DEFAULT_FILEHANDLER_COUNT = 3; |
49 |
| - |
50 |
| - private static volatile String loggerFile = null; |
51 | 37 |
|
52 | 38 | private LoggerUtil() {
|
53 | 39 | }
|
54 | 40 |
|
55 |
| - public static Logger getBaseLogger() { |
| 41 | + private static Logger getBaseLogger() { |
56 | 42 | return Logger.getLogger(BASE_LOGGER);
|
57 | 43 | }
|
58 | 44 |
|
59 | 45 | public static void setBaseConsoleLogLevel(Level level) {
|
60 |
| - setBaseLogLevel(ConsoleHandler.class, level); |
61 |
| - } |
62 |
| - |
63 |
| - public static Level getBaseConsoleLogLevel() { |
64 |
| - return getBaseLogLevel(ConsoleHandler.class); |
65 |
| - } |
66 |
| - |
67 |
| - public static void setBaseFileLogLevel(Level level) { |
68 |
| - setBaseLogLevel(FileHandler.class, level); |
69 |
| - } |
70 |
| - |
71 |
| - public static Level getBaseFileLogLevel() { |
72 |
| - return getBaseLogLevel(FileHandler.class); |
73 |
| - } |
74 |
| - |
75 |
| - private static void setBaseLogLevel(Class<? extends Handler> handlerClass, Level level) { |
76 |
| - for (Handler handler : getBaseLogger().getHandlers()) { |
77 |
| - if (handlerClass.isInstance(handler)) { |
78 |
| - handler.setLevel(level); |
79 |
| - } |
80 |
| - } |
81 |
| - } |
82 |
| - |
83 |
| - private static Level getBaseLogLevel(Class<? extends Handler> handlerClass) { |
84 |
| - for (Handler handler : getBaseLogger().getHandlers()) { |
85 |
| - if (handlerClass.isInstance(handler)) { |
86 |
| - return handler.getLevel(); |
87 |
| - } |
88 |
| - } |
89 |
| - return Level.OFF; |
| 46 | + Arrays.stream(getBaseLogger().getHandlers()) |
| 47 | + .filter(ConsoleHandler.class::isInstance) |
| 48 | + .forEach(handler -> handler.setLevel(level)); |
90 | 49 | }
|
91 | 50 |
|
92 | 51 | public static String getFileHandlerPattern() {
|
93 | 52 | return LogManager.getLogManager().getProperty("java.util.logging.FileHandler.pattern");
|
94 | 53 | }
|
95 |
| - |
96 |
| - public static void setFileHandlerLogPath(String path) throws IOException { |
97 |
| - if (path != null) { |
98 |
| - File jlp = new File(path); |
99 |
| - if (!jlp.exists() && !jlp.mkdirs()) { |
100 |
| - throw new IOException("could not make logpath: " |
101 |
| - + jlp.getAbsolutePath()); |
102 |
| - } |
103 |
| - } |
104 |
| - |
105 |
| - StringBuilder logfile = new StringBuilder(); |
106 |
| - logfile.append(path == null ? "%t" : path); |
107 |
| - logfile.append(File.separatorChar).append("opengrok%g.%u.log"); |
108 |
| - |
109 |
| - for (Handler handler : getBaseLogger().getHandlers()) { |
110 |
| - if (handler instanceof FileHandler) { |
111 |
| - FileHandler fileHandler = (FileHandler) handler; |
112 |
| - FileHandler newFileHandler; |
113 |
| - try { |
114 |
| - int logFilesSizeLimit = loggerIntProperty("java.util.logging.FileHandler.limit", DEFAULT_FILEHANDLER_LIMIT); |
115 |
| - int logFilesCount = loggerIntProperty("java.util.logging.FileHandler.count", DEFAULT_FILEHANDLER_COUNT); |
116 |
| - newFileHandler = new FileHandler(logfile.toString(), logFilesSizeLimit, logFilesCount); |
117 |
| - } catch (IOException e) { |
118 |
| - LOGGER.log(Level.WARNING, "Cannot create new logger FileHandler: " + logfile.toString(), e); |
119 |
| - return; |
120 |
| - } |
121 |
| - String formatter = LogManager.getLogManager().getProperty("java.util.logging.FileHandler.formatter"); |
122 |
| - newFileHandler.setLevel(fileHandler.getLevel()); |
123 |
| - try { |
124 |
| - newFileHandler.setFormatter((Formatter) Class.forName(formatter).getDeclaredConstructor().newInstance()); |
125 |
| - } catch (InstantiationException | IllegalAccessException | ClassNotFoundException | NoSuchMethodException |
126 |
| - | InvocationTargetException e) { |
127 |
| - newFileHandler.setFormatter(new FileLogFormatter()); |
128 |
| - } |
129 |
| - getBaseLogger().addHandler(newFileHandler); |
130 |
| - getBaseLogger().removeHandler(fileHandler); |
131 |
| - loggerFile = logfile.toString(); |
132 |
| - } |
133 |
| - } |
134 |
| - } |
135 |
| - |
136 |
| - public static String getFileHandlerLogPath() { |
137 |
| - return loggerFile != null ? loggerFile : LogManager.getLogManager().getProperty("java.util.logging.FileHandler.pattern"); |
138 |
| - } |
139 |
| - |
140 |
| - private static int loggerIntProperty(String name, int def) { |
141 |
| - String val = LogManager.getLogManager().getProperty(name); |
142 |
| - if (val == null) { |
143 |
| - return def; |
144 |
| - } |
145 |
| - try { |
146 |
| - return Integer.parseInt(val); |
147 |
| - } catch (NumberFormatException e) { |
148 |
| - return def; |
149 |
| - } |
150 |
| - } |
151 |
| - |
152 |
| - public static String initLogger(String logpath, Level filelevel, Level consolelevel) throws IOException { |
153 |
| - if (logpath != null) { |
154 |
| - File jlp = new File(logpath); |
155 |
| - if (!jlp.exists() && !jlp.mkdirs()) { |
156 |
| - throw new RuntimeException("could not make logpath: " |
157 |
| - + jlp.getAbsolutePath()); |
158 |
| - } |
159 |
| - if (!jlp.canWrite() && !Level.OFF.equals(filelevel)) { |
160 |
| - throw new IOException("logpath not writeable " + jlp.getAbsolutePath()); |
161 |
| - } |
162 |
| - } |
163 |
| - |
164 |
| - Logger.getGlobal().setLevel(Level.OFF); |
165 |
| - getBaseLogger().setLevel(Level.ALL); |
166 |
| - StringBuilder logfile = new StringBuilder(); |
167 |
| - logfile.append(logpath == null ? "%t" : logpath); |
168 |
| - logfile.append(File.separatorChar).append("opengrok%g.%u.log"); |
169 |
| - try { |
170 |
| - FileHandler fh = new FileHandler(logfile.toString(), |
171 |
| - loggerIntProperty("java.util.logging.FileHandler.limit", DEFAULT_FILEHANDLER_LIMIT), |
172 |
| - loggerIntProperty("java.util.logging.FileHandler.count", DEFAULT_FILEHANDLER_COUNT)); |
173 |
| - |
174 |
| - fh.setLevel(filelevel); |
175 |
| - String formatter = LogManager.getLogManager().getProperty("java.util.logging.FileHandler.formatter"); |
176 |
| - try { |
177 |
| - fh.setFormatter((Formatter) Class.forName(formatter).getDeclaredConstructor().newInstance()); |
178 |
| - } catch (InstantiationException | IllegalAccessException | ClassNotFoundException | NoSuchMethodException |
179 |
| - | InvocationTargetException e) { |
180 |
| - fh.setFormatter(new FileLogFormatter()); |
181 |
| - } |
182 |
| - |
183 |
| - getBaseLogger().addHandler(fh); |
184 |
| - loggerFile = logfile.toString(); |
185 |
| - |
186 |
| - ConsoleHandler ch = new ConsoleHandler(); |
187 |
| - ch.setLevel(consolelevel); |
188 |
| - ch.setFormatter(new ConsoleFormatter()); |
189 |
| - getBaseLogger().addHandler(ch); |
190 |
| - |
191 |
| - } catch (IOException | SecurityException ex1) { |
192 |
| - LOGGER.log(Level.SEVERE, "Exception logging", ex1); |
193 |
| - throw new IOException("Exception setting up logging " + ex1); |
194 |
| - } |
195 |
| - return logpath; |
196 |
| - } |
197 | 54 | }
|
0 commit comments