📄 80605f2f958b001c1bbfa32aa88923c4
字号:
package main.cn.edu.nju.software.sd.cll;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.*;
public class Logger{
private String name;
private Level loggerlevel;
private Format logformat;
private ArrayList<Handler> handlers = new ArrayList<Handler>();
/**默认的配置用于当在配置文件中没有父logger的配置的时候用来配置父logger,*/
public final static Level defaultLevel = Level.TRACE;
public final static Format defaultFormat = new Format("%n-%e-%m");
public final static Handler defaultHandler = new ConsoleHandler();
// private boolean useParentConfiguration;
private boolean useParentLevel;
private boolean useParentDestination;
private boolean useParentFormat;
// private boolean isLoggable;
private static LoggerManager logManager = LoggerManager.getLogManager();
public static final Logger root = new Logger(" ");
/**构造方法*/
public Logger(){}
public Logger(String n)
{
name = n;
}
public static Logger getRootLogger()
{
return root;
}
/**两种获得logger的方法*/
public static Logger getLogger(Class clazz) {
String namestr = clazz.getName();
Logger logger = logManager.getLogger(namestr);
return logger;
}
public static Logger getLogger(String namestr) {
Logger logger = logManager.getLogger(namestr);
return logger;
}
/**logger的配置*/
public void removeHandle(Handler handler)
{
}
/**获得logger的名字*/
public String getName()
{
return name;
}
/**获得和设置logger的level*/
public Level getLevel()
{
return loggerlevel;
}
public void setLevel(Level l)
{
loggerlevel = l;
}
/* public void setLevel(int n)
{
Level le = new Level();
le = le.toLevel(n);
setLevel(le);
}
public void setLevel(String str)
{
Level le = new Level();
le = le.toLevel(str);
setLevel(le);
}
public void setLevel(Level l,boolean b)
{
loggerlevel = l;
useParentLevel = b;
}*/
/**设置output destintion*/
public void addHandler(Handler h)
{
if(h!=null)
{
handlers.add(h);
}
}
/* public void addHandler(Handler h,boolean b)
{
useParentDestination = b;
if(!useParentDestination)
handlers.add(h);
}*/
public ArrayList<Handler> getHandlers()
{
return handlers;
}
/**设置format*/
public void setFormat(Format format)
{
logformat = format;
}
/* public void setFormat(Format f,boolean b)
{
useParentFormat = b;
logformat = f;
}*/
public Format getFormat()
{
return logformat;
}
/**判断和设置是否应用 父logger的配置 */
public boolean getUseParentConfiguration()
{
return useParentConfiguration;
}
public void setUseParentConfiguration(boolean use)
{
useParentConfiguration = use;
}
/**判断是否用父logger的level*/
public boolean getUseParentLevel()
{
return useParentLevel;
}
public void setUseParentLevel(boolean useOrNot)
{
useParentLevel = useOrNot;
}
/**判断是否使用父logger的output destination*/
public boolean getUseParentDestination()
{
return useParentDestination;
}
public void setUseParentDestination(boolean useOrNot)
{
useParentDestination = useOrNot;
}
/**判断是否使用父logger的format*/
public boolean getUseParentFormat()
{
return useParentFormat;
}
public void setUseParentFormat(boolean useOrNot)
{
useParentFormat = useOrNot;
}
/**记录并封装信息,最后向目的地输出信息*/
public void log(Level level, String message) {
Date d = new Date();
SimpleDateFormat sd = new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss");
String date = sd.format(d);
String logname = name;
String result = null;
StackTraceElement stack[] = (new Throwable()).getStackTrace();
int i = stack.length-1;
String callClass = stack[i].getClassName();
String callee = stack[i].getMethodName();
int lineno = stack[i].getLineNumber();
LogRecord record = new LogRecord(logname,level,message,callClass,callee,lineno,date,0);
boolean loggable = loggableOrNot(level);
if(loggable)
{
Format formator = logformat;
if(formator==null)
{
formator = logManager.getParentFormat(this);
}
result = formator.doFormat(record);
}
ArrayList<Handler> array = handlers;
if(array.isEmpty())
{
array = logManager.getParentHandler(this);
}
for(int t=0;t<array.size();t++)
{
Handler handler = array.get(t);
handler.publish(result);
}
}
/**判断是否可以log,如果当前logger的level没有配置,则比较父logger的level */
public boolean loggableOrNot(Level level)
{
boolean isLoggable;
Level l = loggerlevel;
if(l==null)
{
l = logManager.getParentLevel(this);
}
if(level.intlevel<l.intlevel)
isLoggable = false;
else
isLoggable = true;
return isLoggable;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -