001/* 002 * PermissionsEx 003 * Copyright (C) zml and PermissionsEx contributors 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package ca.stellardrift.permissionsex.impl.logging; 018 019import ca.stellardrift.permissionsex.logging.FormattedLogger; 020import net.kyori.adventure.text.Component; 021import net.kyori.adventure.text.serializer.ComponentSerializer; 022import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; 023import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer; 024import net.kyori.adventure.translation.GlobalTranslator; 025import org.checkerframework.checker.nullness.qual.Nullable; 026import org.slf4j.Logger; 027import org.slf4j.Marker; 028 029import java.util.Locale; 030 031/** 032 * An implementation of {@link FormattedLogger} that delegates to an existing logger 033 */ 034public class WrappingFormattedLogger implements FormattedLogger { 035 036 public static FormattedLogger of(Logger logger, boolean supportsFormatting) { 037 return logger instanceof FormattedLogger ? ((FormattedLogger) logger) : new WrappingFormattedLogger(logger, supportsFormatting); 038 } 039 private final Logger wrapping; 040 private @Nullable String prefix; 041 private final boolean supportsFormatting; 042 043 public WrappingFormattedLogger(Logger wrapping, boolean supportsFormatting) { 044 this.wrapping = wrapping; 045 this.supportsFormatting = supportsFormatting; 046 } 047 048 @Override 049 public Locale logLocale() { 050 return Locale.getDefault(); 051 } 052 053 @Override 054 public Locale logLocale(final @Nullable Marker marker) { 055 return logLocale(); 056 } 057 058 @Override 059 public @Nullable String prefix() { 060 return this.prefix; 061 } 062 063 @Override 064 public void prefix(final @Nullable String prefix) { 065 this.prefix = prefix; 066 } 067 068 @Override 069 public ComponentSerializer<Component, ?, String> serializer() { 070 if (supportsFormatting) { 071 return LegacyComponentSerializer.legacySection(); 072 } else { 073 return PlainComponentSerializer.plain(); 074 } 075 } 076 077 @Override 078 public String formatText(Component component, @org.checkerframework.checker.nullness.qual.Nullable Marker marker) { 079 return serializer().serialize(GlobalTranslator.render(component, logLocale(marker))); 080 } 081 082 private String applyPrefix(String input) { 083 final @Nullable String prefix = this.prefix; 084 return prefix == null ? input : (prefix + input); 085 } 086 087 /** 088 * {@inheritDoc} 089 */ 090 @Override 091 public String getName() { 092 return wrapping.getName(); 093 } 094 095 /** 096 * {@inheritDoc} 097 */ 098 @Override 099 public boolean isTraceEnabled() { 100 return wrapping.isTraceEnabled(); 101 } 102 103 /** 104 * {@inheritDoc} 105 */ 106 @Override 107 public void trace(String msg) { 108 wrapping.trace(applyPrefix(msg)); 109 } 110 111 /** 112 * {@inheritDoc} 113 */ 114 @Override 115 public void trace(String format, Object arg) { 116 wrapping.trace(applyPrefix(format), arg); 117 } 118 119 /** 120 * {@inheritDoc} 121 */ 122 @Override 123 public void trace(String format, Object arg1, Object arg2) { 124 wrapping.trace(applyPrefix(format), arg1, arg2); 125 } 126 127 /** 128 * {@inheritDoc} 129 */ 130 @Override 131 public void trace(String format, Object... arguments) { 132 wrapping.trace(applyPrefix(format), arguments); 133 } 134 135 /** 136 * {@inheritDoc} 137 */ 138 @Override 139 public void trace(String msg, Throwable t) { 140 wrapping.trace(applyPrefix(msg), t); 141 } 142 143 /** 144 * {@inheritDoc} 145 */ 146 @Override 147 public boolean isTraceEnabled(Marker marker) { 148 return wrapping.isTraceEnabled(marker); 149 } 150 151 /** 152 * {@inheritDoc} 153 */ 154 @Override 155 public void trace(Marker marker, String msg) { 156 wrapping.trace(marker, applyPrefix(msg)); 157 } 158 159 /** 160 * {@inheritDoc} 161 */ 162 @Override 163 public void trace(Marker marker, String format, Object arg) { 164 wrapping.trace(marker, applyPrefix(format), arg); 165 } 166 167 /** 168 * {@inheritDoc} 169 */ 170 @Override 171 public void trace(Marker marker, String format, Object arg1, Object arg2) { 172 wrapping.trace(marker, applyPrefix(format), arg1, arg2); 173 } 174 175 /** 176 * {@inheritDoc} 177 */ 178 @Override 179 public void trace(Marker marker, String format, Object... argArray) { 180 wrapping.trace(marker, applyPrefix(format), argArray); 181 } 182 183 /** 184 * {@inheritDoc} 185 */ 186 @Override 187 public void trace(Marker marker, String msg, Throwable t) { 188 wrapping.trace(marker, applyPrefix(msg), t); 189 } 190 191 /** 192 * {@inheritDoc} 193 */ 194 @Override 195 public boolean isDebugEnabled() { 196 return wrapping.isDebugEnabled(); 197 } 198 199 /** 200 * {@inheritDoc} 201 */ 202 @Override 203 public void debug(String msg) { 204 wrapping.debug(applyPrefix(msg)); 205 } 206 207 /** 208 * {@inheritDoc} 209 */ 210 @Override 211 public void debug(String format, Object arg) { 212 wrapping.debug(applyPrefix(format), arg); 213 } 214 215 /** 216 * {@inheritDoc} 217 */ 218 @Override 219 public void debug(String format, Object arg1, Object arg2) { 220 wrapping.debug(applyPrefix(format), arg1, arg2); 221 } 222 223 /** 224 * {@inheritDoc} 225 */ 226 @Override 227 public void debug(String format, Object... arguments) { 228 wrapping.debug(applyPrefix(format), arguments); 229 } 230 231 /** 232 * {@inheritDoc} 233 */ 234 @Override 235 public void debug(String msg, Throwable t) { 236 wrapping.debug(applyPrefix(msg), t); 237 } 238 239 /** 240 * {@inheritDoc} 241 */ 242 @Override 243 public boolean isDebugEnabled(Marker marker) { 244 return wrapping.isDebugEnabled(marker); 245 } 246 247 /** 248 * {@inheritDoc} 249 */ 250 @Override 251 public void debug(Marker marker, String msg) { 252 wrapping.debug(marker, applyPrefix(msg)); 253 } 254 255 /** 256 * {@inheritDoc} 257 */ 258 @Override 259 public void debug(Marker marker, String format, Object arg) { 260 wrapping.debug(marker, applyPrefix(format), arg); 261 } 262 263 /** 264 * {@inheritDoc} 265 */ 266 @Override 267 public void debug(Marker marker, String format, Object arg1, Object arg2) { 268 wrapping.debug(marker, applyPrefix(format), arg1, arg2); 269 } 270 271 @Override 272 public void debug(Marker marker, String format, Object... arguments) { 273 wrapping.debug(marker, applyPrefix(format), arguments); 274 } 275 276 @Override 277 public void debug(Marker marker, String msg, Throwable t) { 278 wrapping.debug(marker, applyPrefix(msg), t); 279 } 280 281 @Override 282 public boolean isInfoEnabled() { 283 return wrapping.isInfoEnabled(); 284 } 285 286 @Override 287 public void info(String msg) { 288 wrapping.info(applyPrefix(msg)); 289 } 290 291 @Override 292 public void info(String format, Object arg) { 293 wrapping.info(applyPrefix(format), arg); 294 } 295 296 @Override 297 public void info(String format, Object arg1, Object arg2) { 298 wrapping.info(applyPrefix(format), arg1, arg2); 299 } 300 301 @Override 302 public void info(String format, Object... arguments) { 303 wrapping.info(applyPrefix(format), arguments); 304 } 305 306 @Override 307 public void info(String msg, Throwable t) { 308 wrapping.info(applyPrefix(msg), t); 309 } 310 311 @Override 312 public boolean isInfoEnabled(Marker marker) { 313 return wrapping.isInfoEnabled(marker); 314 } 315 316 @Override 317 public void info(Marker marker, String msg) { 318 wrapping.info(marker, applyPrefix(msg)); 319 } 320 321 @Override 322 public void info(Marker marker, String format, Object arg) { 323 wrapping.info(marker, applyPrefix(format), arg); 324 } 325 326 @Override 327 public void info(Marker marker, String format, Object arg1, Object arg2) { 328 wrapping.info(marker, applyPrefix(format), arg1, arg2); 329 } 330 331 @Override 332 public void info(Marker marker, String format, Object... arguments) { 333 wrapping.info(marker, applyPrefix(format), arguments); 334 } 335 336 @Override 337 public void info(Marker marker, String msg, Throwable t) { 338 wrapping.info(marker, applyPrefix(msg), t); 339 } 340 341 @Override 342 public boolean isWarnEnabled() { 343 return wrapping.isWarnEnabled(); 344 } 345 346 347 @Override 348 public void warn(String msg) { 349 wrapping.warn(applyPrefix(msg)); 350 } 351 352 @Override 353 public void warn(String format, Object arg) { 354 wrapping.warn(applyPrefix(format), arg); 355 } 356 357 @Override 358 public void warn(String format, Object... arguments) { 359 wrapping.warn(applyPrefix(format), arguments); 360 } 361 362 @Override 363 public void warn(String format, Object arg1, Object arg2) { 364 wrapping.warn(applyPrefix(format), arg1, arg2); 365 } 366 367 @Override 368 public void warn(String msg, Throwable t) { 369 wrapping.warn(applyPrefix(msg), t); 370 } 371 372 @Override 373 public boolean isWarnEnabled(Marker marker) { 374 return wrapping.isWarnEnabled(marker); 375 } 376 377 @Override 378 public void warn(Marker marker, String msg) { 379 wrapping.warn(marker, applyPrefix(msg)); 380 } 381 382 @Override 383 public void warn(Marker marker, String format, Object arg) { 384 wrapping.warn(marker, applyPrefix(format), arg); 385 } 386 387 @Override 388 public void warn(Marker marker, String format, Object arg1, Object arg2) { 389 wrapping.warn(marker, applyPrefix(format), arg1, arg2); 390 } 391 392 @Override 393 public void warn(Marker marker, String format, Object... arguments) { 394 wrapping.warn(marker, applyPrefix(format), arguments); 395 } 396 397 @Override 398 public void warn(Marker marker, String msg, Throwable t) { 399 wrapping.warn(marker, applyPrefix(msg), t); 400 } 401 402 @Override 403 public boolean isErrorEnabled() { 404 return wrapping.isErrorEnabled(); 405 } 406 407 @Override 408 public void error(String msg) { 409 wrapping.error(applyPrefix(msg)); 410 } 411 412 @Override 413 public void error(String format, Object arg) { 414 wrapping.error(applyPrefix(format), arg); 415 } 416 417 @Override 418 public void error(String format, Object arg1, Object arg2) { 419 wrapping.error(applyPrefix(format), arg1, arg2); 420 } 421 422 @Override 423 public void error(String format, Object... arguments) { 424 wrapping.error(applyPrefix(format), arguments); 425 } 426 427 @Override 428 public void error(String msg, Throwable t) { 429 wrapping.error(applyPrefix(msg), t); 430 } 431 432 @Override 433 public boolean isErrorEnabled(Marker marker) { 434 return wrapping.isErrorEnabled(marker); 435 } 436 437 @Override 438 public void error(Marker marker, String msg) { 439 wrapping.error(marker, applyPrefix(msg)); 440 } 441 442 @Override 443 public void error(Marker marker, String format, Object arg) { 444 wrapping.error(marker, applyPrefix(format), arg); 445 } 446 447 @Override 448 public void error(Marker marker, String format, Object arg1, Object arg2) { 449 wrapping.error(marker, applyPrefix(format), arg1, arg2); 450 } 451 452 @Override 453 public void error(Marker marker, String format, Object... arguments) { 454 wrapping.error(marker, applyPrefix(format), arguments); 455 } 456 457 @Override 458 public void error(Marker marker, String msg, Throwable t) { 459 wrapping.error(marker, applyPrefix(msg), t); 460 } 461}