我有一个桌面java应用程序,我预见到Java日志记录就足够了.为了简化这个问题,我使用java全局记录器获取记录器,而不是传递任何特定的记录器名称
Logger logger = Logger.getGlobal();
String logFilePath = Config.INSTANCE.getProperty("logFilePath");
FileHandler fileHandler = new FileHandler(logFilePath);
logger.addHandler(fileHandler);
SimpleFormatter formatter = new SimpleFormatter();
fileHandler.setFormatter(formatter);
Run Code Online (Sandbox Code Playgroud)
如您所见,我还在输出文件路径和格式化程序方面对全局记录器进行了更改.
我的问题是关于全局记录器的范围,它的全局范围是JVM吗?或全局范围的应用程序?如果全局范围在JVM上,我是否应该对共享相同JVM的应用程序产生副作用?提示:我已经完成了这个线程在java.util.logging中,什么是全局记录器?但评论不是我可以利用的.
是的,每个JVM只有一个Global Logger实例.因此,JVM中的所有应用程序将共享相同的Global Logger实例.
参考源的java.util.Logger,如果你是热衷于看它是如何被宣布.它已在第218行声明如下
@Deprecated
218 public static final Logger global = new Logger(GLOBAL_LOGGER_NAME);
Run Code Online (Sandbox Code Playgroud)
那说你真的不应该使用Global Logger,因为它容易出现死锁.引用与全局记录器字段相关的Java文档:
不推荐使用:此字段的初始化容易出现死锁.该字段必须由Logger类初始化初始化,这可能会导致LogManager类初始化死锁.在这种情况下,两个类初始化等待彼此完成.从JDK 1.6版开始,获取全局记录器对象的首选方法是通过调用Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).
如果您真的非常认真地记录日志(您应该这样做),那么请考虑使用记录器设置以粒度方式为每个组件声明记录器.
与记录相关的其他链接:
| 归档时间: |
|
| 查看次数: |
2032 次 |
| 最近记录: |