Blame plugins/ipmidirect/ipmi_log.h

Packit db01ca
/*
Packit db01ca
 *
Packit db01ca
 * Copyright (c) 2003,2004 by FORCE Computers.
Packit db01ca
 *
Packit db01ca
 * This program is distributed in the hope that it will be useful,
Packit db01ca
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit db01ca
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This
Packit db01ca
 * file and program are licensed under a BSD style license.  See
Packit db01ca
 * the Copying file included with the OpenHPI distribution for
Packit db01ca
 * full licensing terms.
Packit db01ca
 *
Packit db01ca
 * Authors:
Packit db01ca
 *     Thomas Kanngieser <thomas.kanngieser@fci.com>
Packit db01ca
 */
Packit db01ca
Packit db01ca
#ifndef dIpmiLog_h
Packit db01ca
#define dIpmiLog_h
Packit db01ca
Packit db01ca
Packit db01ca
#ifndef dThread_h
Packit db01ca
#include "thread.h"
Packit db01ca
#endif
Packit db01ca
Packit db01ca
#include <stdio.h>
Packit db01ca
#include <assert.h>
Packit db01ca
Packit db01ca
Packit db01ca
#define dDefaultLogfile "log"
Packit db01ca
Packit db01ca
/* log file properties */
Packit db01ca
#define dIpmiLogPropNone 0
Packit db01ca
#define dIpmiLogStdOut   1 // use stdout
Packit db01ca
#define dIpmiLogStdErr   2 // use stderr
Packit db01ca
#define dIpmiLogLogFile  4 // use a log file
Packit db01ca
#define dIpmiLogFile     8 // use a file
Packit db01ca
Packit db01ca
Packit db01ca
class cIpmiLog
Packit db01ca
{
Packit db01ca
protected:
Packit db01ca
  cThreadLock m_lock;
Packit db01ca
  int         m_lock_count;
Packit db01ca
  int         m_open_count;
Packit db01ca
Packit db01ca
  bool  m_hex;  // true => print int in hex
Packit db01ca
  bool  m_time; // with time
Packit db01ca
  bool  m_recursive;
Packit db01ca
  bool  m_std_out;
Packit db01ca
  bool  m_std_err;
Packit db01ca
Packit db01ca
  bool  m_nl;
Packit db01ca
Packit db01ca
  FILE *m_fd;
Packit db01ca
Packit db01ca
  void Start();
Packit db01ca
  void Output( const char *str );
Packit db01ca
Packit db01ca
public:
Packit db01ca
  cIpmiLog();
Packit db01ca
  virtual ~cIpmiLog();
Packit db01ca
Packit db01ca
  bool Open( int properties, const char *filename = "", int max_log_files = 1 );
Packit db01ca
  void Close();
Packit db01ca
Packit db01ca
  void Lock()
Packit db01ca
  {
Packit db01ca
    m_lock.Lock();
Packit db01ca
    m_lock_count++;
Packit db01ca
  }
Packit db01ca
Packit db01ca
  void Unlock()
Packit db01ca
  {
Packit db01ca
    m_lock_count--;
Packit db01ca
    assert( m_lock_count >= 0 );
Packit db01ca
    m_lock.Unlock();
Packit db01ca
  }
Packit db01ca
Packit db01ca
  void Hex( bool hex = true ) { m_hex = hex; }
Packit db01ca
  bool IsHex()       { return m_hex;  }
Packit db01ca
Packit db01ca
  void Time( bool t = true ) { m_time = t; }
Packit db01ca
  bool WithTime()    { return m_time; }
Packit db01ca
Packit db01ca
  void Recursive( bool r ) { m_recursive = true; }
Packit db01ca
  bool IsRecursive() { return m_recursive; }
Packit db01ca
Packit db01ca
  cIpmiLog &operator<<( bool b );
Packit db01ca
  cIpmiLog &operator<<( unsigned char c );
Packit db01ca
  cIpmiLog &operator<<( int i );
Packit db01ca
  cIpmiLog &operator<<( unsigned int i );
Packit db01ca
  cIpmiLog &operator<<( double d );
Packit db01ca
  cIpmiLog &operator<<( const char *str );
Packit db01ca
Packit db01ca
  void Log( const char *fmt, ... );
Packit db01ca
  void Hex( const unsigned char *data, int size );
Packit db01ca
Packit db01ca
  void Begin( const char *section, const char *name );
Packit db01ca
  void End();
Packit db01ca
  cIpmiLog &Entry( const char *entry );
Packit db01ca
};
Packit db01ca
Packit db01ca
Packit db01ca
extern cIpmiLog stdlog;
Packit db01ca
Packit db01ca
Packit db01ca
#endif