websphere 日志_在WebSphere Commerce定制代码中使用日志记录和跟踪

websphere 日志

作为WebSphere Commerce支持和服务组织的成员,我们遇到的实现没有提供适当的日志记录和跟踪来解决各种问题。 缺少日志记录,使用了诸如System.out之类的技术不足,或者依赖于不推荐使用和保留的组件,例如WC_EXTERN或WC_ORDER。 本文将展示如何在几分钟内实现自定义代码的日志记录。 我们将描述WebSphere Application Server V6.0提供的日志记录功能,提供示例,并提供使日志记录有效的最佳实践。

WebSphere日志记录功能和Java日志记录

WebSphere Commerce V5.6.1.1和V6.0支持WebSphere Application Server V6.0(以下称为Application Server)。 此版本的Application Server完全集成了Java™日志记录API(java.util.logging),该API已在J2SE 1.4中添加,以提供对应用程序信息输出的高级控制。 在Application Server V6.0中,可以使用Java日志记录标准为应用程序实现日志记录,并利用WebSphere日志记录功能,例如文件管理,运行时配置以及通过管理控制台或wsadmin工具进行管理。

JRas框架(WebSphere Application Server V5中的日志记录标准)已被弃用。 如果您已使用JRas实现了日志记录,则您的应用程序将继续运行。 但是,如果您面临新的实现,请改用Java日志记录。

将日志添加到代码中

在您自己的代码中设置日志记录和跟踪很简单。 以下示例显示了使用日志记录API的通用WebSphere Commerce命令。

package com.mycompany.commerce;

import java.util.logging.Level;
import java.util.logging.Logger;

public class ExtGetContractUnitPriceCmdImpl extends
      GetContractUnitPriceCmdImpl {

  private static final String CLASS_NAME =
   ExtGetContractUnitPriceCmdImpl.class.getName();
  private static Logger logger = Logger.getLogger(CLASS_NAME);

  public void performExecute() throws ECException {
     final String methodName = "performExecute";

      if (logger.isLoggable(Level.FINER))
         logger.entering( CLASS_NAME, methodName,
               "userId= " + getCommandContext().getUserId());

      try {
         super.performExecute();
         boolean a = someOtherFuntion();
         if (logger.isLoggable(Level.FINE))
            logger.logp( Level.FINE, CLASS_NAME, methodName,
               "someOtherFunction returned " + a );
      } catch ( Exception e ) {
         logger.logp(Level.SEVERE, CLASS_NAME, methodName,
                     e.getClass().getName() + "Your Logging Message", e );
      }

      logger.exiting( CLASS_NAME, methodName );
   }
}

剖析范例

本节将分解上面的示例代码,并分别说明每个部分。

  1. 首先,包括必要的导入:
    import java.util.logging.Level;
    import java.util.logging.Logger;
  2. 接下来,您需要定义记录器。 选择记录器的任何名称。 在这种情况下,通常,定义记录器以匹配完全限定的类名。 这定义了一个隐式层次结构,该层次结构使您可以在不同的包或类级别启用日志记录(稍后将对此进行详细介绍)。 另外,在下面的示例中,我们遵循WebSphere Commerce标准,即为将由日志API使用的类名称创建最终字符串。
    private static final String CLASS_NAME = 
       ExtGetContractUnitPriceCmdImpl.class.getName();
    private static Logger logger = Logger.getLogger(CLASS_NAME);

    按功能对记录器进行分组也是一种有效的做法。 在这种情况下,您将创建与该类提供的功能匹配的记录器,例如库存,订单或付款。
  3. 定义一个包含方法名称的字符串是一种常见的做法,因为它在方法内部使用。 下一行logger.entering()是一种方便的方法,用于使用FINER级别将条目记录到该方法中。 我们建议使用isLoggable()因为通过不连接字符串或在未记录消息的情况下创建对象,可以降低跟踪的占用空间。
    final String methodName = "performExecute";
    if (logger.isLoggable(Level.FINER))logger.entering( CLASS_NAME, methodName, 
    "userId= " + getCommandContext().getUserId());
  4. 如果日志记录设置为FINE或更高,则生成日志条目。 记录器对象提供不同的签名。 在这种情况下,打印消息起源的类和方法名称。
    if (logger.isLoggable(Level.FINE))
    logger.logp( Level.FINE, CLASS_NAME, methodName, 
    "someOtherFunction returned " + a );
  5. 最后,记录方法出口。 如果您记录了输入事件,则建议这样做。 或者,您还可以包含一条消息,例如方法的结果或要返回的值。
    logger.exiting( CLASS_NAME, methodName );

