[logback-dev] [JIRA] Updated: (LBCLASSIC-126) NDC implementation
Anders Wallgren (JIRA)
noreply-jira at qos.ch
Fri May 8 23:54:11 CEST 2009
[ http://jira.qos.ch/browse/LBCLASSIC-126?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Anders Wallgren updated LBCLASSIC-126:
--------------------------------------
Attachment: NDC.java
> NDC implementation
> ------------------
>
> Key: LBCLASSIC-126
> URL: http://jira.qos.ch/browse/LBCLASSIC-126
> Project: logback-classic
> Issue Type: New Feature
> Affects Versions: 0.9.15
> Reporter: Anders Wallgren
> Assignee: Logback dev list
> Attachments: NDC.java
>
>
> The discussion about NDC vs. MDC has been done going for quite a while. I don't think MDC is a suitable replacement for NDC, except insofar as NDC can be implemented using MDC.
> Enclosed is the NDC implementation we're started using at Electric Cloud. Please feel free to adapt/modify/enhance it as you see fit. We place this code in the public domain in case others find it useful.
> Attachment to come as well.
> // NDC.java --
> //
> // NDC.java is part of the ElectricCommander server.
> //
> // Copyright (c) 2005-2009 Electric Cloud, Inc.
> // All rights reserved.
> //
> package com.electriccloud.log;
> import java.util.Deque;
> import java.util.LinkedList;
> import org.jetbrains.annotations.NonNls;
> import org.jetbrains.annotations.NotNull;
> import org.slf4j.MDC;
> /**
> * Utility object that implements NDC using MDC.
> */
> @SuppressWarnings({"UtilityClass", "StringContatenationInLoop"})
> public class NDC
> {
> //~ Static fields/initializers ---------------------------------------------
> private static final ThreadLocal<Deque<String>> s_stack =
> new ThreadLocal<Deque<String>>() {
> @Override @SuppressWarnings({"RefusedBequest"})
> protected Deque<String> initialValue()
> {
> return new LinkedList<String>();
> }
> };
> //~ Constructors -----------------------------------------------------------
> private NDC()
> {
> }
> //~ Methods ----------------------------------------------------------------
> public static void pop()
> {
> Deque<String> stack = s_stack.get();
> // Pop the stack if isn't already empty
> if (!stack.isEmpty()) {
> stack.pop();
> }
> // Put the previous value in the MDC (null if the stack is now empty)
> MDC.put("NDC", stack.peek());
> }
> @SuppressWarnings({"HardCodedStringLiteral"})
> public static void push(@NonNls @NotNull String format, Object... args)
> {
> Deque<String> stack = s_stack.get();
> String previous = stack.peek();
> String segment = args.length == 0
> ? format
> : String.format(format, args);
> String newValue = previous == null
> ? segment
> : String.format("%s %s", previous, segment);
> stack.push(newValue);
> MDC.put("NDC", newValue);
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the logback-dev
mailing list