http://takya2.blog33.fc2.com/blog-entry-18.html
NDCとは「Nested Diagnostic Context」の略。
org.apache.log4j.NDC クラスを使う。
とかすると、ログ出力レイアウト上の「%x」が置き換わる。
スタックするので、さらに
とかすると、「%x」は「hoge1 hoge2」になる。
この状態で
すると、末尾のデータが無くなり「%x」は「hoge1」になる。
さらに
すると、データが無くなり「%x」は空文字になる。
不要になったら
で消し去る。
この機能はマルチスレッドに対応しているのがポイント。
で、何に使うかというと、
WEBアプリケーションのログで、1回のリクエストで複数のログを出力する場合、
アクセスが同時に複数あると、どのログがどのリクエストの操作なのかわからなくなる。
ログにセッションIDを出力することができれば、そのセッションIDだけを抽出することにより、
特定のリクエストを解析することが可能になり、便利なはず。
リクエストと言ったが、端末というかブラウザというか、複数の異なるセッションIDからのアクセスを識別するということになるかな。
具体的な使用例としては、サーブレットによる実装だろう。
以下のような感じ。
必要なアクセスに対してマッピングを設定すれば、ログいに容易にセッションIDを出力可能になる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package test.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.NDC;
public class Log4jFilter implements Filter {
public void init(FilterConfig conf) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
NDC.push(((HttpServletRequest) request).getSession().getId());
try {
chain.doFilter(request, response);
} finally {
NDC.remove();
}
}
public void destroy() {
}
}
|
ちなみに、MDCとは「Mapped Diagnostic Context」の略。
スタックではなくマッピングにて同様の処理を行う。
レイアウト上では「%X{key}」が置き換わる。
分享到:
相关推荐
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n ################### # 单个日子记录 ################### log4j...
Log4j比较全面的配置 log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j....
NDC8将EventLog存入SqlServer数据库
- Support for a log formatter (similar to Layouts in Log4J) - Support for console log - Support for smtp formatter - Support for XML logs - Support for syslog - Support for changing format and level ...
ndc开发文档,国外atm需遵照NDC协议,该文档包含具体开发流程
ATM 行业, 国外常用的Aptra NDC协议
ATM 行业, 2011版 Aptra NDC协议 文档
2006年版的NCR公司推出的NDC协议。NDC协议完整指导了NCR的ATM流程控制与响应控制机制。但是当时没有出现存取款一体机,所以此协议并没有把存款模块的控制与管理加到其中。
如今ATM行业估计有人已经不知其为何物了,因为现如今的中国ATM行业已经大多不会再用到NDC了,但是NDC作为曾经的一个产物,现在在全球仍然有很多国家使用,甚至很多国家都强制要求使用NDC来编写ATM程序...
良信 NDC1系列交流接触器技术样本pdf,良信 NDC1系列交流接触器技术样本
IDC和NDC互动关系分析.pdf
NDC概念与意义.doc
美国NDC,红外水分仪,红外测水,进口水分仪,北京宇宏泰,烧结球团测水,烧结自动加水,自动打水,炼钢炼铁,CM710e,MM710,TM710,TM710e,Series 9,PrediktIR
美国NDC,红外水分仪,红外测水,进口水分仪,北京宇宏泰,烧结球团测水,烧结自动加水,自动打水,炼钢炼铁,CM710e,MM710,TM710,TM710e,eries 9,PrediktIR
NDC Java SDK 这是一个Java项目,其中包装了符合NDC的API。 它与主机无关,因此可以指向任何NDC主机。 安装 使用Maven 将以下依赖项添加到项目的依赖项中 <groupId>org.iata.ndc <artifactId>ndc-client ...
groovy-slf4j-ndc.zip,使用映射诊断上下文(mdc)模拟slf4j和groovy中的嵌套诊断上下文(ndc)。
美国NDC,红外水分仪,红外测水,进口水分仪,北京宇宏泰,烧结球团测水,烧结自动加水,自动打水,炼钢炼铁,CM710e,MM710,TM710,TM710e,eries 9,PrediktIR
NDC8Demo消息交互流程图
NDC8系统应用设计器常用参数
NDC概念及其意义.doc