📄 40d57d9a208d001c1487de563adc4702
字号:
package main.cn.edu.nju.software.sd.cll;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Logger类,CLL工程的核心所在
* @author ohai
* */
public class Logger{
private String name;
private Level loggerlevel;
private Format logformat;
private ArrayList<Handler> handlers = new ArrayList<Handler>();
public static final long startTime = System.currentTimeMillis();
public Logger parent;
/**默认的配置用于当在配置文件中没有父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 static LogManager manager = LogManager.getLogManager();
private static Logger rootLogger;
/**构造方法*/
public Logger(){}
public Logger(String n)
{
name = n;
}
public static Logger getRootLogger()
{
if(rootLogger==null)
{
rootLogger = new Logger(" ");
Configuration.initRootLogger(rootLogger);
}
return rootLogger;
}
/**两种获得logger的方法*/
public static Logger getLogger(Class clazz) {
System.out.println("root");
String namestr = clazz.getName();
Logger logger = manager.getLogger(namestr);
return logger;
}
public static Logger getLogger(String namestr) {
Logger logger = manager.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;
}
/**设置output destintion*/
public void addHandler(Handler h)
{
if(h!=null)
{
handlers.add(h);
}
}
public ArrayList<Handler> getHandlers()
{
return handlers;
}
/**设置format*/
public void setFormat(Format format)
{
logformat = format;
}
public Format getFormat()
{
return logformat;
}
/**记录并封装信息,最后向目的地输出信息*/
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 = " ";
StackTraceElement stack[] = (new Throwable()).getStackTrace();
int i = stack.length-1;
String callClass = stack[1].getClassName();
String callee = stack[1].getMethodName();
int lineno = stack[1].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 = manager.getParentFormat(this);
}
result = formator.doFormat(record);
ArrayList<Handler> array = handlers;
if(array.isEmpty())
{
array = manager.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;
// System.out.println(l.toString());
if(l==null)
{
l = manager.getParentLevel(this);
}
if(level.intlevel<l.intlevel)
isLoggable = false;
else
isLoggable = true;
return isLoggable;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -