Java Logger进入()和退出()方法

5Yr*_*DBA 7 java logging

我刚开始使用Java Logger.我尝试将其entering()exiting()方法与硬编码字符串一起用于类名和方法.他们都不适合我.他们没有日志条目.但是该方法中的其他日志语句已正确记录.我的记录器级别设置为CONFIG.我试图设置ALL但仍然看不到它们的日志条目.

我发现每个条目都有一行记录了类名和方法.看来这两种方法都没有必要.但我仍然想知道如何让它们为我工作.

编辑:

我的代码遵循:这些enter()和exiting()不会在日志文件中创建一个条目

//class variables
private final static Logger logger = Logger.getLogger(MyClass.class.getName());
private static FileHandler logFileHandler = null;

//within the main() method
Logger thisLogger = Logger.getLogger("");
logFileHandler =  new FileHandler(logFileNameStr, false);
logFileHandler.setFormatter(new SimpleFormatter());
thisLogger.addHandler(logFileHandler);
thisLogger.setLevel(Level.CONFIG);
logger.log(Level.INFO, "Logfile Directory = " + logFileNameStr);


//within a constructor of MyClass
logger.entering("MyClass", "MyClass()");
....
logger.info(initMsg);
....
logger.exiting(this.getClass().getSimpleName(), "MyClass()");
Run Code Online (Sandbox Code Playgroud)

jme*_*ens 8

在FINER级别记录进入,退出和投掷.您必须将记录器设置为FINER或更低,并将FileHandler设置为FINER或更低.

thisLogger.addHandler(logFileHandler);
thisLogger.setLevel(Level.FINER);
logFileHandler.setLevel(Level.ALL);
Run Code Online (Sandbox Code Playgroud)

就样式而言,你应该尝试为类名创建一个静态final,因为你将它用作记录器名称并引用它来输入,退出,抛出记录精确的跟踪:

private static final String CLASS_NAME = MyClass.class.getName();
Run Code Online (Sandbox Code Playgroud)

您总是希望使用类文字来获取名称(如上所述),因为getClass().getName()可以返回可以伪造您的跟踪的子类名称.

对于方法名称,请不要()在名称中包含,只需使用与参数数量匹配的输入/退出方法.

对于构造函数方法名称,使用"<init>"和用于静态init块"<clinit>"作为方法名称,因为这将在堆栈跟踪中显示.