3

我回到了我的第一个 EclipseLink JPA 项目,并注意到一些关于性能的问题。情况如下:

该应用程序使用本地 Apache Derby DB 运行。在创建 EntityManager 期间,控制台会记录一些信息和警告,这需要几秒钟,但到目前为止还不错。但是,如果我将整个代码打包到一个可执行的 jar 中并在 Eclipse 之外运行,整个过程会花费更多时间。

现在虽然首先找到这个问题的原因是明智的,但我至少想添加一个 ProgressBar 以便粗略跟踪进度。

我查看了 EclipseLink wiki,发现它已经具有 PerformanceMonitor 和一些日志记录实用程序。我现在陷入了将 1 和 1 放在一起的看似简单的任务。

如何将我的 ProgressBar 与 EclipseLink 连接起来?或者另一种方法:我如何首先记录 EclipseLink 的正在进行的活动?

任何帮助深表感谢。

干杯

4

3 回答 3

3

以下是为具有 EclipseLink JPA 的 SE 项目(非应用程序服务器)生成日志文件的步骤:

  1. 打开文件“persistence.xml”并分配以下属性:

    属性名称="eclipselink.logging.logger" 值="JavaLogger"

    属性名称="eclipselink.logging.level" 值="FINEST"

  2. 鉴于 Eclipselink JavaLogger 实际上是 java.util.logging 的,请参考您的 JDK 文件夹以找到要修改如下的文件 logging.properties:

handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler

# 默认全局日志级别。

.level=最好的

# 默认文件输出在用户的主目录中

# java.util.logging.FileHandler.pattern = %h/java%u.log

# 但我更喜欢硬连线如下:

java.util.logging.FileHandler.pattern = C\:/SamLogFile.log

java.util.logging.FileHandler.level = 更精细

java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

# 我个人不关心标准输出日志,所以我把它关掉了。

java.util.logging.ConsoleHandler.level = 关闭

java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n

现在你可以通过导入在你的类中放置一些日志:

import java.util.logging.Level;

import java.util.logging.Logger;

并调用:

public void yourMethod() { 

Logger.getLogger( YourClassName.class.getName() ).log( Level.INFO, "I am logging well......!" ); }

现在你已经设置好了。运行/测试您的项目并享受阅读您的日志!

于 2012-11-01T15:53:13.147 回答
3

您还可以通过将 2 个文件 slf4j-api-1.7.1.jar 和文件 slf4j-jdk14-1.7.1.jar 添加到您的类路径来将您的日志记录代码纳入最佳实践。这 2 个文件将从http://www.slf4j.org/download.html下载

将导入添加到您的课程中:

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

然后将这一行添加到您的方法中:

LoggerFactory.getLogger(Mysafeperson.class.getName()).info("I am logging using the slf4j api");

这种做法是使您的代码使用 slf4j api 而不是 java.util.logging (JUL) api。因此,您的代码与 JUL 分离,并准备好将任何日志框架绑定为 slf4j 实现(选择是 logback - log4j - 或参考此链接。

我在这里推广的想法是基于http://www.slf4j.org/legacy.html中的文档。所以:

  • 文件: slf4j-api-1.7.1 是您的新 api 外观。
  • 文件:slf4j-jdk14-1.7.1 与现有的日志记录实现即 java.util.logging (JUL) 和调用 slf4j api 的应用程序代码建立了一座桥梁。

仍然有两个提示:

  1. 请注意,JUL 中可用的定义级别是:

    • 严重(最高值)
    • 警告
    • 信息
    • 配置
    • 美好的
    • 更精细
    • 最好(最低值)

    因此不要使用 slf4j api 的级别(错误 - 跟踪 - 调试),它们不会触发任何日志记录级别。INFO 和 WARN 都可以使用

  2. 至于 EclipseLink,请注意您仍然依赖于使用 JUL 配置文件 logging.properties

于 2012-11-02T02:36:28.277 回答
2

您应该通过在 persistence.xml 文件中的持久单元的属性中添加它来启用 eclipselink 日志记录:

<property name="eclipselink.logging.level" value="DEBUG"/>

启用最详细的日志记录,如果还不够,甚至可以使用“ALL”而不是“DEBUG”。但是在生产时将其删除,否则该生产线本身会使其变慢。

可能使 Eclipse 链接变慢的两个常见因素是:

不需要时将其放入persistence.xml中:

<property name="eclipselink.ddl-generation" value="create-tables"/>

并且没有这个(如果您在 persistence.xml 文件中声明 de 类。如果您不这样做,请将其设置为 false !!):

<exclude-unlisted-classes>true</exclude-unlisted-classes>

至于进度条,我会说这会非常困难,而且不精确,因为即使 eclipselink 也不知道它将在开始时处理的全部课程数量,所以我认为这不值得付出努力,但很好如果你能找到一种方法来做这件事,那就好运了。

于 2012-08-26T05:11:55.117 回答