使用适当的日志记录级别

记录消息时,请特别注意消息将使用的记录级别。 您可以使用以下任一级别记录消息:

  • 严重
  • 警告
  • 信息
  • 配置
  • 精细
  • 罚款
  • 最好的

推荐建议

本节重点介绍一些最佳实践,以帮助您使用自定义代码中的日志记录功能,并讨论了可以避免的陷阱。

  • 避免使用“全有或全无”方法,在该方法中,您要么在应用程序中获得完整的跟踪,要么根本没有任何消息。
  • INFO级别不用于调试目的,通常默认情况下处于启用状态。 请谨慎使用此级别,因为过多的日志记录会影响应用程序的性能。 例如,对于在商店前面执行的命令(例如OrderItemAdd),请不要使用INFO级别,因为它们会使消息充满跟踪日志。
  • 提供了三种不同的跟踪级别:FINE,FINER,FINEST。 决定使用哪个级别的一种方法是在启用跟踪时考虑它们的影响。 例如,您可以组织您的消息,以便在生产中启用FINE,而不会显着影响性能。 但是,仅在发生特定情况时才启用FINEST,因为对性能的负面影响非常明显。 如果使用输入或现有便捷方法,则使用FINER记录消息。
  • 如果未记录日志级别,则向应用程序添加日志的影响很小。 为此,请记住在需要创建对象来记录条目时使用Logger.isLoggable(Level)方法。 最常见的情况是连接字符串,然后将这些字符串作为参数传递给记录器。
  • 始终使用SEVERE或WARNING记录错误和异常。 这样可以确保在以INFO级别运行时记录错误。 如果需要传播异常,请使用WebSphere Commerce Command错误处理框架 ,该框架创建国际化的消息并指定错误视图。
  • 确保跟踪消息在方法中唯一,以帮助区分代码流。
  • 对进入和退出日志记录使用跟踪级别(便捷方法(例如logger.entering())使用FINER logger.entering()) 。 在代码中做出决定时,也请使用跟踪级别。 例如,指示在“ if”语句中选择了哪个代码路径。
  • 所有条目跟踪都需要相应的退出消息。 确保覆盖所有出口。
  • 记录所有输入参数以及Entry跟踪,并记录返回参数和Exit跟踪。

WebSphere Application Server中的跟踪

现在您的代码实现了日志记录,让我们看看如何在Application Server中启用和管理跟踪。

使用WebSphere管理控制台

使用WebSphere管理控制台,可以查看和编辑跟踪规范。 控制台显示两个选项卡,“配置”和“运行时”。 配置跟踪在启动期间生效,并且需要重新启动。 运行时跟踪在正在运行的服务器上设置新的跟踪。 下次重新启动服务器时,服务器将返回到“配置”选项卡下定义的跟踪规范。 图1显示了管理控制台的“运行时”选项卡。

图1.管理控制台的“运行时”选项卡
图1.管理控制台的“运行时”选项卡

有关如何启用跟踪的更多信息,请参阅以下WebSphere Application Server信息中心链接:

使用wsadmin工具指定新的跟踪

