我刚开始使用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)
在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>"作为方法名称,因为这将在堆栈跟踪中显示.
| 归档时间: |
|
| 查看次数: |
9255 次 |
| 最近记录: |