中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
【风】的ACE笔记(1)-日志消息管理
作者:未知 时间:2005-07-27 23:18 出处:CSDN 责编:chinaitpower
              摘要:【风】的ACE笔记(1)-日志消息管理

这是我的第一篇ACE文章,希望大家能够喜欢
------------------------
ACE提供了非常灵活、方便的日志管理和消息输出功能,下面就一些简单和直接的功能做一个简单介绍

ACE_DEBUG  常规的一些输出消息  
ACE_ERROR  会提供程序出错的一些低级消息

2个宏的用法上是一致的
  ACE_DEBUG(错误级别,"格式串",变量1...变量N)
  
  其中部分错误级别系统定义如下:
   LM_SHUTDOWN = 01,系统死机级别
    LM_TRACE = 02,跟踪级别
    LM_DEBUG = 04,DEBUG级别
    LM_INFO = 010,常规信息级别
    LM_NOTICE = 020,注意级别
    LM_WARNING = 040,警告级别
    LM_STARTUP = 0100,启动级别
    LM_ERROR = 0200,错误级别
    LM_CRITICAL = 0400,危急级别
    LM_ALERT = 01000,可修复的警告级别
    LM_EMERGENCY = 02000,全局警告级别
  部分格式串使用如下:
   跟c 中printf使用类似
   %n-表当前程序名称
   %t-表当前线程号
   %p-表指针
   %s-字符串
 
ACE通过全局单体实例 ACE_LOG_MSG 管理和控制输出,我们可以利用这个实例把输出重定向到文件,也可以重定向到标志输出
其中还可以控制什么级别的消息可被输出,简单使用如下:

  ACE_LOG_MSG->set_flags (ACE_Log_Msg::STDERR);
  设置输出到标准错误输出
  ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR);
  关闭输出到标志错误输出
  ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM);
  ofstream myostream (filename, ios::out | ios::trunc);
  ACE_LOG_MSG->msg_ostream (&myostream);
  设置输出到文件
  u_long priority_mask =ACE_LOG_MSG->priority_mask (ACE_Log_Msg::PROCESS);
  ACE_SET_BITS (priority_mask,LM_DEBUG |LM_INFO);
  设置只记录LM_DEBUG 或者LM_INFO级别的消息
  ACE_CLR_BITS (priority_mask,LM_DEBUG | LM_INFO);                   
  清除设置条件
ACE_LOG_MSG还有一个非常有意思的功能,能以16进制方式输出内存中的块 ,简单使用如下: 
      ACE_LOG_MSG->log_hexdump (LM_DEBUG,
                                (char *) array,
                                sizeof array);

下面附上一个使用例子,例子来源于ACE包中的例子程序
#include "ace/OS_main.h"
#include "ace/streams.h"
#include "ace/Log_Msg.h"
int
ACE_TMAIN (int, ACE_TCHAR *[])
{
  // 这个消息将输出到STDERR
  ACE_DEBUG ((LM_DEBUG,
              "first message\n"));
  ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR);
  // 这个消息将不被输出,因为标志位清除了
  ACE_DEBUG ((LM_DEBUG,
              "second message\n"));
  ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM);
  //这个消息将不被输出,因为流的实体尚未定义
  ACE_DEBUG ((LM_DEBUG,
              "third message\n"));
  //建立一个流实体,指向d:\output.log文件
  const char *filename = "d:\\output.log";
  ofstream myostream (filename, ios::out | ios::trunc);
  if (myostream.bad ())
    return 1;
  // 设置输出到流
  ACE_LOG_MSG->msg_ostream (&myostream);
  //这个消息将输出到文件中
  ACE_DEBUG ((LM_DEBUG,
              "fourth message\n"));
  ACE_LOG_MSG->set_flags (ACE_Log_Msg::STDERR);
  // 这个消息将同时输出到文件和STDERR
  ACE_DEBUG ((LM_DEBUG,
              "fifth message\n"));
  return 0;
}
 
好了,上面就是ACE日记管理功能中的九牛一毛,还有更多的功能,
我将会在ACE技巧和ACE应用文章写出;
如通过命令行参数来配置日志参数输出、怎么通过配置文件来配置日志 等文章
----------
我是一名ACE的初学者,我不会因旁人的失败和抱怨而动摇,我初生牛犊不怕虎


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有