另外,WebSphere还允许您使用wsadmin工具通过脚本控制跟踪。 当您无权访问管理控制台或要在某些事件期间自动跟踪时,这是最佳选择。

  1. 遵循WebSphere Application Server信息中心中的指示信息来启动wsadmin工具。
  2. 确保wsadmin实用程序已连接到WebSphere Commerce Server。 wsadmin实用程序启动时,将打印出与其连接的服务器。
    [root@idefix bin]# ./wsadmin.sh
    WASX7209I: Connected to process "server1" on node 
    WC_demo_node using SOAP connector;
    The type of process is: UnManagedProcess
    WASX7029I: For help, enter: "$Help help"wsadmin>
  3. 创建对TraceService对象的引用:
    set traceServ [$AdminControl completeObjectName type=TraceService,*]
  4. 打印并保存当前跟踪规范:
    set spec [$AdminControl getAttribute $traceServ traceSpecification]
    puts "Current runtime trace specification: $spec"
  5. 通过发出以下命令来指定新的跟踪规范。 新跟踪将立即生效。
    $AdminControl setAttribute $traceServ traceSpecification
    com.ibm.websphere.commerce.WC_ORDER=all:com.mycompany.
    orders=all
  6. 更改跟踪规范后,将在SystemOut.log中打印以下行,并将跟踪写入跟踪文件:
    [1/10/08 10:49:22:500 EST] 0000002e ManagerAdmin ITRAS0018I: The 
    trace state has changed. The new trace state is *=info:com.ibm.
    websphere.commerce.WC_ORDER=all:com.mycompany.orders=all.
  7. 重现该问题。
  8. 要恢复原始跟踪规范,请发出以下命令:
    $AdminControl setAttribute $traceServ traceSpecification $spec 
    puts "Current runtime trace specification: $spec"
  9. 通过调用quit命令退出wsadmin实用程序。

使用JACL脚本启用跟踪

在下载部分,您可以在code_sample.zip文件中找到tracespec.jacl脚本。 该脚本可帮助您自动执行上述步骤。

踪迹在哪里?

您的跟踪将转到两个不同的文件,SystemOut.log和trace.log,与使用WebSphere Application Server或WebSphere Commerce跟踪时相同。 您可以在以下位置找到跟踪日志:

记录 开发者 运行

SystemOut.log

WCToolkitEE60 \ wasprofile \ logs \ server1

AppServer \ profiles \ profileName \ logs \ server1 \

trace.log

WCToolkitEE60 \ wasprofile \ logs \ server1

AppServer \ profiles \ profileName \ logs \ server1 \

根据记录消息时使用的级别,这些文件将写入以下日志:

水平 SystemOut.log SystemErr.log trace.log

严重

没有

警告

没有

信息

没有

配置

没有

精细

一个

没有

罚款

一个

没有

最好的

一个

没有

创建跟踪规范

如果使用管理控制台,则在选择其他组件时,控制台将为您编写跟踪规范。 或者,您也可以在文本区域中输入跟踪。 要指定跟踪,您需要输入记录器的名称,后跟等号和所需的记录级别。 您可以通过用冒号(:)隔开来指定多个组件。 图2显示了控制台中显示的记录器树。

图2.在WebSphere管理控制台中创建跟踪规范
图2.在WebSphere管理控制台中创建跟踪规范

如果记录器的名称与Java包和类相对应,则可以使用星号(*)作为通配符,以指示您要跟踪以特定名称开头的所有组件。 例如,通过设置以下跟踪,可以对公司进行的所有WebSphere Commerce定制启用完全跟踪:

com.mycompany.commerce.*=all

启用某个级别的日志记录时,还将启用其之上的所有级别。 以下列表是从java.util.logging.Level中提取的:

类型 水平

残障人士

MAX_VALUE

错误

严重

1000

一个

警告

900

信息

信息

800

一个

配置

700

追踪

精细

500

一个

罚款

400

一个

最好的

300

一个

所有

MIN_VALUE

例如,如果将日志记录设置为INFO,则还会记录使用SEVERE和WARNING的消息。

跟踪WebSphere Commerce组件

WebSphere Commerce提供了许多跟踪组件 ,您可以为其启用跟踪。 与上面提供的示例相反,WebSphere Commerce没有与完全限定的类名匹配的记录器。 相反,WebSphere Commerce记录器按功能分组。 例如,用于管理订单的命令使用com.ibm.websphere.commerce.WC_ORDER,合同com.ibm.websphere.commerce.WC_CONTRACT等。 例如,要为运行时引擎和调度程序启用跟踪,请使用以下字符串。

com.ibm.websphere.commerce.WC_ORDER=all:com.ibm.websphere.
commerce.WC_SCHEDULER=all

避免这些做法:

  • 切勿使用WebSphere Commerce组件记录来自定制代码的消息。
  • 不要使用不推荐使用的WC_EXTERN。 相反,请始终定义自己的记录器。

结论

使用Java Logging框架实现日志记录和跟踪是一个简单的过程。 本文表明,遵循一些最佳实践并使用跟踪工具可以显着提高代码的可维护性。


翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/0802_voldman/0802_voldman.html

websphere 日志

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值