📄 intramartlogagent.java
字号:
/*
* IntramartLogAgent.java
*
* Created on 2003/08/01, 18:00
*/
package jp.co.intra_mart.framework.system.log;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import jp.co.intra_mart.system.Report;
import jp.co.intra_mart.system.log.ReportRecord;
/**
* intra-mart 偱娗棟偝傟偰偄傞儘僌偵弌椡偡傞儘僌僄乕僕僃儞僩偱偡丅
* 弌椡愭偼 intra-mart 偺愝掕偵埶懚偟傑偡丅
* 弌椡偝傟傞儊僢僙乕僕偼埲壓偺傛偆側宍幃偵側傝傑偡丅<BR>
* <CODE>[<I>儗儀儖</I>]<I>儊僢僙乕僕</I><CODE><BR>
* {@link #init(LogAgentParam[])}偵搉偡僷儔儊乕僞偼埲壓偺傛偆偵夝庍偝傟傑偡丅<BR>
* <TABLE>
* <TR>
* <TH>僷儔儊乕僞柤</TH>
* <TH>僷儔儊乕僞偺抣</TH>
* </TR>
* <TR>
* <TD>僇僥僑儕</TD>
* <TD>僇僥僑儕偺庬椶</TD>
* </TR>
* </TABLE><BR>
* 僇僥僑儕偺庬椶偵{@link #TYPE_DB}偺抣傪巜掕偡傞偲僨乕僞儀乕僗儘僌偲偟偰弌椡偝傟傑偡丅
*
* @author INTRAMART
* @since 4.2
*/
public class IntramartLogAgent implements LogAgent {
/**
* 僨乕僞儀乕僗儘僌偵弌椡偡傞応崌偺僇僥僑儕偺庬椶
*/
public static final String TYPE_DB = "DB";
/**
* 僇僥僑儕偺廤崌
*/
private Map categories = null;
/**
* IntramartLogAgent傪怴婯偵惗惉偟傑偡丅
*/
public IntramartLogAgent() {
this.categories = new HashMap();
}
/**
* 弶婜壔偟傑偡丅
* 僷儔儊乕僞偱巜掕偝傟偨僇僥僑儕傪搊榐偟傑偡丅
*
* @param params 儘僌僄乕僕僃儞僩偺僷儔儊乕僞
*/
public void init(LogAgentParam[] params) {
if (params != null) {
for (int i = 0; i < params.length; i++) {
this.categories.put(params[i].getName(), params[i].getValue());
}
}
}
/**
* 儊僢僙乕僕傪弌椡偟傑偡丅
* <code>level</code>偑{@link LogConstant#LEVEL_ERROR}埲奜偺応崌偼儊僢僙乕僕傪intra-mart偺僔僗僥儉儘僌偲偟偰弌椡偟傑偡丅
* <code>level</code>偑{@link LogConstant#LEVEL_ERROR}偱偁傞応崌丄
* <code>category</code>傪傕偲偵庢摼偝傟傞僇僥僑儕偺庬椶偵傛偭偰埲壓偺傛偆偵偝傜偵弌椡愭偑暘偐傟傑偡丅
* <ul>
* <li>僇僥僑儕偺庬椶偑{@link #TYPE_DB}偱偁傞応崌丄僨乕僞儀乕僗儘僌偲偟偰弌椡
* <li>僇僥僑儕偺庬椶偑{@link #TYPE_DB}埲奜偱偁傞応崌丄僄儔乕儘僌偲偟偰弌椡
* </ul>
*
* @param category 儘僌偺僇僥僑儕
* @param level 儊僢僙乕僕偺儗儀儖
* @param message 儊僢僙乕僕
*/
public void sendMessage(String category, String level, String message) {
if (!level.equals(LogConstant.LEVEL_ERROR)) {
// 儗儀儖偑LEVEL_ERROR埲奜偺傕偺偼僔僗僥儉儘僌偵弌椡
Report.system.write(createMessage(level, message));
} else {
// 儗儀儖偑LEVEL_ERROR偱偁傝
if (categoryIsDB(category)) {
// 僇僥僑儕偑DB偵娭楢偡傞傕偺偼DB僄儔乕儘僌偵徻嵶側偟偱弌椡
Report.createReporter(Report.LOG_DATABASE).writeError(
createMessage(level, message));
} else {
// 僇僥僑儕偑DB偵娭楢偡傞傕偺埲奜偱偁傞偲偒偼僄儔乕儘僌偵徻嵶側偟偱弌椡
Report.error.write(createMessage(level, message));
}
}
}
/**
* 儊僢僙乕僕傪弌椡偟傑偡丅
* <code>level</code>偑{@link LogConstant#LEVEL_ERROR}埲奜偺応崌偼儊僢僙乕僕傪intra-mart偺僔僗僥儉儘僌偲偟偰弌椡偟傑偡丅
* <code>level</code>偑{@link LogConstant#LEVEL_ERROR}偱偁傞応崌丄埲壓偺傛偆偵弌椡愭偑堎側傝傑偡丅
* <ul>
* <li><code>detail</code>偑{@link Throwable}偺僀儞僗僞儞僗偱偁傝
* <ul>
* <li>僇僥僑儕偑DB偵娭楢偡傞傕偺偼僨乕僞儀乕僗儘僌偲偟偰弌椡
* <li>僇僥僑儕偑DB偵娭楢偡傞傕偺埲奜偱偁傞偲偒偼僄儔乕儘僌偲偟偰弌椡
* </ul>
* <li><code>detail</code>偑{@link Throwable}埲奜偺僀儞僗僞儞僗偱偁傝
* <ul>
* <li>徻嵶暥帤楍偑懚嵼偟
* <ul>
* <li>僇僥僑儕偺庬椶偑{@link #TYPE_DB}偱偁傞応崌僨乕僞儀乕僗儘僌偲偟偰徻嵶偛偲弌椡
* <li>僇僥僑儕偺庬椶偑{@link #TYPE_DB}埲奜偱偁傞偲偒偼僄儔乕儘僌偲偟偰徻嵶偛偲弌椡
* </ul>
* <li>徻嵶暥帤楍偑懚嵼偟側偄偱
* <ul>
* <li>僇僥僑儕偑DB偵娭楢偡傞傕偺偼僨乕僞儀乕僗儘僌偲偟偰徻嵶側偟偱弌椡
* <li>僇僥僑儕偑DB偵娭楢偡傞傕偺埲奜偱偁傞偲偒偼僄儔乕儘僌偲偟偰徻嵶側偟偱弌椡
* </ul>
* </ul>
* </ul>
*
* @param category 儘僌偺僇僥僑儕
* @param level 儊僢僙乕僕偺儗儀儖
* @param message 儊僢僙乕僕
* @param detail 徻嵶
*/
public void sendMessage(
String category,
String level,
String message,
Object detail) {
Throwable e = null;
String detailString = null;
// 徻嵶暥帤楍偺嶌惉
// detail偑Throwable偺僀儞僗僞儞僗偱偁傞応崌偼偦偺僗僞僢僋僩儗乕僗偺撪梕傪丄
// 偦偆偱側偄応崌偼toString儊僜僢僪偺栠傝抣傪愝掕偡傞
if (detail instanceof Throwable) {
e = (Throwable)detail;
}
if (e != null) {
StringWriter writer = new StringWriter();
e.printStackTrace(new PrintWriter(writer));
detailString = new String(writer.getBuffer());
} else {
detailString = detail.toString();
}
// 儘僌偺弌椡
if (!level.equals(LogConstant.LEVEL_ERROR)) {
// 儗儀儖偑LEVEL_ERROR埲奜偺傕偺偼僔僗僥儉儘僌偵弌椡
Report.system.writeDetail(
createMessage(level, message),
new ReportRecord(detailString));
} else {
// 儗儀儖偑LEVEL_ERROR偱偁傝
if (e != null) {
// detail偑Throwable偺僀儞僗僞儞僗偱偁傝
if (categoryIsDB(category)) {
// 僇僥僑儕偑DB偵娭楢偡傞傕偺偼DB僄儔乕儘僌偵弌椡
Report.createReporter(Report.LOG_DATABASE).writeError(
createMessage(level, message),
e);
} else {
// 僇僥僑儕偑DB偵娭楢偡傞傕偺埲奜偱偁傞偲偒偼僄儔乕儘僌偵弌椡
Report.error.write(createMessage(level, message), e);
}
} else {
// detail偑Throwable埲奜偺僀儞僗僞儞僗偱偁傝
if (detailString != null) {
// 徻嵶暥帤楍偑懚嵼偟
if (categoryIsDB(category)) {
// 僇僥僑儕偑DB偵娭楢偡傞傕偺偼DB僄儔乕儘僌偵徻嵶偛偲弌椡
Report.createReporter(Report.LOG_DATABASE).writeError(
createMessage(level, message),
new ReportRecord(detailString));
} else {
// 僇僥僑儕偑DB偵娭楢偡傞傕偺埲奜偱偁傞偲偒偼僄儔乕儘僌偵弌椡
Report.error.write(
createMessage(level, message),
new ReportRecord(detailString));
}
} else {
// 徻嵶暥帤楍偑懚嵼偟側偄偱
if (categoryIsDB(category)) {
// 僇僥僑儕偑DB偵娭楢偡傞傕偺偼DB僄儔乕儘僌偵徻嵶側偟偱弌椡
Report.createReporter(Report.LOG_DATABASE).writeError(
createMessage(level, message));
} else {
// 僇僥僑儕偑DB偵娭楢偡傞傕偺埲奜偱偁傞偲偒偼僄儔乕儘僌偵徻嵶側偟偱弌椡
Report.error.write(createMessage(level, message));
}
}
}
}
}
/**
* 巜掕偝傟偨僇僥僑儕偑僨乕僞儀乕僗儘僌偐偳偆偐傪敾掕偟傑偡丅
*
* @param category 僇僥僑儕
* @return 巜掕偝傟偨僇僥僑儕偑僨乕僞儀乕僗儘僌偺応崌<CODE>true</CODE>丄
* 偦偆偱側偗傟偽<CODE>false</CODE>
*/
private boolean categoryIsDB(String category) {
String type = null;
if (category == null) {
return false;
}
type = (String)this.categories.get(category);
if (type == null) {
return false;
}
return type.equals(TYPE_DB);
}
/**
* 儊僢僙乕僕傪惗惉偟傑偡丅
*
* @param message 儊僢僙乕僕
* @return 弌椡偡傞儊僢僙乕僕
*/
private String createMessage(String level, String message) {
return "[" + level + "]" + message;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -