麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Web Service Appender 管理日志紀錄

2019-11-18 12:50:32
字體:
來源:轉載
供稿:網友

  引言
  
  你可以使用 Web Service Appender 將日志集中到某一位置,同時,Web Service Appender 答應治理者監控、開發者調試面向服務架構(SOA)環境里可能存在的任何問題。Web Service Appender 是一種擴展 java 類,它由 Log4j 的 Appender 類擴展而來。
  
  從定義上看,SOA 是一種彼此可以互相通信的服務集合,但這些服務的內容是各自獨立的,每一類服務均不受其它服務內容或服務狀態的影響,并且這些服務都工作在分布式的系統架構里。在 SOA 中,Web 服務通常被用來在給定事務中處理請求,這些請求可以是遺留代碼、企業級 Java Beans(EJBs) 的封裝,也可以是 Java 類的封裝,使用一種可以將日志信息聚集在中心位置里的日志紀錄方法,能幫助您隔離缺陷和問題,并能讓你更好的理解邏輯流的處理。
  
  將特定模塊或服務的日志消息紀錄到一個中心位置的機制,可以把可能潛在的問題和缺陷降低到最小。
  
  本文對 Log4j 的功能進行了大體的概述,并介紹了如何編寫自定義的 Log4j Appender,這類非凡的 Appender 將日志消息編到一種特定的 Web 服務。
  
  Log4j 快速入門
  
  Log4j 是一種開放源代碼的日志庫,它已被發展為 Apache Software Foundation 日志服務項目的子項目。該庫是以 IBM 在 90 年代末開發的日志庫為基礎的,第一版發布于 1999 年。現在它在開放源代碼團體得到了廣泛使用,它的體系是圍繞以下三個主要概念構建起來的:
  
  Logger
  
  Appender
  
  Layout
  
  這些概念可以讓您根據消息類型、消息優先級來紀錄消息,您可以控制消息在何處結束及消息如何格式化。 Logger 是應用程序首先調用以初始化消息紀錄的對象。當把某一消息傳遞給日志時,logger 會生成 LoggingEvent,對消息進行封裝。之后,Logger 對象將 LoggingEvent 傳遞給與之關聯的 Appender。
  
  Appender 將 LoggingEvent 所包含的消息發送給指定的目標輸出文件。所謂指定的文件,大多數情況下,是 Log4 屬性文件。一些 Appender 存在于 Log4j 中。您也可以擴展 Appender,使之支持其它的目標文件,比如 xml 文件、控制臺等等。
  
  在 Log4j 里, LoggingEvent 被賦予某一級別,以表明它們的優先級。缺省的級別包括如下幾種:
  
  OFF:可能是最高的級別,它是用來關閉日志紀錄的
  
  FATAL:指出現了非常嚴重的錯誤事件,這些錯誤可能會導致應用程序異常中止
  
  ERROR:指雖有錯誤,但仍答應應用程序繼續運行
  
  WARN:指運行環境潛藏著危害
  
  INFO:指報告信息,這些信息在粗粒度級別上突出顯示應用程序的進程
  
  DEBUG:指細粒度信息事件,細粒度信息事件對于應用程序的調試是最有用的
  
  ALL:可能是最低的級別,其目的是打開所有日志記錄
  
  Logger 和 Appender 也被賦予上述的某一級別,并且僅執行等于或高于它們自身的級別的日志請求。比如,假如一個 Appender 屬于 INFO 級別,而日志請求屬于 DEBUG,那么 Appender 將不會為給定的日志事件寫消息。
  
  客戶端組件
  
  客戶端 log4j.PRoperties 文件
  
  客戶端 log4j.properties 文件是一種標準文件,它包含服務或模塊使用的所有 Appender。Web Service Appender 要求有一個端點(endpoint) 屬性以指定所使用的日志服務。
  
  清單 1 描述了使用 WebServiceAppender 所必需的 Web 服務客戶端 Log4j 屬性。 黑體顯示的文本指明了將訪問 WebServiceAppender 服務器端的 Appender。屬性文件是使用 Log4j 的基本需求,它可以讓您配置應用程序以使用多個 Appender 以及 logging severity。一旦應用程序進入運行狀態或潛在的問題得到解決,您就可以輕松地修改屬性文件。
  
  清單 1:客戶端 Log4j 的屬性文件
  
  #set the level of the root logger log
  4j.rootLogger = INFO, CONSOLE
  #set own loggerlog
  4j.logger.com.carmelouria.logging.test=CONSOLElog
  4j.appender.CONSOLE=com.carmelouria.logging.WebServiceAppenderlog
  4j.appender.CONSOLE.endpoint=
  http://localhost:9080/log
  4j/services/LogAppenderServicelog
  4j.appender.CONSOLE.layout=org.apache.log
  4j.PatternLayoutlog
  4j.appender.CONSOLE.layout.ConversionPattern=%p [%t] %c{2} (%M:%L) :: %m%n
  
  服務器的 Log4j.properties 文件
  
  服務器 Log4j.properties 文件被用來關聯客戶端 Log4j 屬性文件,它指定了日志的級別及服務器將如何輸出消息。對于支持 Log4j 的應用程序,您可以定義多個 appender。當然,這些 appender 既可以用于客戶端服務,也可以用于服務模塊。
  
  清單 2 描述了一份典型的 Log4j 屬性文件,服務器端的 WebServiceAppender 使用缺省的 Log4j Appenders。服務器端的 Appender 可以潛在的調用另一個 WebServiceAppender,并將日志信息鏈接起來:
  
  清單 2:服務器端的 Log4j 屬性文件
  
  #set the level of the root logger log
  4j.rootLogger = INFO, FILE
  #set own loggerlog
  4j.appender.FILE=org.apache.log
  4j.RollingFileAppenderlog
  4j.appender.FILE.file=c:/temp/log
  4j/server/server.loglog
  4j.appender.FILE.layout=org.apache.log
  4j.PatternLayoutlog
  4j.appender.FILE.layout.ConversionPattern=%p [%t] %c{2} (%M:%L) :: %m%n
  
  客戶端程序測試示例:
  
  這個客戶端程序示例是無格式普通 Java 對象(POJO),它記錄了一條消息,并被配置為使用 Web Service Appender 來處理消息。清單 3 顯示了這個示例:
  
  清單 3:客戶端應用程序使用 WebServiceAppender 的示例
  
  package com.carmelouria.logging.test;
  import org.apache.log4j.Level;
  import org.apache.log4j.Logger;
  import org.apache.log4j.PropertyConfigurator;
  /**
  * @author Carmelo Uria
  *
  */public class LoggingSample
  {
  private static Logger logger = Logger.getLogger(LoggingSample.class.getName());
  /**
  *
  */
  public LoggingSample()
  {
  super();
  PropertyConfigurator.configure("c:/temp/log4j.properties");
  logger.log(Level.INFO, "LoggingSample instantiation...");
  System.out.println("finished...");
  }
  public static void main(String[] args)
  {
  LoggingSample sample = new LoggingSample();
  }
  }
  
  WebServiceAppender
  
  WebServiceAppender 是必需的,它可以將消息發送到指定的 Web 服務。WebServiceAppender 繼續了 org.log4j.Appender,它答應使用 log4.properties,并成為有效的 Log4j Appender。
  
  WebServiceAppender 使用基于 XML 的遠程過程調用 (JAX-RPC) 的 Java API,來將消息發送到服務器。JAX-RPC 是一種規范,它描述使用 RPC 和 XML 構建 Web 服務和 Web 服務客戶端的應用編程接口 (API) 和約定。JAX-RPC 又被稱為 JSR 101。
  
  LoggingEvent 通過 SOAPElement 被分割并表示為 XML。javax.xml.soap.SOAPElement 接口意味著服務端點接口將包含一個參數,或返回 javax.xml.soap.SOAPElement 類型的值,以對應于 schema 中每個使用的地方。從本質上看,它是 XML 參數的封裝,且沒有相應的序列化/反序列化 JAVA 類。例如,一旦客戶請求記錄一個消息,就會創建一個 LoggEvent 對象,然后傳送給 Appender。在這種情況下,Appender 就是 WebServiceAppender。Appender 檢索事件,并在解析事件中的信息。一些額外的信息會被加入,如主機名稱,這樣您就知道這些消息來自哪個系統。同時,append 方法也將消息轉換為 SOAPElement,這樣就可以通過 executeWebService 方法將消息傳遞給 Web 服務。使用 SOAPElement 充分考慮了 WebServiceAppender 未來版本的可擴展性問題。
  
  清單4:執行 WebServiceAppender 服務的 Append 方法
  
  protected void append(LoggingEvent event)
  {
  // create Web Service client using endpoint
  if (endpoint == null)
  {
  System.out.println("no endpoint set. Check configuration file");
  System.out.println("[" + hostname + "] " + this.layout.format(event));
  return;
  }
  executeWebService(event);
  }
  private void executeWebService(LoggingEvent event)
  {
  SoapClient client = new SoapClient();
  URL endPoint = null;
  try
  {
  endPoint = new URL(getendpoint());
  }
  catch (MalformedURLException e1)
  {
  e1.printStackTrace();
  }
  String nameSpace = "http://ejb.logging.carmelouria.com";
  QName serviceName = new QName(nameSpace, "LogAppenderServiceService");
  QName Operation = new QName(nameSpace, "log");
  QName port = new QName(nameSpace, "LogAppenderService");
  Parameter message =
  new Parameter("log", Constants.XSD_ANY, SOAPElement.class, ParameterMode.IN);
  try
  {
  /

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费一级特黄欧美大片勹久久网 | 日韩av片在线免费观看 | 亚洲一区二区三区精品在线观看 | 久久精品一区二区三区四区五区 | 亚洲精久久 | 黄污网站在线观看 | 羞羞的动漫在线观看 | 国产一区二区三区影视 | 精品在线观看一区 | 久久久久久久久久久久久久av | 国产免费一区二区三区网站免费 | 一级做受大片免费视频 | 欧美成人一区二区三区电影 | 亚洲国产精品久久久 | 91精品国产777在线观看 | www.91sao| 成片免费观看视频大全 | 91美女福利视频 | 成人福利网 | 在线免费观看欧美 | 日韩毛片在线看 | www.com香蕉| 成人爱爱电影 | 欧美精品一区二区三区在线播放 | 黄色免费大片 | 原来神马影院手机版免费 | 日本欧美一区二区 | 久国产 | 国产精品v片在线观看不卡 成人一区二区三区在线 | 国产精品午夜在线 | 欧美亚洲国产一区 | 国产在线观看免费视频软件 | 国产精品久久久久久久久久久久久久久 | 国产成人自拍视频在线观看 | 看黄在线观看 | 黄色午夜剧场 | 精品在线观看一区 | 美国一级黄色毛片 | 国产精品伊人久久 | 亚洲精品有限 | 欧美成人精品欧美一级 |