From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> --- daemon/libvirtd-config.c | 2 +- daemon/libvirtd.h | 2 +- daemon/remote.c | 2 +- daemon/stream.c | 2 +- src/Makefile.am | 2 +- src/conf/domain_audit.c | 2 +- src/conf/domain_conf.c | 2 +- src/conf/domain_event.c | 2 +- src/conf/nwfilter_params.c | 2 +- src/conf/secret_conf.c | 2 +- src/conf/snapshot_conf.c | 2 +- src/conf/virconsole.c | 2 +- src/cpu/cpu.c | 2 +- src/cpu/cpu_powerpc.c | 2 +- src/cpu/cpu_x86.c | 2 +- src/datatypes.c | 2 +- src/driver.c | 2 +- src/esx/esx_device_monitor.c | 2 +- src/esx/esx_driver.c | 2 +- src/esx/esx_interface_driver.c | 2 +- src/esx/esx_network_driver.c | 2 +- src/esx/esx_nwfilter_driver.c | 2 +- src/esx/esx_secret_driver.c | 2 +- src/esx/esx_storage_backend_iscsi.c | 2 +- src/esx/esx_storage_backend_vmfs.c | 2 +- src/esx/esx_util.c | 2 +- src/esx/esx_vi.c | 2 +- src/esx/esx_vi_methods.c | 2 +- src/esx/esx_vi_types.c | 2 +- src/fdstream.c | 2 +- src/hyperv/hyperv_device_monitor.c | 2 +- src/hyperv/hyperv_driver.c | 2 +- src/hyperv/hyperv_interface_driver.c | 2 +- src/hyperv/hyperv_network_driver.c | 2 +- src/hyperv/hyperv_nwfilter_driver.c | 2 +- src/hyperv/hyperv_secret_driver.c | 2 +- src/hyperv/hyperv_storage_driver.c | 2 +- src/hyperv/hyperv_util.c | 2 +- src/hyperv/hyperv_wmi.c | 2 +- src/interface/interface_backend_netcf.c | 2 +- src/libvirt-qemu.c | 2 +- src/libvirt.c | 2 +- src/libxl/libxl_conf.c | 2 +- src/libxl/libxl_driver.c | 2 +- src/locking/domain_lock.c | 2 +- src/locking/lock_daemon.c | 2 +- src/locking/lock_daemon_config.c | 2 +- src/locking/lock_daemon_dispatch.c | 2 +- src/locking/lock_driver_lockd.c | 2 +- src/locking/lock_driver_nop.c | 2 +- src/locking/lock_driver_sanlock.c | 2 +- src/locking/lock_manager.c | 2 +- src/lxc/lxc_cgroup.c | 2 +- src/lxc/lxc_conf.c | 2 +- src/lxc/lxc_container.c | 2 +- src/lxc/lxc_controller.c | 2 +- src/lxc/lxc_domain.c | 2 +- src/lxc/lxc_driver.c | 2 +- src/lxc/lxc_fuse.c | 2 +- src/lxc/lxc_monitor.c | 2 +- src/lxc/lxc_process.c | 2 +- src/network/bridge_driver.c | 2 +- src/node_device/node_device_driver.c | 2 +- src/node_device/node_device_hal.c | 2 +- src/node_device/node_device_linux_sysfs.c | 2 +- src/node_device/node_device_udev.c | 2 +- src/nodeinfo.c | 2 +- src/nwfilter/nwfilter_dhcpsnoop.c | 2 +- src/nwfilter/nwfilter_driver.c | 2 +- src/nwfilter/nwfilter_ebiptables_driver.c | 2 +- src/nwfilter/nwfilter_gentech_driver.c | 2 +- src/nwfilter/nwfilter_learnipaddr.c | 2 +- src/openvz/openvz_driver.c | 2 +- src/parallels/parallels_driver.c | 2 +- src/phyp/phyp_driver.c | 2 +- src/qemu/qemu_agent.c | 2 +- src/qemu/qemu_bridge_filter.c | 2 +- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_cgroup.c | 2 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_conf.c | 2 +- src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_hostdev.c | 2 +- src/qemu/qemu_hotplug.c | 2 +- src/qemu/qemu_migration.c | 2 +- src/qemu/qemu_monitor.c | 2 +- src/qemu/qemu_monitor_json.c | 2 +- src/qemu/qemu_monitor_text.c | 2 +- src/qemu/qemu_process.c | 2 +- src/remote/remote_driver.c | 2 +- src/rpc/virkeepalive.c | 2 +- src/rpc/virnetclient.c | 2 +- src/rpc/virnetclientprogram.c | 2 +- src/rpc/virnetclientstream.c | 2 +- src/rpc/virnetmessage.c | 2 +- src/rpc/virnetsaslcontext.c | 2 +- src/rpc/virnetserver.c | 2 +- src/rpc/virnetserverclient.c | 2 +- src/rpc/virnetservermdns.c | 2 +- src/rpc/virnetserverprogram.c | 2 +- src/rpc/virnetsocket.c | 2 +- src/rpc/virnetsshsession.c | 2 +- src/rpc/virnettlscontext.c | 2 +- src/secret/secret_driver.c | 2 +- src/security/security_apparmor.c | 2 +- src/security/security_dac.c | 2 +- src/security/security_driver.c | 2 +- src/security/security_manager.c | 2 +- src/security/security_selinux.c | 2 +- src/storage/storage_backend.c | 2 +- src/storage/storage_backend_disk.c | 2 +- src/storage/storage_backend_fs.c | 2 +- src/storage/storage_backend_iscsi.c | 2 +- src/storage/storage_backend_logical.c | 2 +- src/storage/storage_backend_mpath.c | 2 +- src/storage/storage_backend_rbd.c | 2 +- src/storage/storage_backend_scsi.c | 2 +- src/storage/storage_backend_sheepdog.c | 2 +- src/storage/storage_driver.c | 2 +- src/test/test_driver.c | 2 +- src/uml/uml_conf.c | 2 +- src/uml/uml_driver.c | 2 +- src/util/logging.c | 1590 ----------------------------- src/util/logging.h | 191 ---- src/util/memory.c | 2 +- src/util/pci.c | 2 +- src/util/storage_file.c | 2 +- src/util/sysinfo.c | 2 +- src/util/util.c | 2 +- src/util/uuid.c | 2 +- src/util/viraudit.c | 2 +- src/util/virauth.c | 2 +- src/util/virauthconfig.c | 2 +- src/util/vircgroup.c | 2 +- src/util/vircommand.c | 2 +- src/util/virconf.c | 2 +- src/util/virdbus.c | 2 +- src/util/virdnsmasq.c | 2 +- src/util/virebtables.c | 2 +- src/util/virevent.c | 2 +- src/util/vireventpoll.c | 2 +- src/util/virfile.c | 2 +- src/util/virhash.c | 2 +- src/util/virhooks.c | 2 +- src/util/viriptables.c | 2 +- src/util/virjson.c | 2 +- src/util/virkeyfile.c | 2 +- src/util/virlockspace.c | 2 +- src/util/virlog.c | 1590 +++++++++++++++++++++++++++++ src/util/virlog.h | 191 ++++ src/util/virnetdev.c | 2 +- src/util/virnetdevmacvlan.c | 2 +- src/util/virnetdevtap.c | 2 +- src/util/virnetdevveth.c | 2 +- src/util/virnetdevvportprofile.c | 2 +- src/util/virnetlink.c | 2 +- src/util/virnodesuspend.c | 2 +- src/util/virobject.c | 2 +- src/util/virpidfile.c | 2 +- src/util/virprocess.c | 2 +- src/util/virrandom.c | 2 +- src/util/virterror.c | 2 +- src/util/virusb.c | 2 +- src/vbox/vbox_MSCOMGlue.c | 2 +- src/vbox/vbox_XPCOMCGlue.c | 2 +- src/vbox/vbox_driver.c | 2 +- src/vbox/vbox_tmpl.c | 2 +- src/vmx/vmx.c | 2 +- src/xen/xen_driver.c | 2 +- src/xen/xen_hypervisor.c | 2 +- src/xen/xen_inotify.c | 2 +- src/xen/xend_internal.c | 2 +- src/xen/xm_internal.c | 2 +- src/xen/xs_internal.c | 2 +- src/xenapi/xenapi_utils.c | 2 +- src/xenxs/xen_sxpr.c | 2 +- tests/eventtest.c | 2 +- tests/libvirtdconftest.c | 2 +- tests/qemumonitortestutils.c | 2 +- tests/securityselinuxtest.c | 2 +- tests/sockettest.c | 2 +- tests/testutils.c | 2 +- tests/virauthconfigtest.c | 2 +- tests/virdrivermoduletest.c | 2 +- tests/virhashtest.c | 2 +- tests/virkeyfiletest.c | 2 +- tests/virlockspacetest.c | 2 +- tests/virnetmessagetest.c | 2 +- tests/virnetsockettest.c | 2 +- tests/virnettlscontexttest.c | 2 +- tests/virstringtest.c | 2 +- tests/virtimetest.c | 2 +- tests/viruritest.c | 2 +- tools/console.c | 2 +- 195 files changed, 1972 insertions(+), 1972 deletions(-) delete mode 100644 src/util/logging.c delete mode 100644 src/util/logging.h create mode 100644 src/util/virlog.c create mode 100644 src/util/virlog.h diff --git a/daemon/libvirtd-config.c b/daemon/libvirtd-config.c index 0ca185c..f61f08d 100644 --- a/daemon/libvirtd-config.c +++ b/daemon/libvirtd-config.c @@ -27,7 +27,7 @@ #include "virconf.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "rpc/virnetserver.h" #include "configmake.h" #include "remote/remote_protocol.h" diff --git a/daemon/libvirtd.h b/daemon/libvirtd.h index e389151..b04cc71 100644 --- a/daemon/libvirtd.h +++ b/daemon/libvirtd.h @@ -33,7 +33,7 @@ # include <rpc/xdr.h> # include "remote_protocol.h" # include "qemu_protocol.h" -# include "logging.h" +# include "virlog.h" # include "threads.h" # if HAVE_SASL # include "virnetsaslcontext.h" diff --git a/daemon/remote.c b/daemon/remote.c index 1746280..58ceb39 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -34,7 +34,7 @@ #include "libvirt_internal.h" #include "datatypes.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "stream.h" #include "uuid.h" diff --git a/daemon/stream.c b/daemon/stream.c index fa14eeb..d63e009 100644 --- a/daemon/stream.c +++ b/daemon/stream.c @@ -26,7 +26,7 @@ #include "stream.h" #include "remote.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virnetserverclient.h" #include "virterror_internal.h" diff --git a/src/Makefile.am b/src/Makefile.am index dd49851..93da171 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -53,7 +53,6 @@ augeastest_DATA = # These files are not related to driver APIs. Simply generic # helper APIs for various purposes UTIL_SOURCES = \ - util/logging.c util/logging.h \ util/memory.c util/memory.h \ util/pci.c util/pci.h \ util/processinfo.c util/processinfo.h \ @@ -84,6 +83,7 @@ UTIL_SOURCES = \ util/virnodesuspend.c util/virnodesuspend.h \ util/viriptables.c util/viriptables.h \ util/virjson.c util/virjson.h \ + util/virlog.c util/virlog.h \ util/virobject.c util/virobject.h \ util/virpidfile.c util/virpidfile.h \ util/virprocess.c util/virprocess.h \ diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index 939d213..5fca6a6 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -29,7 +29,7 @@ #include "domain_audit.h" #include "viraudit.h" #include "uuid.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" /* Return nn:mm in hex for block and character devices, and NULL diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d1fadc3..c48adf5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -40,7 +40,7 @@ #include "uuid.h" #include "util.h" #include "virbuffer.h" -#include "logging.h" +#include "virlog.h" #include "nwfilter_conf.h" #include "storage_file.h" #include "virfile.h" diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c index cf37308..f1e247b 100644 --- a/src/conf/domain_event.c +++ b/src/conf/domain_event.c @@ -24,7 +24,7 @@ #include <config.h> #include "domain_event.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "memory.h" #include "virterror_internal.h" diff --git a/src/conf/nwfilter_params.c b/src/conf/nwfilter_params.c index 7254519..f8cf980 100644 --- a/src/conf/nwfilter_params.c +++ b/src/conf/nwfilter_params.c @@ -30,7 +30,7 @@ #include "datatypes.h" #include "nwfilter_params.h" #include "domain_conf.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_NWFILTER diff --git a/src/conf/secret_conf.c b/src/conf/secret_conf.c index ec67f57..24d7aa0 100644 --- a/src/conf/secret_conf.c +++ b/src/conf/secret_conf.c @@ -25,7 +25,7 @@ #include "internal.h" #include "virbuffer.h" #include "datatypes.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "secret_conf.h" #include "virterror_internal.h" diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c index 38a3e2a..6361810 100644 --- a/src/conf/snapshot_conf.c +++ b/src/conf/snapshot_conf.c @@ -34,7 +34,7 @@ #include "count-one-bits.h" #include "datatypes.h" #include "domain_conf.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "netdev_bandwidth_conf.h" #include "netdev_vport_profile_conf.h" diff --git a/src/conf/virconsole.c b/src/conf/virconsole.c index 143c1a6..92179cc 100644 --- a/src/conf/virconsole.c +++ b/src/conf/virconsole.c @@ -34,7 +34,7 @@ #include "threads.h" #include "memory.h" #include "virpidfile.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "virfile.h" diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 4263b88..17a06f3 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -23,7 +23,7 @@ #include <config.h> -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "xml.h" #include "cpu.h" diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c index 363d6c1..c59bd1b 100644 --- a/src/cpu/cpu_powerpc.c +++ b/src/cpu/cpu_powerpc.c @@ -26,7 +26,7 @@ #include <config.h> #include <stdint.h> -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "util.h" #include "cpu.h" diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 563cd67..bea48a1 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -25,7 +25,7 @@ #include <stdint.h> -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "util.h" #include "cpu.h" diff --git a/src/datatypes.c b/src/datatypes.c index c0ed3a2..73a2fd0 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -24,7 +24,7 @@ #include "datatypes.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "uuid.h" #include "util.h" diff --git a/src/driver.c b/src/driver.c index 6d2feb9..4ef6fd2 100644 --- a/src/driver.c +++ b/src/driver.c @@ -26,7 +26,7 @@ #include "driver.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "configmake.h" diff --git a/src/esx/esx_device_monitor.c b/src/esx/esx_device_monitor.c index c3f9339..0ad95f5 100644 --- a/src/esx/esx_device_monitor.c +++ b/src/esx/esx_device_monitor.c @@ -27,7 +27,7 @@ #include "internal.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "esx_private.h" #include "esx_device_monitor.h" diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index a858298..a69d149 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -30,7 +30,7 @@ #include "virauth.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "vmx.h" #include "virtypedparam.h" diff --git a/src/esx/esx_interface_driver.c b/src/esx/esx_interface_driver.c index 35bc7fa..4760264 100644 --- a/src/esx/esx_interface_driver.c +++ b/src/esx/esx_interface_driver.c @@ -27,7 +27,7 @@ #include "internal.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "interface_conf.h" #include "virsocketaddr.h" diff --git a/src/esx/esx_network_driver.c b/src/esx/esx_network_driver.c index 6a87abd..3e25aa2 100644 --- a/src/esx/esx_network_driver.c +++ b/src/esx/esx_network_driver.c @@ -28,7 +28,7 @@ #include "internal.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "network_conf.h" #include "esx_private.h" diff --git a/src/esx/esx_nwfilter_driver.c b/src/esx/esx_nwfilter_driver.c index 9780ca6..f5e710d 100644 --- a/src/esx/esx_nwfilter_driver.c +++ b/src/esx/esx_nwfilter_driver.c @@ -27,7 +27,7 @@ #include "internal.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "esx_private.h" #include "esx_nwfilter_driver.h" diff --git a/src/esx/esx_secret_driver.c b/src/esx/esx_secret_driver.c index 55b2e9a..2a98644 100644 --- a/src/esx/esx_secret_driver.c +++ b/src/esx/esx_secret_driver.c @@ -26,7 +26,7 @@ #include "internal.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "esx_private.h" #include "esx_secret_driver.h" diff --git a/src/esx/esx_storage_backend_iscsi.c b/src/esx/esx_storage_backend_iscsi.c index b6cde96..5d4eb3c 100644 --- a/src/esx/esx_storage_backend_iscsi.c +++ b/src/esx/esx_storage_backend_iscsi.c @@ -30,7 +30,7 @@ #include "md5.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "storage_conf.h" #include "storage_file.h" diff --git a/src/esx/esx_storage_backend_vmfs.c b/src/esx/esx_storage_backend_vmfs.c index 5ef2981..c8bba9e 100644 --- a/src/esx/esx_storage_backend_vmfs.c +++ b/src/esx/esx_storage_backend_vmfs.c @@ -33,7 +33,7 @@ #include "md5.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "storage_conf.h" #include "storage_file.h" diff --git a/src/esx/esx_util.c b/src/esx/esx_util.c index b807607..6e27fe4 100644 --- a/src/esx/esx_util.c +++ b/src/esx/esx_util.c @@ -30,7 +30,7 @@ #include "datatypes.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "vmx.h" #include "esx_private.h" diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c index d645bfb..76192df 100644 --- a/src/esx/esx_vi.c +++ b/src/esx/esx_vi.c @@ -28,7 +28,7 @@ #include "virbuffer.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "uuid.h" #include "vmx.h" diff --git a/src/esx/esx_vi_methods.c b/src/esx/esx_vi_methods.c index a3c3c8b..a3870ee 100644 --- a/src/esx/esx_vi_methods.c +++ b/src/esx/esx_vi_methods.c @@ -25,7 +25,7 @@ #include "virbuffer.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "esx_vi_methods.h" #include "esx_util.h" diff --git a/src/esx/esx_vi_types.c b/src/esx/esx_vi_types.c index 1654e1b..d0a2c6c 100644 --- a/src/esx/esx_vi_types.c +++ b/src/esx/esx_vi_types.c @@ -30,7 +30,7 @@ #include "virbuffer.h" #include "datatypes.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "esx_vi.h" #include "esx_vi_types.h" diff --git a/src/fdstream.c b/src/fdstream.c index d1eb04c..fdbd7a2 100644 --- a/src/fdstream.c +++ b/src/fdstream.c @@ -35,7 +35,7 @@ #include "fdstream.h" #include "virterror_internal.h" #include "datatypes.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "util.h" #include "virfile.h" diff --git a/src/hyperv/hyperv_device_monitor.c b/src/hyperv/hyperv_device_monitor.c index e183798..1fa98b2 100644 --- a/src/hyperv/hyperv_device_monitor.c +++ b/src/hyperv/hyperv_device_monitor.c @@ -28,7 +28,7 @@ #include "datatypes.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "hyperv_device_monitor.h" diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index 4aed41f..95b0cd9 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -29,7 +29,7 @@ #include "virauth.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "hyperv_driver.h" #include "hyperv_interface_driver.h" diff --git a/src/hyperv/hyperv_interface_driver.c b/src/hyperv/hyperv_interface_driver.c index 9b1bb37..6a3c2cb 100644 --- a/src/hyperv/hyperv_interface_driver.c +++ b/src/hyperv/hyperv_interface_driver.c @@ -28,7 +28,7 @@ #include "datatypes.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "hyperv_interface_driver.h" diff --git a/src/hyperv/hyperv_network_driver.c b/src/hyperv/hyperv_network_driver.c index 3a61fe6..2f9fcab 100644 --- a/src/hyperv/hyperv_network_driver.c +++ b/src/hyperv/hyperv_network_driver.c @@ -28,7 +28,7 @@ #include "datatypes.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "hyperv_network_driver.h" diff --git a/src/hyperv/hyperv_nwfilter_driver.c b/src/hyperv/hyperv_nwfilter_driver.c index 9d54f82..c490522 100644 --- a/src/hyperv/hyperv_nwfilter_driver.c +++ b/src/hyperv/hyperv_nwfilter_driver.c @@ -28,7 +28,7 @@ #include "datatypes.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "hyperv_nwfilter_driver.h" diff --git a/src/hyperv/hyperv_secret_driver.c b/src/hyperv/hyperv_secret_driver.c index 7ee8ce9..3d58b01 100644 --- a/src/hyperv/hyperv_secret_driver.c +++ b/src/hyperv/hyperv_secret_driver.c @@ -28,7 +28,7 @@ #include "datatypes.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "hyperv_secret_driver.h" diff --git a/src/hyperv/hyperv_storage_driver.c b/src/hyperv/hyperv_storage_driver.c index 2e03162..7fbc14d 100644 --- a/src/hyperv/hyperv_storage_driver.c +++ b/src/hyperv/hyperv_storage_driver.c @@ -28,7 +28,7 @@ #include "datatypes.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "hyperv_storage_driver.h" diff --git a/src/hyperv/hyperv_util.c b/src/hyperv/hyperv_util.c index 3050d61..1ef6dae 100644 --- a/src/hyperv/hyperv_util.c +++ b/src/hyperv/hyperv_util.c @@ -26,7 +26,7 @@ #include "datatypes.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "hyperv_private.h" #include "hyperv_util.h" diff --git a/src/hyperv/hyperv_wmi.c b/src/hyperv/hyperv_wmi.c index 0a6b107..069ebe6 100644 --- a/src/hyperv/hyperv_wmi.c +++ b/src/hyperv/hyperv_wmi.c @@ -27,7 +27,7 @@ #include "internal.h" #include "virterror_internal.h" #include "datatypes.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "util.h" #include "uuid.h" diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interface_backend_netcf.c index 226e020..1f42920 100644 --- a/src/interface/interface_backend_netcf.c +++ b/src/interface/interface_backend_netcf.c @@ -30,7 +30,7 @@ #include "interface_driver.h" #include "interface_conf.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_INTERFACE diff --git a/src/libvirt-qemu.c b/src/libvirt-qemu.c index cc98bbb..8d53b5c 100644 --- a/src/libvirt-qemu.c +++ b/src/libvirt-qemu.c @@ -24,7 +24,7 @@ #include <config.h> #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "libvirt/libvirt-qemu.h" diff --git a/src/libvirt.c b/src/libvirt.c index 8f7a869..d078304 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -46,7 +46,7 @@ #endif #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "driver.h" diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 55d2ef4..460d15f 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -32,7 +32,7 @@ #include <sys/utsname.h> #include "internal.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "datatypes.h" #include "virfile.h" diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 884fca8..ced7cfa 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -32,7 +32,7 @@ #include <fcntl.h> #include "internal.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "virconf.h" #include "datatypes.h" diff --git a/src/locking/domain_lock.c b/src/locking/domain_lock.c index 1e3da5f..00861cf 100644 --- a/src/locking/domain_lock.c +++ b/src/locking/domain_lock.c @@ -25,7 +25,7 @@ #include "memory.h" #include "uuid.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_LOCKING diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c index 08caa16..3c2a50c 100644 --- a/src/locking/lock_daemon.c +++ b/src/locking/lock_daemon.c @@ -38,7 +38,7 @@ #include "virpidfile.h" #include "virprocess.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "virconf.h" #include "rpc/virnetserver.h" diff --git a/src/locking/lock_daemon_config.c b/src/locking/lock_daemon_config.c index c2d9a76..9557b8c 100644 --- a/src/locking/lock_daemon_config.c +++ b/src/locking/lock_daemon_config.c @@ -27,7 +27,7 @@ #include "virconf.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "rpc/virnetserver.h" #include "configmake.h" diff --git a/src/locking/lock_daemon_dispatch.c b/src/locking/lock_daemon_dispatch.c index bb4dcfa..78c9726 100644 --- a/src/locking/lock_daemon_dispatch.c +++ b/src/locking/lock_daemon_dispatch.c @@ -25,7 +25,7 @@ #include "rpc/virnetserver.h" #include "rpc/virnetserverclient.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "lock_daemon.h" #include "lock_protocol.h" diff --git a/src/locking/lock_driver_lockd.c b/src/locking/lock_driver_lockd.c index c88c5af..d5d721d 100644 --- a/src/locking/lock_driver_lockd.c +++ b/src/locking/lock_driver_lockd.c @@ -24,7 +24,7 @@ #include "lock_driver.h" #include "virconf.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "util.h" #include "virfile.h" diff --git a/src/locking/lock_driver_nop.c b/src/locking/lock_driver_nop.c index c9ab806..745a0bf 100644 --- a/src/locking/lock_driver_nop.c +++ b/src/locking/lock_driver_nop.c @@ -23,7 +23,7 @@ #include "lock_driver_nop.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" diff --git a/src/locking/lock_driver_sanlock.c b/src/locking/lock_driver_sanlock.c index 2eadc07..1e8df26 100644 --- a/src/locking/lock_driver_sanlock.c +++ b/src/locking/lock_driver_sanlock.c @@ -37,7 +37,7 @@ #include "dirname.h" #include "lock_driver.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "memory.h" #include "util.h" diff --git a/src/locking/lock_manager.c b/src/locking/lock_manager.c index e6d9308..f038d4e 100644 --- a/src/locking/lock_manager.c +++ b/src/locking/lock_manager.c @@ -24,7 +24,7 @@ #include "lock_manager.h" #include "lock_driver_nop.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "memory.h" #include "uuid.h" diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c index e354d6c..b8c4308 100644 --- a/src/lxc/lxc_cgroup.c +++ b/src/lxc/lxc_cgroup.c @@ -25,7 +25,7 @@ #include "lxc_container.h" #include "virfile.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "vircgroup.h" diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c index 77667bd..ca36965 100644 --- a/src/lxc/lxc_conf.c +++ b/src/lxc/lxc_conf.c @@ -33,7 +33,7 @@ #include "virterror_internal.h" #include "virconf.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "configmake.h" #include "lxc_container.h" diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index 33ebf1f..4aae28e 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -54,7 +54,7 @@ #endif #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "lxc_container.h" #include "util.h" #include "memory.h" diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index c9cac5d..78f10ab 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -53,7 +53,7 @@ #endif #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "lxc_conf.h" diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index bd80d9f..77a64dd 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -24,7 +24,7 @@ #include "lxc_domain.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #define VIR_FROM_THIS VIR_FROM_LXC diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 9c35406..0ab2cb9 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -36,7 +36,7 @@ #include <wait.h> #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "lxc_conf.h" #include "lxc_container.h" diff --git a/src/lxc/lxc_fuse.c b/src/lxc/lxc_fuse.c index 4e7df55..485456e 100644 --- a/src/lxc/lxc_fuse.c +++ b/src/lxc/lxc_fuse.c @@ -32,7 +32,7 @@ #include "lxc_fuse.h" #include "lxc_cgroup.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "virbuffer.h" diff --git a/src/lxc/lxc_monitor.c b/src/lxc/lxc_monitor.c index 4d177c9..9eb587d 100644 --- a/src/lxc/lxc_monitor.c +++ b/src/lxc/lxc_monitor.c @@ -28,7 +28,7 @@ #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "threads.h" #include "rpc/virnetclient.h" diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index d59bd2e..02ed226 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -41,7 +41,7 @@ #include "memory.h" #include "domain_audit.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "vircommand.h" #include "virhooks.h" diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index bc37bde..2a59b84 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -57,7 +57,7 @@ #include "memory.h" #include "uuid.h" #include "viriptables.h" -#include "logging.h" +#include "virlog.h" #include "virdnsmasq.h" #include "configmake.h" #include "virnetdev.h" diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index 4d3e01b..48360e3 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -33,7 +33,7 @@ #include "virterror_internal.h" #include "datatypes.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "node_device_conf.h" #include "node_device_hal.h" #include "node_device_driver.h" diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_device_hal.c index 080aaed..59ba5c3 100644 --- a/src/node_device/node_device_hal.c +++ b/src/node_device/node_device_hal.c @@ -36,7 +36,7 @@ #include "memory.h" #include "uuid.h" #include "pci.h" -#include "logging.h" +#include "virlog.h" #include "node_device_driver.h" #include "virdbus.h" diff --git a/src/node_device/node_device_linux_sysfs.c b/src/node_device/node_device_linux_sysfs.c index 3048e33..fbe0da5 100644 --- a/src/node_device/node_device_linux_sysfs.c +++ b/src/node_device/node_device_linux_sysfs.c @@ -30,7 +30,7 @@ #include "node_device_hal.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #define VIR_FROM_THIS VIR_FROM_NODEDEV diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index b3499fb..fef00ad 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -32,7 +32,7 @@ #include "node_device_driver.h" #include "driver.h" #include "datatypes.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "uuid.h" #include "util.h" diff --git a/src/nodeinfo.c b/src/nodeinfo.c index 096000b..0019c2b 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -43,7 +43,7 @@ #include "nodeinfo.h" #include "physmem.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "count-one-bits.h" #include "intprops.h" diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcpsnoop.c index e4c895f..68aa233 100644 --- a/src/nwfilter/nwfilter_dhcpsnoop.c +++ b/src/nwfilter/nwfilter_dhcpsnoop.c @@ -55,7 +55,7 @@ #include <net/if.h> #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "virterror_internal.h" #include "conf/domain_conf.h" diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 3aa026a..7fde656 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -28,7 +28,7 @@ #include <config.h> #include "virdbus.h" -#include "logging.h" +#include "virlog.h" #include "internal.h" diff --git a/src/nwfilter/nwfilter_ebiptables_driver.c b/src/nwfilter/nwfilter_ebiptables_driver.c index 6966acf..23a43d2 100644 --- a/src/nwfilter/nwfilter_ebiptables_driver.c +++ b/src/nwfilter/nwfilter_ebiptables_driver.c @@ -32,7 +32,7 @@ #include "virbuffer.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "domain_conf.h" #include "nwfilter_conf.h" diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter_gentech_driver.c index 572acf4..6be4a93 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -27,7 +27,7 @@ #include "internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "domain_conf.h" #include "virterror_internal.h" #include "nwfilter_gentech_driver.h" diff --git a/src/nwfilter/nwfilter_learnipaddr.c b/src/nwfilter/nwfilter_learnipaddr.c index 361bdce..110eae8 100644 --- a/src/nwfilter/nwfilter_learnipaddr.c +++ b/src/nwfilter/nwfilter_learnipaddr.c @@ -43,7 +43,7 @@ #include "intprops.h" #include "virbuffer.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "virnetdev.h" #include "virterror_internal.h" diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index 75d52e2..101fa32 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -56,7 +56,7 @@ #include "memory.h" #include "virfile.h" #include "virtypedparam.h" -#include "logging.h" +#include "virlog.h" #include "vircommand.h" #include "viruri.h" #include "stats_linux.h" diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c index 648cb48..4e6f903 100644 --- a/src/parallels/parallels_driver.c +++ b/src/parallels/parallels_driver.c @@ -45,7 +45,7 @@ #include "virterror_internal.h" #include "memory.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "vircommand.h" #include "configmake.h" #include "storage_file.h" diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index e54f0f3..0ac2771 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -49,7 +49,7 @@ #include "datatypes.h" #include "virbuffer.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "driver.h" #include "libvirt/libvirt.h" #include "virterror_internal.h" diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c index 6727294..421e43f 100644 --- a/src/qemu/qemu_agent.c +++ b/src/qemu/qemu_agent.c @@ -35,7 +35,7 @@ #include "qemu_agent.h" #include "qemu_command.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "virjson.h" #include "virfile.h" diff --git a/src/qemu/qemu_bridge_filter.c b/src/qemu/qemu_bridge_filter.c index a6d0d4f..08a9f1a 100644 --- a/src/qemu/qemu_bridge_filter.c +++ b/src/qemu/qemu_bridge_filter.c @@ -27,7 +27,7 @@ #include "qemu_driver.h" #include "util.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "qemu_bridge_filter.h" diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index f68e081..5853180 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -25,7 +25,7 @@ #include "qemu_capabilities.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "util.h" #include "virfile.h" diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index 6c6607d..8d9ccf9 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -27,7 +27,7 @@ #include "qemu_domain.h" #include "qemu_process.h" #include "vircgroup.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "virterror_internal.h" #include "util.h" diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 04a9512..8a35982 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -29,7 +29,7 @@ #include "qemu_bridge_filter.h" #include "cpu/cpu.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "util.h" #include "virfile.h" diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 7c8d826..598fad7 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -48,7 +48,7 @@ #include "datatypes.h" #include "xml.h" #include "nodeinfo.h" -#include "logging.h" +#include "virlog.h" #include "cpu/cpu.h" #include "domain_nwfilter.h" #include "virfile.h" diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 8d8cf02..e6eaa58 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -28,7 +28,7 @@ #include "qemu_capabilities.h" #include "qemu_migration.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "c-ctype.h" #include "cpu/cpu.h" diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 79f42fb..25e5738 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -60,7 +60,7 @@ #include "qemu_migration.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "virbuffer.h" #include "util.h" diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c index aa000d1..3854520 100644 --- a/src/qemu/qemu_hostdev.c +++ b/src/qemu/qemu_hostdev.c @@ -24,7 +24,7 @@ #include <config.h> #include "qemu_hostdev.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "memory.h" #include "pci.h" diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index e9a5e35..7edd125 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -32,7 +32,7 @@ #include "qemu_hostdev.h" #include "domain_audit.h" #include "domain_nwfilter.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "virterror_internal.h" #include "memory.h" diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 468a92f..cabbe1a 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -36,7 +36,7 @@ #include "qemu_cgroup.h" #include "domain_audit.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "memory.h" #include "util.h" diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 131e8df..920453d 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -33,7 +33,7 @@ #include "qemu_monitor_json.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "virprocess.h" #include "virobject.h" diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 6181668..e14134b 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -36,7 +36,7 @@ #include "qemu_command.h" #include "qemu_capabilities.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "driver.h" #include "datatypes.h" #include "virterror_internal.h" diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index a12adb6..28690b1 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -35,7 +35,7 @@ #include "c-ctype.h" #include "c-strcasestr.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "driver.h" #include "datatypes.h" #include "virterror_internal.h" diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index e528d78..a77b248 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -51,7 +51,7 @@ #endif #include "datatypes.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "memory.h" #include "virhooks.h" diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 8b77e7d..1e9151a 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -30,7 +30,7 @@ #include "virnetclientprogram.h" #include "virnetclientstream.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "domain_event.h" #include "driver.h" diff --git a/src/rpc/virkeepalive.c b/src/rpc/virkeepalive.c index 309f22f..8fc1cba 100644 --- a/src/rpc/virkeepalive.c +++ b/src/rpc/virkeepalive.c @@ -25,7 +25,7 @@ #include "memory.h" #include "threads.h" #include "virfile.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "virterror_internal.h" #include "virnetsocket.h" diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c index bf2547c..7370ae0 100644 --- a/src/rpc/virnetclient.c +++ b/src/rpc/virnetclient.c @@ -33,7 +33,7 @@ #include "memory.h" #include "threads.h" #include "virfile.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "virterror_internal.h" diff --git a/src/rpc/virnetclientprogram.c b/src/rpc/virnetclientprogram.c index 1f08640..dec3943 100644 --- a/src/rpc/virnetclientprogram.c +++ b/src/rpc/virnetclientprogram.c @@ -30,7 +30,7 @@ #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "virfile.h" #include "threads.h" diff --git a/src/rpc/virnetclientstream.c b/src/rpc/virnetclientstream.c index 0e7e38e..26dc292 100644 --- a/src/rpc/virnetclientstream.c +++ b/src/rpc/virnetclientstream.c @@ -26,7 +26,7 @@ #include "virnetclient.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "threads.h" #define VIR_FROM_THIS VIR_FROM_RPC diff --git a/src/rpc/virnetmessage.c b/src/rpc/virnetmessage.c index cf76e21..16d8e61 100644 --- a/src/rpc/virnetmessage.c +++ b/src/rpc/virnetmessage.c @@ -26,7 +26,7 @@ #include "virnetmessage.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "util.h" diff --git a/src/rpc/virnetsaslcontext.c b/src/rpc/virnetsaslcontext.c index b6b68d5..e880127 100644 --- a/src/rpc/virnetsaslcontext.c +++ b/src/rpc/virnetsaslcontext.c @@ -28,7 +28,7 @@ #include "virterror_internal.h" #include "memory.h" #include "threads.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_RPC diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index f686a8f..6d3532a 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -28,7 +28,7 @@ #include <fcntl.h> #include "virnetserver.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "virterror_internal.h" #include "threads.h" diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c index ed26719..9642ea5 100644 --- a/src/rpc/virnetserverclient.c +++ b/src/rpc/virnetserverclient.c @@ -29,7 +29,7 @@ #include "virnetserverclient.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "memory.h" #include "threads.h" diff --git a/src/rpc/virnetservermdns.c b/src/rpc/virnetservermdns.c index 166b4eb..c17b65d 100644 --- a/src/rpc/virnetservermdns.c +++ b/src/rpc/virnetservermdns.c @@ -44,7 +44,7 @@ #include "vireventpoll.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_RPC diff --git a/src/rpc/virnetserverprogram.c b/src/rpc/virnetserverprogram.c index e4aa2da..5b96c34 100644 --- a/src/rpc/virnetserverprogram.c +++ b/src/rpc/virnetserverprogram.c @@ -28,7 +28,7 @@ #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "threads.h" diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c index 5a2eab3..aa8f4b9 100644 --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -44,7 +44,7 @@ #include "util.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "threads.h" #include "virprocess.h" diff --git a/src/rpc/virnetsshsession.c b/src/rpc/virnetsshsession.c index d890569..734acaa 100644 --- a/src/rpc/virnetsshsession.c +++ b/src/rpc/virnetsshsession.c @@ -28,7 +28,7 @@ #include "internal.h" #include "virbuffer.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "configmake.h" #include "threads.h" #include "util.h" diff --git a/src/rpc/virnettlscontext.c b/src/rpc/virnettlscontext.c index 1d32327..2931003 100644 --- a/src/rpc/virnettlscontext.c +++ b/src/rpc/virnettlscontext.c @@ -33,7 +33,7 @@ #include "memory.h" #include "virterror_internal.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "threads.h" #include "configmake.h" diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c index d9ba42b..4159358 100644 --- a/src/secret/secret_driver.c +++ b/src/secret/secret_driver.c @@ -32,7 +32,7 @@ #include "base64.h" #include "datatypes.h" #include "driver.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "secret_conf.h" #include "secret_driver.h" diff --git a/src/security/security_apparmor.c b/src/security/security_apparmor.c index 034eb04..f2aebc8 100644 --- a/src/security/security_apparmor.c +++ b/src/security/security_apparmor.c @@ -48,7 +48,7 @@ #include "virfile.h" #include "configmake.h" #include "vircommand.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_SECURITY #define SECURITY_APPARMOR_VOID_DOI "0" diff --git a/src/security/security_dac.c b/src/security/security_dac.c index 9f5d39d..9ff2665 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -27,7 +27,7 @@ #include "virterror_internal.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "pci.h" #include "virusb.h" #include "storage_file.h" diff --git a/src/security/security_driver.c b/src/security/security_driver.c index c7ff8a5..82d3ca9 100644 --- a/src/security/security_driver.c +++ b/src/security/security_driver.c @@ -24,7 +24,7 @@ #include <string.h> #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "security_driver.h" #ifdef WITH_SECDRIVER_SELINUX diff --git a/src/security/security_manager.c b/src/security/security_manager.c index 690e4da..67c8858 100644 --- a/src/security/security_manager.c +++ b/src/security/security_manager.c @@ -28,7 +28,7 @@ #include "security_dac.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_SECURITY diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c index eb4f253..2a19781 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -36,7 +36,7 @@ #include "virterror_internal.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "pci.h" #include "virusb.h" #include "storage_file.h" diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index 083028d..899caeb 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -54,7 +54,7 @@ #include "uuid.h" #include "storage_file.h" #include "storage_backend.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "stat-time.h" diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c index c6aa407..7e1d3ec 100644 --- a/src/storage/storage_backend_disk.c +++ b/src/storage/storage_backend_disk.c @@ -27,7 +27,7 @@ #include <stdio.h> #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "storage_backend_disk.h" #include "util.h" #include "memory.h" diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index cdf93af..78b50f0 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -49,7 +49,7 @@ #include "memory.h" #include "xml.h" #include "virfile.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_STORAGE diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_backend_iscsi.c index c468b1b..46659af 100644 --- a/src/storage/storage_backend_iscsi.c +++ b/src/storage/storage_backend_iscsi.c @@ -39,7 +39,7 @@ #include "storage_backend_iscsi.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "vircommand.h" #include "virrandom.h" diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c index 53e6c61..f28c663 100644 --- a/src/storage/storage_backend_logical.c +++ b/src/storage/storage_backend_logical.c @@ -36,7 +36,7 @@ #include "storage_conf.h" #include "vircommand.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #define VIR_FROM_THIS VIR_FROM_STORAGE diff --git a/src/storage/storage_backend_mpath.c b/src/storage/storage_backend_mpath.c index efcfb28..1ca120f 100644 --- a/src/storage/storage_backend_mpath.c +++ b/src/storage/storage_backend_mpath.c @@ -33,7 +33,7 @@ #include "storage_conf.h" #include "storage_backend.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #define VIR_FROM_THIS VIR_FROM_STORAGE diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c index bc61cf7..4e58911 100644 --- a/src/storage/storage_backend_rbd.c +++ b/src/storage/storage_backend_rbd.c @@ -27,7 +27,7 @@ #include "storage_conf.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "base64.h" #include "uuid.h" #include "rados/librados.h" diff --git a/src/storage/storage_backend_scsi.c b/src/storage/storage_backend_scsi.c index 6515e57..32713be 100644 --- a/src/storage/storage_backend_scsi.c +++ b/src/storage/storage_backend_scsi.c @@ -31,7 +31,7 @@ #include "virterror_internal.h" #include "storage_backend_scsi.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "vircommand.h" diff --git a/src/storage/storage_backend_sheepdog.c b/src/storage/storage_backend_sheepdog.c index ecca7a8..05deeeb 100644 --- a/src/storage/storage_backend_sheepdog.c +++ b/src/storage/storage_backend_sheepdog.c @@ -32,7 +32,7 @@ #include "vircommand.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_STORAGE diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index c567fff..6076f6c 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -44,7 +44,7 @@ #include "storage_conf.h" #include "memory.h" #include "storage_backend.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "fdstream.h" #include "configmake.h" diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 8e57370..dbaf14e 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -48,7 +48,7 @@ #include "node_device_conf.h" #include "xml.h" #include "threads.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "virtypedparam.h" #include "virrandom.h" diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c index 51e5a7a..35b54c2 100644 --- a/src/uml/uml_conf.c +++ b/src/uml/uml_conf.c @@ -42,7 +42,7 @@ #include "util.h" #include "memory.h" #include "nodeinfo.h" -#include "logging.h" +#include "virlog.h" #include "domain_nwfilter.h" #include "virfile.h" #include "vircommand.h" diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 8dece66..90c9b66 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -56,7 +56,7 @@ #include "domain_conf.h" #include "domain_audit.h" #include "datatypes.h" -#include "logging.h" +#include "virlog.h" #include "domain_nwfilter.h" #include "virfile.h" #include "fdstream.h" diff --git a/src/util/logging.c b/src/util/logging.c deleted file mode 100644 index 0df3549..0000000 --- a/src/util/logging.c +++ /dev/null @@ -1,1590 +0,0 @@ -/* - * logging.c: internal logging and debugging - * - * Copyright (C) 2008, 2010-2012 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include <stdio.h> -#include <stdarg.h> -#include <stdlib.h> -#include <time.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> -#include <signal.h> -#include <execinfo.h> -#if HAVE_SYSLOG_H -# include <syslog.h> -#endif -#include <sys/socket.h> -#if HAVE_SYS_UN_H -# include <sys/un.h> -#endif - -#include "virterror_internal.h" -#include "logging.h" -#include "memory.h" -#include "util.h" -#include "virbuffer.h" -#include "threads.h" -#include "virfile.h" -#include "virtime.h" -#include "intprops.h" - -/* Journald output is only supported on Linux new enough to expose - * htole64. */ -#if HAVE_SYSLOG_H && defined(__linux__) && HAVE_DECL_HTOLE64 -# define USE_JOURNALD 1 -#endif - -#define VIR_FROM_THIS VIR_FROM_NONE - -VIR_ENUM_DECL(virLogSource) -VIR_ENUM_IMPL(virLogSource, VIR_LOG_FROM_LAST, - "file", - "error", - "audit", - "trace", - "library"); - -/* - * A logging buffer to keep some history over logs - */ - -static int virLogSize = 64 * 1024; -static char *virLogBuffer = NULL; -static int virLogLen = 0; -static int virLogStart = 0; -static int virLogEnd = 0; - -/* - * Filters are used to refine the rules on what to keep or drop - * based on a matching pattern (currently a substring) - */ -struct _virLogFilter { - const char *match; - virLogPriority priority; - unsigned int flags; -}; -typedef struct _virLogFilter virLogFilter; -typedef virLogFilter *virLogFilterPtr; - -static virLogFilterPtr virLogFilters = NULL; -static int virLogNbFilters = 0; - -/* - * Outputs are used to emit the messages retained - * after filtering, multiple output can be used simultaneously - */ -struct _virLogOutput { - bool logVersion; - void *data; - virLogOutputFunc f; - virLogCloseFunc c; - virLogPriority priority; - virLogDestination dest; - const char *name; -}; -typedef struct _virLogOutput virLogOutput; -typedef virLogOutput *virLogOutputPtr; - -static virLogOutputPtr virLogOutputs = NULL; -static int virLogNbOutputs = 0; - -/* - * Default priorities - */ -static virLogPriority virLogDefaultPriority = VIR_LOG_DEFAULT; - -static int virLogResetFilters(void); -static int virLogResetOutputs(void); -static void virLogOutputToFd(virLogSource src, - virLogPriority priority, - const char *filename, - int linenr, - const char *funcname, - const char *timestamp, - virLogMetadataPtr metadata, - unsigned int flags, - const char *rawstr, - const char *str, - void *data); - -/* - * Logs accesses must be serialized though a mutex - */ -virMutex virLogMutex; - -void -virLogLock(void) -{ - virMutexLock(&virLogMutex); -} - - -void -virLogUnlock(void) -{ - virMutexUnlock(&virLogMutex); -} - - -static const char * -virLogOutputString(virLogDestination ldest) -{ - switch (ldest) { - case VIR_LOG_TO_STDERR: - return "stderr"; - case VIR_LOG_TO_SYSLOG: - return "syslog"; - case VIR_LOG_TO_FILE: - return "file"; - case VIR_LOG_TO_JOURNALD: - return "journald"; - } - return "unknown"; -} - - -static const char * -virLogPriorityString(virLogPriority lvl) -{ - switch (lvl) { - case VIR_LOG_DEBUG: - return "debug"; - case VIR_LOG_INFO: - return "info"; - case VIR_LOG_WARN: - return "warning"; - case VIR_LOG_ERROR: - return "error"; - } - return "unknown"; -} - - -static int -virLogOnceInit(void) -{ - const char *pbm = NULL; - - if (virMutexInit(&virLogMutex) < 0) - return -1; - - virLogLock(); - if (VIR_ALLOC_N(virLogBuffer, virLogSize + 1) < 0) { - /* - * The debug buffer is not a critical component, allow startup - * even in case of failure to allocate it in case of a - * configuration mistake. - */ - virLogSize = 64 * 1024; - if (VIR_ALLOC_N(virLogBuffer, virLogSize + 1) < 0) { - pbm = "Failed to allocate debug buffer: deactivating debug log\n"; - virLogSize = 0; - } else { - pbm = "Failed to allocate debug buffer: reduced to 64 kB\n"; - } - } - virLogLen = 0; - virLogStart = 0; - virLogEnd = 0; - virLogDefaultPriority = VIR_LOG_DEFAULT; - virLogUnlock(); - if (pbm) - VIR_WARN("%s", pbm); - return 0; -} - -VIR_ONCE_GLOBAL_INIT(virLog) - - -/** - * virLogSetBufferSize: - * @size: size of the buffer in kilobytes or <= 0 to deactivate - * - * Dynamically set the size or deactivate the logging buffer used to keep - * a trace of all recent debug output. Note that the content of the buffer - * is lost if it gets reallocated. - * - * Return -1 in case of failure or 0 in case of success - */ -int -virLogSetBufferSize(int size) -{ - int ret = 0; - int oldsize; - char *oldLogBuffer; - const char *pbm = NULL; - - if (size < 0) - size = 0; - - if (virLogInitialize() < 0) - return -1; - - if (size * 1024 == virLogSize) - return ret; - - virLogLock(); - - oldsize = virLogSize; - oldLogBuffer = virLogBuffer; - - if (INT_MAX / 1024 <= size) { - pbm = "Requested log size of %d kB too large\n"; - ret = -1; - goto error; - } - - virLogSize = size * 1024; - if (VIR_ALLOC_N(virLogBuffer, virLogSize + 1) < 0) { - pbm = "Failed to allocate debug buffer of %d kB\n"; - virLogBuffer = oldLogBuffer; - virLogSize = oldsize; - ret = -1; - goto error; - } - VIR_FREE(oldLogBuffer); - virLogLen = 0; - virLogStart = 0; - virLogEnd = 0; - -error: - virLogUnlock(); - if (pbm) - VIR_ERROR(pbm, size); - return ret; -} - - -/** - * virLogReset: - * - * Reset the logging module to its default initial state - * - * Returns 0 if successful, and -1 in case or error - */ -int -virLogReset(void) -{ - if (virLogInitialize() < 0) - return -1; - - virLogLock(); - virLogResetFilters(); - virLogResetOutputs(); - virLogLen = 0; - virLogStart = 0; - virLogEnd = 0; - virLogDefaultPriority = VIR_LOG_DEFAULT; - virLogUnlock(); - return 0; -} - - -/* - * Store a string in the ring buffer - */ -static void -virLogStr(const char *str) -{ - int tmp; - int len; - - if ((str == NULL) || (virLogBuffer == NULL) || (virLogSize <= 0)) - return; - len = strlen(str); - if (len >= virLogSize) - return; - - /* - * copy the data and reset the end, we cycle over the end of the buffer - */ - if (virLogEnd + len >= virLogSize) { - tmp = virLogSize - virLogEnd; - memcpy(&virLogBuffer[virLogEnd], str, tmp); - memcpy(&virLogBuffer[0], &str[tmp], len - tmp); - virLogEnd = len - tmp; - } else { - memcpy(&virLogBuffer[virLogEnd], str, len); - virLogEnd += len; - } - virLogBuffer[virLogEnd] = 0; - /* - * Update the log length, and if full move the start index - */ - virLogLen += len; - if (virLogLen > virLogSize) { - tmp = virLogLen - virLogSize; - virLogLen = virLogSize; - virLogStart += tmp; - if (virLogStart >= virLogSize) - virLogStart -= virLogSize; - } -} - - -static void -virLogDumpAllFD(const char *msg, int len) -{ - int i, found = 0; - - if (len <= 0) - len = strlen(msg); - - for (i = 0; i < virLogNbOutputs;i++) { - if (virLogOutputs[i].f == virLogOutputToFd) { - int fd = (intptr_t) virLogOutputs[i].data; - - if (fd >= 0) { - ignore_value(safewrite(fd, msg, len)); - found = 1; - } - } - } - if (!found) - ignore_value(safewrite(STDERR_FILENO, msg, len)); -} - - -/** - * virLogEmergencyDumpAll: - * @signum: the signal number - * - * Emergency function called, possibly from a signal handler. - * It need to output the debug ring buffer through the log - * output which are safe to use from a signal handler. - * In case none is found it is emitted to standard error. - */ -void -virLogEmergencyDumpAll(int signum) -{ - int len; - int oldLogStart, oldLogLen; - - switch (signum) { -#ifdef SIGFPE - case SIGFPE: - virLogDumpAllFD("Caught signal Floating-point exception", -1); - break; -#endif -#ifdef SIGSEGV - case SIGSEGV: - virLogDumpAllFD("Caught Segmentation violation", -1); - break; -#endif -#ifdef SIGILL - case SIGILL: - virLogDumpAllFD("Caught illegal instruction", -1); - break; -#endif -#ifdef SIGABRT - case SIGABRT: - virLogDumpAllFD("Caught abort signal", -1); - break; -#endif -#ifdef SIGBUS - case SIGBUS: - virLogDumpAllFD("Caught bus error", -1); - break; -#endif -#ifdef SIGUSR2 - case SIGUSR2: - virLogDumpAllFD("Caught User-defined signal 2", -1); - break; -#endif - default: - virLogDumpAllFD("Caught unexpected signal", -1); - break; - } - if ((virLogBuffer == NULL) || (virLogSize <= 0)) { - virLogDumpAllFD(" internal log buffer deactivated\n", -1); - return; - } - - virLogDumpAllFD(" dumping internal log buffer:\n", -1); - virLogDumpAllFD("\n\n ====== start of log =====\n\n", -1); - - /* - * Since we can't lock the buffer safely from a signal handler - * we mark it as empty in case of concurrent access, and proceed - * with the data, at worse we will output something a bit weird - * if another thread start logging messages at the same time. - * Note that virLogStr() uses virLogEnd for the computations and - * writes to the buffer and only then updates virLogLen and virLogStart - * so it's best to reset it first. - */ - oldLogStart = virLogStart; - oldLogLen = virLogLen; - virLogEnd = 0; - virLogLen = 0; - virLogStart = 0; - - while (oldLogLen > 0) { - if (oldLogStart + oldLogLen < virLogSize) { - virLogBuffer[oldLogStart + oldLogLen] = 0; - virLogDumpAllFD(&virLogBuffer[oldLogStart], oldLogLen); - oldLogStart += oldLogLen; - oldLogLen = 0; - } else { - len = virLogSize - oldLogStart; - virLogBuffer[virLogSize] = 0; - virLogDumpAllFD(&virLogBuffer[oldLogStart], len); - oldLogLen -= len; - oldLogStart = 0; - } - } - virLogDumpAllFD("\n\n ====== end of log =====\n\n", -1); -} - - -/** - * virLogSetDefaultPriority: - * @priority: the default priority level - * - * Set the default priority level, i.e. any logged data of a priority - * equal or superior to this level will be logged, unless a specific rule - * was defined for the log category of the message. - * - * Returns 0 if successful, -1 in case of error. - */ -int -virLogSetDefaultPriority(virLogPriority priority) -{ - if ((priority < VIR_LOG_DEBUG) || (priority > VIR_LOG_ERROR)) { - VIR_WARN("Ignoring invalid log level setting."); - return -1; - } - if (virLogInitialize() < 0) - return -1; - - virLogDefaultPriority = priority; - return 0; -} - - -/** - * virLogResetFilters: - * - * Removes the set of logging filters defined. - * - * Returns the number of filters removed - */ -static int -virLogResetFilters(void) -{ - int i; - - for (i = 0; i < virLogNbFilters;i++) - VIR_FREE(virLogFilters[i].match); - VIR_FREE(virLogFilters); - virLogNbFilters = 0; - return i; -} - - -/** - * virLogDefineFilter: - * @match: the pattern to match - * @priority: the priority to give to messages matching the pattern - * @flags: extra flags, see virLogFilterFlags enum - * - * Defines a pattern used for log filtering, it allow to select or - * reject messages independently of the default priority. - * The filter defines a rules that will apply only to messages matching - * the pattern (currently if @match is a substring of the message category) - * - * Returns -1 in case of failure or the filter number if successful - */ -int -virLogDefineFilter(const char *match, - virLogPriority priority, - unsigned int flags) -{ - int i; - char *mdup = NULL; - - virCheckFlags(VIR_LOG_STACK_TRACE, -1); - - if ((match == NULL) || (priority < VIR_LOG_DEBUG) || - (priority > VIR_LOG_ERROR)) - return -1; - - virLogLock(); - for (i = 0;i < virLogNbFilters;i++) { - if (STREQ(virLogFilters[i].match, match)) { - virLogFilters[i].priority = priority; - goto cleanup; - } - } - - mdup = strdup(match); - if (mdup == NULL) { - i = -1; - goto cleanup; - } - i = virLogNbFilters; - if (VIR_REALLOC_N(virLogFilters, virLogNbFilters + 1)) { - i = -1; - VIR_FREE(mdup); - goto cleanup; - } - virLogFilters[i].match = mdup; - virLogFilters[i].priority = priority; - virLogFilters[i].flags = flags; - virLogNbFilters++; -cleanup: - virLogUnlock(); - return i; -} - - -/** - * virLogFiltersCheck: - * @input: the input string - * - * Check the input of the message against the existing filters. Currently - * the match is just a substring check of the category used as the input - * string, a more subtle approach could be used instead - * - * Returns 0 if not matched or the new priority if found. - */ -static int -virLogFiltersCheck(const char *input, - unsigned int *flags) -{ - int ret = 0; - int i; - - virLogLock(); - for (i = 0;i < virLogNbFilters;i++) { - if (strstr(input, virLogFilters[i].match)) { - ret = virLogFilters[i].priority; - *flags = virLogFilters[i].flags; - break; - } - } - virLogUnlock(); - return ret; -} - - -/** - * virLogResetOutputs: - * - * Removes the set of logging output defined. - * - * Returns the number of output removed - */ -static int -virLogResetOutputs(void) -{ - int i; - - for (i = 0;i < virLogNbOutputs;i++) { - if (virLogOutputs[i].c != NULL) - virLogOutputs[i].c(virLogOutputs[i].data); - VIR_FREE(virLogOutputs[i].name); - } - VIR_FREE(virLogOutputs); - i = virLogNbOutputs; - virLogNbOutputs = 0; - return i; -} - - -/** - * virLogDefineOutput: - * @f: the function to call to output a message - * @c: the function to call to close the output (or NULL) - * @data: extra data passed as first arg to the function - * @priority: minimal priority for this filter, use 0 for none - * @dest: where to send output of this priority - * @name: optional name data associated with an output - * @flags: extra flag, currently unused - * - * Defines an output function for log messages. Each message once - * gone though filtering is emitted through each registered output. - * - * Returns -1 in case of failure or the output number if successful - */ -int -virLogDefineOutput(virLogOutputFunc f, - virLogCloseFunc c, - void *data, - virLogPriority priority, - virLogDestination dest, - const char *name, - unsigned int flags) -{ - int ret = -1; - char *ndup = NULL; - - virCheckFlags(0, -1); - - if (f == NULL) - return -1; - - if (dest == VIR_LOG_TO_SYSLOG || dest == VIR_LOG_TO_FILE) { - if (name == NULL) - return -1; - ndup = strdup(name); - if (ndup == NULL) - return -1; - } - - virLogLock(); - if (VIR_REALLOC_N(virLogOutputs, virLogNbOutputs + 1)) { - VIR_FREE(ndup); - goto cleanup; - } - ret = virLogNbOutputs++; - virLogOutputs[ret].logVersion = true; - virLogOutputs[ret].f = f; - virLogOutputs[ret].c = c; - virLogOutputs[ret].data = data; - virLogOutputs[ret].priority = priority; - virLogOutputs[ret].dest = dest; - virLogOutputs[ret].name = ndup; -cleanup: - virLogUnlock(); - return ret; -} - - -static int -virLogFormatString(char **msg, - int linenr, - const char *funcname, - virLogPriority priority, - const char *str) -{ - int ret; - - /* - * Be careful when changing the following log message formatting, we rely - * on it when stripping libvirt debug messages from qemu log files. So when - * changing this, you might also need to change the code there. - * virLogFormatString() function name is mentioned there so it's sufficient - * to just grep for it to find the right place. - */ - if ((funcname != NULL)) { - ret = virAsprintf(msg, "%d: %s : %s:%d : %s\n", - virThreadSelfID(), virLogPriorityString(priority), - funcname, linenr, str); - } else { - ret = virAsprintf(msg, "%d: %s : %s\n", - virThreadSelfID(), virLogPriorityString(priority), - str); - } - return ret; -} - - -static int -virLogVersionString(const char **rawmsg, - char **msg) -{ -#ifdef PACKAGER_VERSION -# ifdef PACKAGER -# define LOG_VERSION_STRING \ - "libvirt version: " VERSION ", package: " PACKAGER_VERSION " (" PACKAGER ")" -# else -# define LOG_VERSION_STRING \ - "libvirt version: " VERSION ", package: " PACKAGER_VERSION -# endif -#else -# define LOG_VERSION_STRING \ - "libvirt version: " VERSION -#endif - - *rawmsg = LOG_VERSION_STRING; - return virLogFormatString(msg, 0, NULL, VIR_LOG_INFO, LOG_VERSION_STRING); -} - - -/** - * virLogMessage: - * @source: where is that message coming from - * @priority: the priority level - * @filename: file where the message was emitted - * @linenr: line where the message was emitted - * @funcname: the function emitting the (debug) message - * @metadata: NULL or metadata array, terminated by an item with NULL key - * @fmt: the string format - * @...: the arguments - * - * Call the libvirt logger with some information. Based on the configuration - * the message may be stored, sent to output or just discarded - */ -void -virLogMessage(virLogSource source, - virLogPriority priority, - const char *filename, - int linenr, - const char *funcname, - virLogMetadataPtr metadata, - const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - virLogVMessage(source, priority, - filename, linenr, funcname, - metadata, fmt, ap); - va_end(ap); -} - - -/** - * virLogVMessage: - * @source: where is that message coming from - * @priority: the priority level - * @filename: file where the message was emitted - * @linenr: line where the message was emitted - * @funcname: the function emitting the (debug) message - * @metadata: NULL or metadata array, terminated by an item with NULL key - * @fmt: the string format - * @vargs: format args - * - * Call the libvirt logger with some information. Based on the configuration - * the message may be stored, sent to output or just discarded - */ -void -virLogVMessage(virLogSource source, - virLogPriority priority, - const char *filename, - int linenr, - const char *funcname, - virLogMetadataPtr metadata, - const char *fmt, - va_list vargs) -{ - static bool logVersionStderr = true; - char *str = NULL; - char *msg = NULL; - char timestamp[VIR_TIME_STRING_BUFLEN]; - int fprio, i, ret; - int saved_errno = errno; - int emit = 1; - unsigned int filterflags = 0; - - if (virLogInitialize() < 0) - return; - - if (fmt == NULL) - goto cleanup; - - /* - * check against list of specific logging patterns - */ - fprio = virLogFiltersCheck(filename, &filterflags); - if (fprio == 0) { - if (priority < virLogDefaultPriority) - emit = 0; - } else if (priority < fprio) { - emit = 0; - } - - if ((emit == 0) && ((virLogBuffer == NULL) || (virLogSize <= 0))) - goto cleanup; - - /* - * serialize the error message, add level and timestamp - */ - if (virVasprintf(&str, fmt, vargs) < 0) { - goto cleanup; - } - - ret = virLogFormatString(&msg, linenr, funcname, priority, str); - if (ret < 0) - goto cleanup; - - if (virTimeStringNowRaw(timestamp) < 0) - timestamp[0] = '\0'; - - /* - * Log based on defaults, first store in the history buffer, - * then if emit push the message on the outputs defined, if none - * use stderr. - * NOTE: the locking is a single point of contention for multiple - * threads, but avoid intermixing. Maybe set up locks per output - * to improve paralellism. - */ - virLogLock(); - virLogStr(timestamp); - virLogStr(msg); - virLogUnlock(); - if (emit == 0) - goto cleanup; - - virLogLock(); - for (i = 0; i < virLogNbOutputs; i++) { - if (priority >= virLogOutputs[i].priority) { - if (virLogOutputs[i].logVersion) { - const char *rawver; - char *ver = NULL; - if (virLogVersionString(&rawver, &ver) >= 0) - virLogOutputs[i].f(VIR_LOG_FROM_FILE, VIR_LOG_INFO, - __FILE__, __LINE__, __func__, - timestamp, NULL, 0, rawver, ver, - virLogOutputs[i].data); - VIR_FREE(ver); - virLogOutputs[i].logVersion = false; - } - virLogOutputs[i].f(source, priority, - filename, linenr, funcname, - timestamp, metadata, filterflags, - str, msg, virLogOutputs[i].data); - } - } - if ((virLogNbOutputs == 0) && (source != VIR_LOG_FROM_ERROR)) { - if (logVersionStderr) { - const char *rawver; - char *ver = NULL; - if (virLogVersionString(&rawver, &ver) >= 0) - virLogOutputToFd(VIR_LOG_FROM_FILE, VIR_LOG_INFO, - __FILE__, __LINE__, __func__, - timestamp, NULL, 0, rawver, ver, - (void *) STDERR_FILENO); - VIR_FREE(ver); - logVersionStderr = false; - } - virLogOutputToFd(source, priority, - filename, linenr, funcname, - timestamp, metadata, filterflags, - str, msg, (void *) STDERR_FILENO); - } - virLogUnlock(); - -cleanup: - VIR_FREE(str); - VIR_FREE(msg); - errno = saved_errno; -} - - -static void -virLogStackTraceToFd(int fd) -{ - void *array[100]; - int size; - static bool doneWarning = false; - const char *msg = "Stack trace not available on this platform\n"; - -#define STRIP_DEPTH 3 - size = backtrace(array, ARRAY_CARDINALITY(array)); - if (size) { - backtrace_symbols_fd(array + STRIP_DEPTH, size - STRIP_DEPTH, fd); - ignore_value(safewrite(fd, "\n", 1)); - } else if (!doneWarning) { - ignore_value(safewrite(fd, msg, strlen(msg))); - doneWarning = true; - } -#undef STRIP_DEPTH -} - -static void -virLogOutputToFd(virLogSource source ATTRIBUTE_UNUSED, - virLogPriority priority ATTRIBUTE_UNUSED, - const char *filename ATTRIBUTE_UNUSED, - int linenr ATTRIBUTE_UNUSED, - const char *funcname ATTRIBUTE_UNUSED, - const char *timestamp, - virLogMetadataPtr metadata ATTRIBUTE_UNUSED, - unsigned int flags, - const char *rawstr ATTRIBUTE_UNUSED, - const char *str, - void *data) -{ - int fd = (intptr_t) data; - char *msg; - - if (fd < 0) - return; - - if (virAsprintf(&msg, "%s: %s", timestamp, str) < 0) - return; - - ignore_value(safewrite(fd, msg, strlen(msg))); - VIR_FREE(msg); - - if (flags & VIR_LOG_STACK_TRACE) - virLogStackTraceToFd(fd); -} - - -static void -virLogCloseFd(void *data) -{ - int fd = (intptr_t) data; - - VIR_LOG_CLOSE(fd); -} - - -static int -virLogAddOutputToStderr(virLogPriority priority) -{ - if (virLogDefineOutput(virLogOutputToFd, NULL, (void *)2L, priority, - VIR_LOG_TO_STDERR, NULL, 0) < 0) - return -1; - return 0; -} - - -static int -virLogAddOutputToFile(virLogPriority priority, - const char *file) -{ - int fd; - - fd = open(file, O_CREAT | O_APPEND | O_WRONLY, S_IRUSR | S_IWUSR); - if (fd < 0) - return -1; - if (virLogDefineOutput(virLogOutputToFd, virLogCloseFd, - (void *)(intptr_t)fd, - priority, VIR_LOG_TO_FILE, file, 0) < 0) { - VIR_FORCE_CLOSE(fd); - return -1; - } - return 0; -} - - -#if HAVE_SYSLOG_H -static int -virLogPrioritySyslog(virLogPriority priority) -{ - switch (priority) { - case VIR_LOG_DEBUG: - return LOG_DEBUG; - case VIR_LOG_INFO: - return LOG_INFO; - case VIR_LOG_WARN: - return LOG_WARNING; - case VIR_LOG_ERROR: - return LOG_ERR; - default: - return LOG_ERR; - } -} - - -static void -virLogOutputToSyslog(virLogSource source ATTRIBUTE_UNUSED, - virLogPriority priority, - const char *filename ATTRIBUTE_UNUSED, - int linenr ATTRIBUTE_UNUSED, - const char *funcname ATTRIBUTE_UNUSED, - const char *timestamp ATTRIBUTE_UNUSED, - virLogMetadataPtr metadata ATTRIBUTE_UNUSED, - unsigned int flags, - const char *rawstr ATTRIBUTE_UNUSED, - const char *str, - void *data ATTRIBUTE_UNUSED) -{ - virCheckFlags(VIR_LOG_STACK_TRACE,); - - syslog(virLogPrioritySyslog(priority), "%s", str); -} - -static char *current_ident = NULL; - - -static void -virLogCloseSyslog(void *data ATTRIBUTE_UNUSED) -{ - closelog(); - VIR_FREE(current_ident); -} - - -static int -virLogAddOutputToSyslog(virLogPriority priority, - const char *ident) -{ - /* - * ident needs to be kept around on Solaris - */ - VIR_FREE(current_ident); - current_ident = strdup(ident); - if (current_ident == NULL) - return -1; - - openlog(current_ident, 0, 0); - if (virLogDefineOutput(virLogOutputToSyslog, virLogCloseSyslog, NULL, - priority, VIR_LOG_TO_SYSLOG, ident, 0) < 0) { - closelog(); - VIR_FREE(current_ident); - return -1; - } - return 0; -} - - -# if USE_JOURNALD -# define IOVEC_SET(iov, data, size) \ - do { \ - struct iovec *_i = &(iov); \ - _i->iov_base = (void*)(data); \ - _i->iov_len = (size); \ - } while (0) - -# define IOVEC_SET_STRING(iov, str) IOVEC_SET(iov, str, strlen(str)) - -/* Used for conversion of numbers to strings, and for length of binary data */ -# define JOURNAL_BUF_SIZE (MAX(INT_BUFSIZE_BOUND(int), sizeof(uint64_t))) - -struct journalState -{ - struct iovec *iov, *iov_end; - char (*bufs)[JOURNAL_BUF_SIZE], (*bufs_end)[JOURNAL_BUF_SIZE]; -}; - -static void -journalAddString(struct journalState *state, const char *field, - const char *value) -{ - static const char newline = '\n', equals = '='; - - if (strchr(value, '\n') != NULL) { - uint64_t nstr; - - /* If 'str' contains a newline, then we must - * encode the string length, since we can't - * rely on the newline for the field separator - */ - if (state->iov_end - state->iov < 5 || state->bufs == state->bufs_end) - return; /* Silently drop */ - nstr = htole64(strlen(value)); - memcpy(state->bufs[0], &nstr, sizeof(nstr)); - - IOVEC_SET_STRING(state->iov[0], field); - IOVEC_SET(state->iov[1], &newline, sizeof(newline)); - IOVEC_SET(state->iov[2], state->bufs[0], sizeof(nstr)); - state->bufs++; - state->iov += 3; - } else { - if (state->iov_end - state->iov < 4) - return; /* Silently drop */ - IOVEC_SET_STRING(state->iov[0], field); - IOVEC_SET(state->iov[1], (void *)&equals, sizeof(equals)); - state->iov += 2; - } - IOVEC_SET_STRING(state->iov[0], value); - IOVEC_SET(state->iov[1], (void *)&newline, sizeof(newline)); - state->iov += 2; -} - -static void -journalAddInt(struct journalState *state, const char *field, int value) -{ - static const char newline = '\n', equals = '='; - - char *num; - - if (state->iov_end - state->iov < 4 || state->bufs == state->bufs_end) - return; /* Silently drop */ - - num = virFormatIntDecimal(state->bufs[0], sizeof(state->bufs[0]), value); - - IOVEC_SET_STRING(state->iov[0], field); - IOVEC_SET(state->iov[1], (void *)&equals, sizeof(equals)); - IOVEC_SET_STRING(state->iov[2], num); - IOVEC_SET(state->iov[3], (void *)&newline, sizeof(newline)); - state->bufs++; - state->iov += 4; -} - -static int journalfd = -1; - -static void -virLogOutputToJournald(virLogSource source, - virLogPriority priority, - const char *filename, - int linenr, - const char *funcname, - const char *timestamp ATTRIBUTE_UNUSED, - virLogMetadataPtr metadata ATTRIBUTE_UNUSED, - unsigned int flags, - const char *rawstr, - const char *str ATTRIBUTE_UNUSED, - void *data ATTRIBUTE_UNUSED) -{ - virCheckFlags(VIR_LOG_STACK_TRACE,); - int buffd = -1; - struct msghdr mh; - struct sockaddr_un sa; - union { - struct cmsghdr cmsghdr; - uint8_t buf[CMSG_SPACE(sizeof(int))]; - } control; - struct cmsghdr *cmsg; - /* We use /dev/shm instead of /tmp here, since we want this to - * be a tmpfs, and one that is available from early boot on - * and where unprivileged users can create files. */ - char path[] = "/dev/shm/journal.XXXXXX"; - -# define NUM_FIELDS 6 - struct iovec iov[NUM_FIELDS * 5]; - char iov_bufs[NUM_FIELDS][JOURNAL_BUF_SIZE]; - struct journalState state; - - state.iov = iov; - state.iov_end = iov + ARRAY_CARDINALITY(iov); - state.bufs = iov_bufs; - state.bufs_end = iov_bufs + ARRAY_CARDINALITY(iov_bufs); - - journalAddString(&state ,"MESSAGE", rawstr); - journalAddInt(&state, "PRIORITY", priority); - journalAddString(&state, "LIBVIRT_SOURCE", - virLogSourceTypeToString(source)); - journalAddString(&state, "CODE_FILE", filename); - journalAddInt(&state, "CODE_LINE", linenr); - journalAddString(&state, "CODE_FUNC", funcname); - - memset(&sa, 0, sizeof(sa)); - sa.sun_family = AF_UNIX; - if (!virStrcpy(sa.sun_path, "/run/systemd/journal/socket", sizeof(sa.sun_path))) - return; - - memset(&mh, 0, sizeof(mh)); - mh.msg_name = &sa; - mh.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(sa.sun_path); - mh.msg_iov = iov; - mh.msg_iovlen = state.iov - iov; - - if (sendmsg(journalfd, &mh, MSG_NOSIGNAL) >= 0) - return; - - if (errno != EMSGSIZE && errno != ENOBUFS) - return; - - /* Message was too large, so dump to temporary file - * and pass an FD to the journal - */ - - /* NB: mkostemp is not declared async signal safe by - * POSIX, but this is Linux only code and the GLibc - * impl is safe enough, only using open() and inline - * asm to read a timestamp (falling back to gettimeofday - * on some arches - */ - if ((buffd = mkostemp(path, O_CLOEXEC|O_RDWR)) < 0) - return; - - if (unlink(path) < 0) - goto cleanup; - - if (writev(buffd, iov, state.iov - iov) < 0) - goto cleanup; - - mh.msg_iov = NULL; - mh.msg_iovlen = 0; - - memset(&control, 0, sizeof(control)); - mh.msg_control = &control; - mh.msg_controllen = sizeof(control); - - cmsg = CMSG_FIRSTHDR(&mh); - cmsg->cmsg_level = SOL_SOCKET; - cmsg->cmsg_type = SCM_RIGHTS; - cmsg->cmsg_len = CMSG_LEN(sizeof(int)); - memcpy(CMSG_DATA(cmsg), &buffd, sizeof(int)); - - mh.msg_controllen = cmsg->cmsg_len; - - sendmsg(journalfd, &mh, MSG_NOSIGNAL); - -cleanup: - VIR_LOG_CLOSE(buffd); -} - - -static void virLogCloseJournald(void *data ATTRIBUTE_UNUSED) -{ - VIR_LOG_CLOSE(journalfd); -} - - -static int virLogAddOutputToJournald(int priority) -{ - if ((journalfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) - return -1; - if (virSetInherit(journalfd, false) < 0) { - VIR_LOG_CLOSE(journalfd); - return -1; - } - if (virLogDefineOutput(virLogOutputToJournald, virLogCloseJournald, NULL, - priority, VIR_LOG_TO_JOURNALD, NULL, 0) < 0) { - return -1; - } - return 0; -} -# endif /* USE_JOURNALD */ -#endif /* HAVE_SYSLOG_H */ - -#define IS_SPACE(cur) \ - ((*cur == ' ') || (*cur == '\t') || (*cur == '\n') || \ - (*cur == '\r') || (*cur == '\\')) - - -/** - * virLogParseOutputs: - * @outputs: string defining a (set of) output(s) - * - * The format for an output can be: - * x:stderr - * output goes to stderr - * x:syslog:name - * use syslog for the output and use the given name as the ident - * x:file:file_path - * output to a file, with the given filepath - * In all case the x prefix is the minimal level, acting as a filter - * 0: everything - * 1: DEBUG - * 2: INFO - * 3: WARNING - * 4: ERROR - * - * Multiple output can be defined in a single @output, they just need to be - * separated by spaces. - * - * Returns the number of output parsed and installed or -1 in case of error - */ -int -virLogParseOutputs(const char *outputs) -{ - const char *cur = outputs, *str; - char *name; - char *abspath; - virLogPriority prio; - int ret = -1; - int count = 0; - - if (cur == NULL) - return -1; - - VIR_DEBUG("outputs=%s", outputs); - - virSkipSpaces(&cur); - while (*cur != 0) { - prio= virParseNumber(&cur); - if ((prio < VIR_LOG_DEBUG) || (prio > VIR_LOG_ERROR)) - goto cleanup; - if (*cur != ':') - goto cleanup; - cur++; - if (STREQLEN(cur, "stderr", 6)) { - cur += 6; - if (virLogAddOutputToStderr(prio) == 0) - count++; - } else if (STREQLEN(cur, "syslog", 6)) { - cur += 6; - if (*cur != ':') - goto cleanup; - cur++; - str = cur; - while ((*cur != 0) && (!IS_SPACE(cur))) - cur++; - if (str == cur) - goto cleanup; -#if HAVE_SYSLOG_H - name = strndup(str, cur - str); - if (name == NULL) - goto cleanup; - if (virLogAddOutputToSyslog(prio, name) == 0) - count++; - VIR_FREE(name); -#endif /* HAVE_SYSLOG_H */ - } else if (STREQLEN(cur, "file", 4)) { - cur += 4; - if (*cur != ':') - goto cleanup; - cur++; - str = cur; - while ((*cur != 0) && (!IS_SPACE(cur))) - cur++; - if (str == cur) - goto cleanup; - name = strndup(str, cur - str); - if (name == NULL) - goto cleanup; - if (virFileAbsPath(name, &abspath) < 0) { - VIR_FREE(name); - return -1; /* skip warning here because setting was fine */ - } - if (virLogAddOutputToFile(prio, abspath) == 0) - count++; - VIR_FREE(name); - VIR_FREE(abspath); - } else if (STREQLEN(cur, "journald", 8)) { - cur += 8; -#if USE_JOURNALD - if (virLogAddOutputToJournald(prio) == 0) - count++; -#endif /* USE_JOURNALD */ - } else { - goto cleanup; - } - virSkipSpaces(&cur); - } - ret = count; -cleanup: - if (ret == -1) - VIR_WARN("Ignoring invalid log output setting."); - return ret; -} - - -/** - * virLogParseFilters: - * @filters: string defining a (set of) filter(s) - * - * The format for a filter is: - * x:name - * where name is a match string - * the x prefix is the minimal level where the messages should be logged - * 1: DEBUG - * 2: INFO - * 3: WARNING - * 4: ERROR - * - * Multiple filter can be defined in a single @filters, they just need to be - * separated by spaces. - * - * Returns the number of filter parsed and installed or -1 in case of error - */ -int -virLogParseFilters(const char *filters) -{ - const char *cur = filters, *str; - char *name; - virLogPriority prio; - int ret = -1; - int count = 0; - - if (cur == NULL) - return -1; - - virSkipSpaces(&cur); - while (*cur != 0) { - unsigned int flags = 0; - prio= virParseNumber(&cur); - if ((prio < VIR_LOG_DEBUG) || (prio > VIR_LOG_ERROR)) - goto cleanup; - if (*cur != ':') - goto cleanup; - cur++; - if (*cur == '+') { - flags |= VIR_LOG_STACK_TRACE; - cur++; - } - str = cur; - while ((*cur != 0) && (!IS_SPACE(cur))) - cur++; - if (str == cur) - goto cleanup; - name = strndup(str, cur - str); - if (name == NULL) - goto cleanup; - if (virLogDefineFilter(name, prio, flags) >= 0) - count++; - VIR_FREE(name); - virSkipSpaces(&cur); - } - ret = count; -cleanup: - if (ret == -1) - VIR_WARN("Ignoring invalid log filter setting."); - return ret; -} - - -/** - * virLogGetDefaultPriority: - * - * Returns the current logging priority level. - */ -virLogPriority -virLogGetDefaultPriority(void) -{ - return virLogDefaultPriority; -} - - -/** - * virLogGetFilters: - * - * Returns a string listing the current filters, in the format originally - * specified in the config file or environment. Caller must free the - * result. - */ -char * -virLogGetFilters(void) -{ - int i; - virBuffer filterbuf = VIR_BUFFER_INITIALIZER; - - virLogLock(); - for (i = 0; i < virLogNbFilters; i++) { - const char *sep = ":"; - if (virLogFilters[i].flags & VIR_LOG_STACK_TRACE) - sep = ":+"; - virBufferAsprintf(&filterbuf, "%d%s%s ", - virLogFilters[i].priority, - sep, - virLogFilters[i].match); - } - virLogUnlock(); - - if (virBufferError(&filterbuf)) { - virBufferFreeAndReset(&filterbuf); - return NULL; - } - - return virBufferContentAndReset(&filterbuf); -} - - -/** - * virLogGetOutputs: - * - * Returns a string listing the current outputs, in the format originally - * specified in the config file or environment. Caller must free the - * result. - */ -char * -virLogGetOutputs(void) -{ - int i; - virBuffer outputbuf = VIR_BUFFER_INITIALIZER; - - virLogLock(); - for (i = 0; i < virLogNbOutputs; i++) { - virLogDestination dest = virLogOutputs[i].dest; - if (i) - virBufferAsprintf(&outputbuf, " "); - switch (dest) { - case VIR_LOG_TO_SYSLOG: - case VIR_LOG_TO_FILE: - virBufferAsprintf(&outputbuf, "%d:%s:%s", - virLogOutputs[i].priority, - virLogOutputString(dest), - virLogOutputs[i].name); - break; - default: - virBufferAsprintf(&outputbuf, "%d:%s", - virLogOutputs[i].priority, - virLogOutputString(dest)); - } - } - virLogUnlock(); - - if (virBufferError(&outputbuf)) { - virBufferFreeAndReset(&outputbuf); - return NULL; - } - - return virBufferContentAndReset(&outputbuf); -} - - -/** - * virLogGetNbFilters: - * - * Returns the current number of defined log filters. - */ -int -virLogGetNbFilters(void) -{ - return virLogNbFilters; -} - - -/** - * virLogGetNbOutputs: - * - * Returns the current number of defined log outputs. - */ -int -virLogGetNbOutputs(void) -{ - return virLogNbOutputs; -} - - -/** - * virLogParseDefaultPriority: - * @priority: string defining the desired logging level - * - * Parses and sets the default log priority level. It can take a string or - * number corresponding to the following levels: - * 1: DEBUG - * 2: INFO - * 3: WARNING - * 4: ERROR - * - * Returns the parsed log level or -1 on error. - */ -int -virLogParseDefaultPriority(const char *priority) -{ - int ret = -1; - - if (STREQ(priority, "1") || STREQ(priority, "debug")) - ret = virLogSetDefaultPriority(VIR_LOG_DEBUG); - else if (STREQ(priority, "2") || STREQ(priority, "info")) - ret = virLogSetDefaultPriority(VIR_LOG_INFO); - else if (STREQ(priority, "3") || STREQ(priority, "warning")) - ret = virLogSetDefaultPriority(VIR_LOG_WARN); - else if (STREQ(priority, "4") || STREQ(priority, "error")) - ret = virLogSetDefaultPriority(VIR_LOG_ERROR); - else - VIR_WARN("Ignoring invalid log level setting"); - - return ret; -} - - -/** - * virLogSetFromEnv: - * - * Sets virLogDefaultPriority, virLogFilters and virLogOutputs based on - * environment variables. - */ -void -virLogSetFromEnv(void) -{ - char *debugEnv; - - debugEnv = getenv("LIBVIRT_DEBUG"); - if (debugEnv && *debugEnv) - virLogParseDefaultPriority(debugEnv); - debugEnv = getenv("LIBVIRT_LOG_FILTERS"); - if (debugEnv && *debugEnv) - virLogParseFilters(debugEnv); - debugEnv = getenv("LIBVIRT_LOG_OUTPUTS"); - if (debugEnv && *debugEnv) - virLogParseOutputs(debugEnv); -} diff --git a/src/util/logging.h b/src/util/logging.h deleted file mode 100644 index 028b791..0000000 --- a/src/util/logging.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * logging.h: internal logging and debugging - * - * Copyright (C) 2006-2008, 2011-2012 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __VIRTLOG_H_ -# define __VIRTLOG_H_ - -# include "internal.h" -# include "virbuffer.h" - -/* - * To be made public - */ -typedef enum { - VIR_LOG_DEBUG = 1, - VIR_LOG_INFO, - VIR_LOG_WARN, - VIR_LOG_ERROR, -} virLogPriority; - -# define VIR_LOG_DEFAULT VIR_LOG_WARN - -typedef enum { - VIR_LOG_TO_STDERR = 1, - VIR_LOG_TO_SYSLOG, - VIR_LOG_TO_FILE, - VIR_LOG_TO_JOURNALD, -} virLogDestination; - -typedef enum { - VIR_LOG_FROM_FILE, - VIR_LOG_FROM_ERROR, - VIR_LOG_FROM_AUDIT, - VIR_LOG_FROM_TRACE, - VIR_LOG_FROM_LIBRARY, - - VIR_LOG_FROM_LAST, -} virLogSource; - -/* - * If configured with --enable-debug=yes then library calls - * are printed to stderr for debugging or to an appropriate channel - * defined at runtime from the libvirt daemon configuration file - */ -# ifdef ENABLE_DEBUG -# define VIR_DEBUG_INT(src, filename, linenr, funcname, ...) \ - virLogMessage(src, VIR_LOG_DEBUG, filename, linenr, funcname, NULL, __VA_ARGS__) -# else -/** - * virLogEatParams: - * - * Do nothing but eat parameters. - */ -static inline void virLogEatParams(virLogSource unused, ...) -{ - /* Silence gcc */ - unused = unused; -} -# define VIR_DEBUG_INT(src, filename, linenr, funcname, ...) \ - virLogEatParams(src, filename, linenr, funcname, __VA_ARGS__) -# endif /* !ENABLE_DEBUG */ - -# define VIR_INFO_INT(src, filename, linenr, funcname, ...) \ - virLogMessage(src, VIR_LOG_INFO, filename, linenr, funcname, NULL, __VA_ARGS__) -# define VIR_WARN_INT(src, filename, linenr, funcname, ...) \ - virLogMessage(src, VIR_LOG_WARN, filename, linenr, funcname, NULL, __VA_ARGS__) -# define VIR_ERROR_INT(src, filename, linenr, funcname, ...) \ - virLogMessage(src, VIR_LOG_ERROR, filename, linenr, funcname, NULL, __VA_ARGS__) - -# define VIR_DEBUG(...) \ - VIR_DEBUG_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__) -# define VIR_INFO(...) \ - VIR_INFO_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__) -# define VIR_WARN(...) \ - VIR_WARN_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__) -# define VIR_ERROR(...) \ - VIR_ERROR_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__) - - -struct _virLogMetadata { - const char *key; - const char *s; /* String value, or NULL to use "i" */ - int i; -}; - -typedef struct _virLogMetadata virLogMetadata; -typedef struct _virLogMetadata *virLogMetadataPtr; - -/** - * virLogOutputFunc: - * @src: the src for the message - * @priority: the priority for the message - * @filename: file where the message was emitted - * @linenr: line where the message was emitted - * @funcname: the function emitting the message - * @timestamp: zero terminated string with timestamp of the message - * @metadata: NULL or metadata array, terminated by an item with NULL key - * @flags: flags associated with the message - * @rawstr: the unformatted message to log, zero terminated - * @str: the message to log, preformatted and zero terminated - * @data: extra output logging data - * - * Callback function used to output messages - */ -typedef void (*virLogOutputFunc) (virLogSource src, - virLogPriority priority, - const char *filename, - int linenr, - const char *funcname, - const char *timestamp, - virLogMetadataPtr metadata, - unsigned int flags, - const char *rawstr, - const char *str, - void *data); - -/** - * virLogCloseFunc: - * @data: extra output logging data - * - * Callback function used to close a log output - */ -typedef void (*virLogCloseFunc) (void *data); - -typedef enum { - VIR_LOG_STACK_TRACE = (1 << 0), -} virLogFlags; - -extern int virLogGetNbFilters(void); -extern int virLogGetNbOutputs(void); -extern char *virLogGetFilters(void); -extern char *virLogGetOutputs(void); -extern virLogPriority virLogGetDefaultPriority(void); -extern int virLogSetDefaultPriority(virLogPriority priority); -extern void virLogSetFromEnv(void); -extern int virLogDefineFilter(const char *match, - virLogPriority priority, - unsigned int flags); -extern int virLogDefineOutput(virLogOutputFunc f, - virLogCloseFunc c, - void *data, - virLogPriority priority, - virLogDestination dest, - const char *name, - unsigned int flags); - -/* - * Internal logging API - */ - -extern void virLogLock(void); -extern void virLogUnlock(void); -extern int virLogReset(void); -extern int virLogParseDefaultPriority(const char *priority); -extern int virLogParseFilters(const char *filters); -extern int virLogParseOutputs(const char *output); -extern void virLogMessage(virLogSource src, - virLogPriority priority, - const char *filename, - int linenr, - const char *funcname, - virLogMetadataPtr metadata, - const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(7, 8); -extern void virLogVMessage(virLogSource src, - virLogPriority priority, - const char *filename, - int linenr, - const char *funcname, - virLogMetadataPtr metadata, - const char *fmt, - va_list vargs) ATTRIBUTE_FMT_PRINTF(7, 0); -extern int virLogSetBufferSize(int size); -extern void virLogEmergencyDumpAll(int signum); -#endif diff --git a/src/util/memory.c b/src/util/memory.c index b224f30..186d3b6 100644 --- a/src/util/memory.c +++ b/src/util/memory.c @@ -24,7 +24,7 @@ #include <stdlib.h> #include "memory.h" -#include "logging.h" +#include "virlog.h" #if TEST_OOM static int testMallocNext = 0; diff --git a/src/util/pci.c b/src/util/pci.c index bf46fca..7adce75 100644 --- a/src/util/pci.c +++ b/src/util/pci.c @@ -34,7 +34,7 @@ #include <unistd.h> #include <stdlib.h> -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "vircommand.h" #include "virterror_internal.h" diff --git a/src/util/storage_file.c b/src/util/storage_file.c index eebf59a..6c3390b 100644 --- a/src/util/storage_file.c +++ b/src/util/storage_file.c @@ -37,7 +37,7 @@ #include "dirname.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "c-ctype.h" #include "vircommand.h" diff --git a/src/util/sysinfo.c b/src/util/sysinfo.c index e21cbfd..5690f95 100644 --- a/src/util/sysinfo.c +++ b/src/util/sysinfo.c @@ -33,7 +33,7 @@ #include "virterror_internal.h" #include "sysinfo.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "vircommand.h" diff --git a/src/util/util.c b/src/util/util.c index f8ba7b4..f941dfd 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -76,7 +76,7 @@ #include "c-ctype.h" #include "dirname.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "virbuffer.h" #include "util.h" #include "storage_file.h" diff --git a/src/util/uuid.c b/src/util/uuid.c index 5c3b32c..6efc7be 100644 --- a/src/util/uuid.c +++ b/src/util/uuid.c @@ -37,7 +37,7 @@ #include "internal.h" #include "util.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "virfile.h" #include "virrandom.h" diff --git a/src/util/viraudit.c b/src/util/viraudit.c index 9bdc5ed..c4e0129 100644 --- a/src/util/viraudit.c +++ b/src/util/viraudit.c @@ -28,7 +28,7 @@ #include <unistd.h> #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "viraudit.h" #include "util.h" #include "virfile.h" diff --git a/src/util/virauth.c b/src/util/virauth.c index 6d9935d..a1bad6a 100644 --- a/src/util/virauth.c +++ b/src/util/virauth.c @@ -27,7 +27,7 @@ #include "virauth.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "virterror_internal.h" #include "configmake.h" diff --git a/src/util/virauthconfig.c b/src/util/virauthconfig.c index 49a4466..46ba040 100644 --- a/src/util/virauthconfig.c +++ b/src/util/virauthconfig.c @@ -27,7 +27,7 @@ #include "virkeyfile.h" #include "memory.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index e9fc67f..82e6613 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -41,7 +41,7 @@ #include "util.h" #include "memory.h" #include "vircgroup.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "virhash.h" #include "virhashcode.h" diff --git a/src/util/vircommand.c b/src/util/vircommand.c index 3046658..7bed04e 100644 --- a/src/util/vircommand.c +++ b/src/util/vircommand.c @@ -37,7 +37,7 @@ #include "memory.h" #include "virterror_internal.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "virpidfile.h" #include "virprocess.h" diff --git a/src/util/virconf.c b/src/util/virconf.c index 221a1eb..c12a0bb 100644 --- a/src/util/virconf.c +++ b/src/util/virconf.c @@ -35,7 +35,7 @@ #include "virconf.h" #include "util.h" #include "c-ctype.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "virfile.h" diff --git a/src/util/virdbus.c b/src/util/virdbus.c index 2a96778..b6c6642 100644 --- a/src/util/virdbus.c +++ b/src/util/virdbus.c @@ -24,7 +24,7 @@ #include "virdbus.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "threads.h" #define VIR_FROM_THIS VIR_FROM_DBUS diff --git a/src/util/virdnsmasq.c b/src/util/virdnsmasq.c index 4a32f49..7bb42fc 100644 --- a/src/util/virdnsmasq.c +++ b/src/util/virdnsmasq.c @@ -45,7 +45,7 @@ #include "vircommand.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #define VIR_FROM_THIS VIR_FROM_NETWORK diff --git a/src/util/virebtables.c b/src/util/virebtables.c index 8474b2a..8333c38 100644 --- a/src/util/virebtables.c +++ b/src/util/virebtables.c @@ -44,7 +44,7 @@ #include "vircommand.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "threads.h" #if HAVE_FIREWALLD diff --git a/src/util/virevent.c b/src/util/virevent.c index 7d11f85..573b4ac 100644 --- a/src/util/virevent.c +++ b/src/util/virevent.c @@ -25,7 +25,7 @@ #include "virevent.h" #include "vireventpoll.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include <stdlib.h> diff --git a/src/util/vireventpoll.c b/src/util/vireventpoll.c index 9fd196d..0256d83 100644 --- a/src/util/vireventpoll.c +++ b/src/util/vireventpoll.c @@ -32,7 +32,7 @@ #include <fcntl.h> #include "threads.h" -#include "logging.h" +#include "virlog.h" #include "vireventpoll.h" #include "memory.h" #include "util.h" diff --git a/src/util/virfile.c b/src/util/virfile.c index d77b726..30294a2 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -41,7 +41,7 @@ #include "configmake.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_NONE diff --git a/src/util/virhash.c b/src/util/virhash.c index 1576dd3..077abca 100644 --- a/src/util/virhash.c +++ b/src/util/virhash.c @@ -27,7 +27,7 @@ #include "virterror_internal.h" #include "virhash.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virhashcode.h" #include "virrandom.h" diff --git a/src/util/virhooks.c b/src/util/virhooks.c index 4a732ff..2e8ecf2 100644 --- a/src/util/virhooks.c +++ b/src/util/virhooks.c @@ -33,7 +33,7 @@ #include "virterror_internal.h" #include "virhooks.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "virfile.h" #include "configmake.h" diff --git a/src/util/viriptables.c b/src/util/viriptables.c index 8831920..ee3e9a0 100644 --- a/src/util/viriptables.c +++ b/src/util/viriptables.c @@ -42,7 +42,7 @@ #include "vircommand.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "threads.h" #if HAVE_FIREWALLD diff --git a/src/util/virjson.c b/src/util/virjson.c index a07dd5c..18a28ba 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -26,7 +26,7 @@ #include "virjson.h" #include "memory.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #if HAVE_YAJL diff --git a/src/util/virkeyfile.c b/src/util/virkeyfile.c index 3c2ce26..b43b92d 100644 --- a/src/util/virkeyfile.c +++ b/src/util/virkeyfile.c @@ -26,7 +26,7 @@ #include <stdio.h> #include "c-ctype.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "util.h" #include "virhash.h" diff --git a/src/util/virlockspace.c b/src/util/virlockspace.c index 99b6182..b652294 100644 --- a/src/util/virlockspace.c +++ b/src/util/virlockspace.c @@ -22,7 +22,7 @@ #include <config.h> #include "virlockspace.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "virterror_internal.h" #include "util.h" diff --git a/src/util/virlog.c b/src/util/virlog.c new file mode 100644 index 0000000..d179de2 --- /dev/null +++ b/src/util/virlog.c @@ -0,0 +1,1590 @@ +/* + * logging.c: internal logging and debugging + * + * Copyright (C) 2008, 2010-2012 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include <config.h> + +#include <stdio.h> +#include <stdarg.h> +#include <stdlib.h> +#include <time.h> +#include <sys/time.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <signal.h> +#include <execinfo.h> +#if HAVE_SYSLOG_H +# include <syslog.h> +#endif +#include <sys/socket.h> +#if HAVE_SYS_UN_H +# include <sys/un.h> +#endif + +#include "virterror_internal.h" +#include "virlog.h" +#include "memory.h" +#include "util.h" +#include "virbuffer.h" +#include "threads.h" +#include "virfile.h" +#include "virtime.h" +#include "intprops.h" + +/* Journald output is only supported on Linux new enough to expose + * htole64. */ +#if HAVE_SYSLOG_H && defined(__linux__) && HAVE_DECL_HTOLE64 +# define USE_JOURNALD 1 +#endif + +#define VIR_FROM_THIS VIR_FROM_NONE + +VIR_ENUM_DECL(virLogSource) +VIR_ENUM_IMPL(virLogSource, VIR_LOG_FROM_LAST, + "file", + "error", + "audit", + "trace", + "library"); + +/* + * A logging buffer to keep some history over logs + */ + +static int virLogSize = 64 * 1024; +static char *virLogBuffer = NULL; +static int virLogLen = 0; +static int virLogStart = 0; +static int virLogEnd = 0; + +/* + * Filters are used to refine the rules on what to keep or drop + * based on a matching pattern (currently a substring) + */ +struct _virLogFilter { + const char *match; + virLogPriority priority; + unsigned int flags; +}; +typedef struct _virLogFilter virLogFilter; +typedef virLogFilter *virLogFilterPtr; + +static virLogFilterPtr virLogFilters = NULL; +static int virLogNbFilters = 0; + +/* + * Outputs are used to emit the messages retained + * after filtering, multiple output can be used simultaneously + */ +struct _virLogOutput { + bool logVersion; + void *data; + virLogOutputFunc f; + virLogCloseFunc c; + virLogPriority priority; + virLogDestination dest; + const char *name; +}; +typedef struct _virLogOutput virLogOutput; +typedef virLogOutput *virLogOutputPtr; + +static virLogOutputPtr virLogOutputs = NULL; +static int virLogNbOutputs = 0; + +/* + * Default priorities + */ +static virLogPriority virLogDefaultPriority = VIR_LOG_DEFAULT; + +static int virLogResetFilters(void); +static int virLogResetOutputs(void); +static void virLogOutputToFd(virLogSource src, + virLogPriority priority, + const char *filename, + int linenr, + const char *funcname, + const char *timestamp, + virLogMetadataPtr metadata, + unsigned int flags, + const char *rawstr, + const char *str, + void *data); + +/* + * Logs accesses must be serialized though a mutex + */ +virMutex virLogMutex; + +void +virLogLock(void) +{ + virMutexLock(&virLogMutex); +} + + +void +virLogUnlock(void) +{ + virMutexUnlock(&virLogMutex); +} + + +static const char * +virLogOutputString(virLogDestination ldest) +{ + switch (ldest) { + case VIR_LOG_TO_STDERR: + return "stderr"; + case VIR_LOG_TO_SYSLOG: + return "syslog"; + case VIR_LOG_TO_FILE: + return "file"; + case VIR_LOG_TO_JOURNALD: + return "journald"; + } + return "unknown"; +} + + +static const char * +virLogPriorityString(virLogPriority lvl) +{ + switch (lvl) { + case VIR_LOG_DEBUG: + return "debug"; + case VIR_LOG_INFO: + return "info"; + case VIR_LOG_WARN: + return "warning"; + case VIR_LOG_ERROR: + return "error"; + } + return "unknown"; +} + + +static int +virLogOnceInit(void) +{ + const char *pbm = NULL; + + if (virMutexInit(&virLogMutex) < 0) + return -1; + + virLogLock(); + if (VIR_ALLOC_N(virLogBuffer, virLogSize + 1) < 0) { + /* + * The debug buffer is not a critical component, allow startup + * even in case of failure to allocate it in case of a + * configuration mistake. + */ + virLogSize = 64 * 1024; + if (VIR_ALLOC_N(virLogBuffer, virLogSize + 1) < 0) { + pbm = "Failed to allocate debug buffer: deactivating debug log\n"; + virLogSize = 0; + } else { + pbm = "Failed to allocate debug buffer: reduced to 64 kB\n"; + } + } + virLogLen = 0; + virLogStart = 0; + virLogEnd = 0; + virLogDefaultPriority = VIR_LOG_DEFAULT; + virLogUnlock(); + if (pbm) + VIR_WARN("%s", pbm); + return 0; +} + +VIR_ONCE_GLOBAL_INIT(virLog) + + +/** + * virLogSetBufferSize: + * @size: size of the buffer in kilobytes or <= 0 to deactivate + * + * Dynamically set the size or deactivate the logging buffer used to keep + * a trace of all recent debug output. Note that the content of the buffer + * is lost if it gets reallocated. + * + * Return -1 in case of failure or 0 in case of success + */ +int +virLogSetBufferSize(int size) +{ + int ret = 0; + int oldsize; + char *oldLogBuffer; + const char *pbm = NULL; + + if (size < 0) + size = 0; + + if (virLogInitialize() < 0) + return -1; + + if (size * 1024 == virLogSize) + return ret; + + virLogLock(); + + oldsize = virLogSize; + oldLogBuffer = virLogBuffer; + + if (INT_MAX / 1024 <= size) { + pbm = "Requested log size of %d kB too large\n"; + ret = -1; + goto error; + } + + virLogSize = size * 1024; + if (VIR_ALLOC_N(virLogBuffer, virLogSize + 1) < 0) { + pbm = "Failed to allocate debug buffer of %d kB\n"; + virLogBuffer = oldLogBuffer; + virLogSize = oldsize; + ret = -1; + goto error; + } + VIR_FREE(oldLogBuffer); + virLogLen = 0; + virLogStart = 0; + virLogEnd = 0; + +error: + virLogUnlock(); + if (pbm) + VIR_ERROR(pbm, size); + return ret; +} + + +/** + * virLogReset: + * + * Reset the logging module to its default initial state + * + * Returns 0 if successful, and -1 in case or error + */ +int +virLogReset(void) +{ + if (virLogInitialize() < 0) + return -1; + + virLogLock(); + virLogResetFilters(); + virLogResetOutputs(); + virLogLen = 0; + virLogStart = 0; + virLogEnd = 0; + virLogDefaultPriority = VIR_LOG_DEFAULT; + virLogUnlock(); + return 0; +} + + +/* + * Store a string in the ring buffer + */ +static void +virLogStr(const char *str) +{ + int tmp; + int len; + + if ((str == NULL) || (virLogBuffer == NULL) || (virLogSize <= 0)) + return; + len = strlen(str); + if (len >= virLogSize) + return; + + /* + * copy the data and reset the end, we cycle over the end of the buffer + */ + if (virLogEnd + len >= virLogSize) { + tmp = virLogSize - virLogEnd; + memcpy(&virLogBuffer[virLogEnd], str, tmp); + memcpy(&virLogBuffer[0], &str[tmp], len - tmp); + virLogEnd = len - tmp; + } else { + memcpy(&virLogBuffer[virLogEnd], str, len); + virLogEnd += len; + } + virLogBuffer[virLogEnd] = 0; + /* + * Update the log length, and if full move the start index + */ + virLogLen += len; + if (virLogLen > virLogSize) { + tmp = virLogLen - virLogSize; + virLogLen = virLogSize; + virLogStart += tmp; + if (virLogStart >= virLogSize) + virLogStart -= virLogSize; + } +} + + +static void +virLogDumpAllFD(const char *msg, int len) +{ + int i, found = 0; + + if (len <= 0) + len = strlen(msg); + + for (i = 0; i < virLogNbOutputs;i++) { + if (virLogOutputs[i].f == virLogOutputToFd) { + int fd = (intptr_t) virLogOutputs[i].data; + + if (fd >= 0) { + ignore_value(safewrite(fd, msg, len)); + found = 1; + } + } + } + if (!found) + ignore_value(safewrite(STDERR_FILENO, msg, len)); +} + + +/** + * virLogEmergencyDumpAll: + * @signum: the signal number + * + * Emergency function called, possibly from a signal handler. + * It need to output the debug ring buffer through the log + * output which are safe to use from a signal handler. + * In case none is found it is emitted to standard error. + */ +void +virLogEmergencyDumpAll(int signum) +{ + int len; + int oldLogStart, oldLogLen; + + switch (signum) { +#ifdef SIGFPE + case SIGFPE: + virLogDumpAllFD("Caught signal Floating-point exception", -1); + break; +#endif +#ifdef SIGSEGV + case SIGSEGV: + virLogDumpAllFD("Caught Segmentation violation", -1); + break; +#endif +#ifdef SIGILL + case SIGILL: + virLogDumpAllFD("Caught illegal instruction", -1); + break; +#endif +#ifdef SIGABRT + case SIGABRT: + virLogDumpAllFD("Caught abort signal", -1); + break; +#endif +#ifdef SIGBUS + case SIGBUS: + virLogDumpAllFD("Caught bus error", -1); + break; +#endif +#ifdef SIGUSR2 + case SIGUSR2: + virLogDumpAllFD("Caught User-defined signal 2", -1); + break; +#endif + default: + virLogDumpAllFD("Caught unexpected signal", -1); + break; + } + if ((virLogBuffer == NULL) || (virLogSize <= 0)) { + virLogDumpAllFD(" internal log buffer deactivated\n", -1); + return; + } + + virLogDumpAllFD(" dumping internal log buffer:\n", -1); + virLogDumpAllFD("\n\n ====== start of log =====\n\n", -1); + + /* + * Since we can't lock the buffer safely from a signal handler + * we mark it as empty in case of concurrent access, and proceed + * with the data, at worse we will output something a bit weird + * if another thread start logging messages at the same time. + * Note that virLogStr() uses virLogEnd for the computations and + * writes to the buffer and only then updates virLogLen and virLogStart + * so it's best to reset it first. + */ + oldLogStart = virLogStart; + oldLogLen = virLogLen; + virLogEnd = 0; + virLogLen = 0; + virLogStart = 0; + + while (oldLogLen > 0) { + if (oldLogStart + oldLogLen < virLogSize) { + virLogBuffer[oldLogStart + oldLogLen] = 0; + virLogDumpAllFD(&virLogBuffer[oldLogStart], oldLogLen); + oldLogStart += oldLogLen; + oldLogLen = 0; + } else { + len = virLogSize - oldLogStart; + virLogBuffer[virLogSize] = 0; + virLogDumpAllFD(&virLogBuffer[oldLogStart], len); + oldLogLen -= len; + oldLogStart = 0; + } + } + virLogDumpAllFD("\n\n ====== end of log =====\n\n", -1); +} + + +/** + * virLogSetDefaultPriority: + * @priority: the default priority level + * + * Set the default priority level, i.e. any logged data of a priority + * equal or superior to this level will be logged, unless a specific rule + * was defined for the log category of the message. + * + * Returns 0 if successful, -1 in case of error. + */ +int +virLogSetDefaultPriority(virLogPriority priority) +{ + if ((priority < VIR_LOG_DEBUG) || (priority > VIR_LOG_ERROR)) { + VIR_WARN("Ignoring invalid log level setting."); + return -1; + } + if (virLogInitialize() < 0) + return -1; + + virLogDefaultPriority = priority; + return 0; +} + + +/** + * virLogResetFilters: + * + * Removes the set of logging filters defined. + * + * Returns the number of filters removed + */ +static int +virLogResetFilters(void) +{ + int i; + + for (i = 0; i < virLogNbFilters;i++) + VIR_FREE(virLogFilters[i].match); + VIR_FREE(virLogFilters); + virLogNbFilters = 0; + return i; +} + + +/** + * virLogDefineFilter: + * @match: the pattern to match + * @priority: the priority to give to messages matching the pattern + * @flags: extra flags, see virLogFilterFlags enum + * + * Defines a pattern used for log filtering, it allow to select or + * reject messages independently of the default priority. + * The filter defines a rules that will apply only to messages matching + * the pattern (currently if @match is a substring of the message category) + * + * Returns -1 in case of failure or the filter number if successful + */ +int +virLogDefineFilter(const char *match, + virLogPriority priority, + unsigned int flags) +{ + int i; + char *mdup = NULL; + + virCheckFlags(VIR_LOG_STACK_TRACE, -1); + + if ((match == NULL) || (priority < VIR_LOG_DEBUG) || + (priority > VIR_LOG_ERROR)) + return -1; + + virLogLock(); + for (i = 0;i < virLogNbFilters;i++) { + if (STREQ(virLogFilters[i].match, match)) { + virLogFilters[i].priority = priority; + goto cleanup; + } + } + + mdup = strdup(match); + if (mdup == NULL) { + i = -1; + goto cleanup; + } + i = virLogNbFilters; + if (VIR_REALLOC_N(virLogFilters, virLogNbFilters + 1)) { + i = -1; + VIR_FREE(mdup); + goto cleanup; + } + virLogFilters[i].match = mdup; + virLogFilters[i].priority = priority; + virLogFilters[i].flags = flags; + virLogNbFilters++; +cleanup: + virLogUnlock(); + return i; +} + + +/** + * virLogFiltersCheck: + * @input: the input string + * + * Check the input of the message against the existing filters. Currently + * the match is just a substring check of the category used as the input + * string, a more subtle approach could be used instead + * + * Returns 0 if not matched or the new priority if found. + */ +static int +virLogFiltersCheck(const char *input, + unsigned int *flags) +{ + int ret = 0; + int i; + + virLogLock(); + for (i = 0;i < virLogNbFilters;i++) { + if (strstr(input, virLogFilters[i].match)) { + ret = virLogFilters[i].priority; + *flags = virLogFilters[i].flags; + break; + } + } + virLogUnlock(); + return ret; +} + + +/** + * virLogResetOutputs: + * + * Removes the set of logging output defined. + * + * Returns the number of output removed + */ +static int +virLogResetOutputs(void) +{ + int i; + + for (i = 0;i < virLogNbOutputs;i++) { + if (virLogOutputs[i].c != NULL) + virLogOutputs[i].c(virLogOutputs[i].data); + VIR_FREE(virLogOutputs[i].name); + } + VIR_FREE(virLogOutputs); + i = virLogNbOutputs; + virLogNbOutputs = 0; + return i; +} + + +/** + * virLogDefineOutput: + * @f: the function to call to output a message + * @c: the function to call to close the output (or NULL) + * @data: extra data passed as first arg to the function + * @priority: minimal priority for this filter, use 0 for none + * @dest: where to send output of this priority + * @name: optional name data associated with an output + * @flags: extra flag, currently unused + * + * Defines an output function for log messages. Each message once + * gone though filtering is emitted through each registered output. + * + * Returns -1 in case of failure or the output number if successful + */ +int +virLogDefineOutput(virLogOutputFunc f, + virLogCloseFunc c, + void *data, + virLogPriority priority, + virLogDestination dest, + const char *name, + unsigned int flags) +{ + int ret = -1; + char *ndup = NULL; + + virCheckFlags(0, -1); + + if (f == NULL) + return -1; + + if (dest == VIR_LOG_TO_SYSLOG || dest == VIR_LOG_TO_FILE) { + if (name == NULL) + return -1; + ndup = strdup(name); + if (ndup == NULL) + return -1; + } + + virLogLock(); + if (VIR_REALLOC_N(virLogOutputs, virLogNbOutputs + 1)) { + VIR_FREE(ndup); + goto cleanup; + } + ret = virLogNbOutputs++; + virLogOutputs[ret].logVersion = true; + virLogOutputs[ret].f = f; + virLogOutputs[ret].c = c; + virLogOutputs[ret].data = data; + virLogOutputs[ret].priority = priority; + virLogOutputs[ret].dest = dest; + virLogOutputs[ret].name = ndup; +cleanup: + virLogUnlock(); + return ret; +} + + +static int +virLogFormatString(char **msg, + int linenr, + const char *funcname, + virLogPriority priority, + const char *str) +{ + int ret; + + /* + * Be careful when changing the following log message formatting, we rely + * on it when stripping libvirt debug messages from qemu log files. So when + * changing this, you might also need to change the code there. + * virLogFormatString() function name is mentioned there so it's sufficient + * to just grep for it to find the right place. + */ + if ((funcname != NULL)) { + ret = virAsprintf(msg, "%d: %s : %s:%d : %s\n", + virThreadSelfID(), virLogPriorityString(priority), + funcname, linenr, str); + } else { + ret = virAsprintf(msg, "%d: %s : %s\n", + virThreadSelfID(), virLogPriorityString(priority), + str); + } + return ret; +} + + +static int +virLogVersionString(const char **rawmsg, + char **msg) +{ +#ifdef PACKAGER_VERSION +# ifdef PACKAGER +# define LOG_VERSION_STRING \ + "libvirt version: " VERSION ", package: " PACKAGER_VERSION " (" PACKAGER ")" +# else +# define LOG_VERSION_STRING \ + "libvirt version: " VERSION ", package: " PACKAGER_VERSION +# endif +#else +# define LOG_VERSION_STRING \ + "libvirt version: " VERSION +#endif + + *rawmsg = LOG_VERSION_STRING; + return virLogFormatString(msg, 0, NULL, VIR_LOG_INFO, LOG_VERSION_STRING); +} + + +/** + * virLogMessage: + * @source: where is that message coming from + * @priority: the priority level + * @filename: file where the message was emitted + * @linenr: line where the message was emitted + * @funcname: the function emitting the (debug) message + * @metadata: NULL or metadata array, terminated by an item with NULL key + * @fmt: the string format + * @...: the arguments + * + * Call the libvirt logger with some information. Based on the configuration + * the message may be stored, sent to output or just discarded + */ +void +virLogMessage(virLogSource source, + virLogPriority priority, + const char *filename, + int linenr, + const char *funcname, + virLogMetadataPtr metadata, + const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + virLogVMessage(source, priority, + filename, linenr, funcname, + metadata, fmt, ap); + va_end(ap); +} + + +/** + * virLogVMessage: + * @source: where is that message coming from + * @priority: the priority level + * @filename: file where the message was emitted + * @linenr: line where the message was emitted + * @funcname: the function emitting the (debug) message + * @metadata: NULL or metadata array, terminated by an item with NULL key + * @fmt: the string format + * @vargs: format args + * + * Call the libvirt logger with some information. Based on the configuration + * the message may be stored, sent to output or just discarded + */ +void +virLogVMessage(virLogSource source, + virLogPriority priority, + const char *filename, + int linenr, + const char *funcname, + virLogMetadataPtr metadata, + const char *fmt, + va_list vargs) +{ + static bool logVersionStderr = true; + char *str = NULL; + char *msg = NULL; + char timestamp[VIR_TIME_STRING_BUFLEN]; + int fprio, i, ret; + int saved_errno = errno; + int emit = 1; + unsigned int filterflags = 0; + + if (virLogInitialize() < 0) + return; + + if (fmt == NULL) + goto cleanup; + + /* + * check against list of specific logging patterns + */ + fprio = virLogFiltersCheck(filename, &filterflags); + if (fprio == 0) { + if (priority < virLogDefaultPriority) + emit = 0; + } else if (priority < fprio) { + emit = 0; + } + + if ((emit == 0) && ((virLogBuffer == NULL) || (virLogSize <= 0))) + goto cleanup; + + /* + * serialize the error message, add level and timestamp + */ + if (virVasprintf(&str, fmt, vargs) < 0) { + goto cleanup; + } + + ret = virLogFormatString(&msg, linenr, funcname, priority, str); + if (ret < 0) + goto cleanup; + + if (virTimeStringNowRaw(timestamp) < 0) + timestamp[0] = '\0'; + + /* + * Log based on defaults, first store in the history buffer, + * then if emit push the message on the outputs defined, if none + * use stderr. + * NOTE: the locking is a single point of contention for multiple + * threads, but avoid intermixing. Maybe set up locks per output + * to improve paralellism. + */ + virLogLock(); + virLogStr(timestamp); + virLogStr(msg); + virLogUnlock(); + if (emit == 0) + goto cleanup; + + virLogLock(); + for (i = 0; i < virLogNbOutputs; i++) { + if (priority >= virLogOutputs[i].priority) { + if (virLogOutputs[i].logVersion) { + const char *rawver; + char *ver = NULL; + if (virLogVersionString(&rawver, &ver) >= 0) + virLogOutputs[i].f(VIR_LOG_FROM_FILE, VIR_LOG_INFO, + __FILE__, __LINE__, __func__, + timestamp, NULL, 0, rawver, ver, + virLogOutputs[i].data); + VIR_FREE(ver); + virLogOutputs[i].logVersion = false; + } + virLogOutputs[i].f(source, priority, + filename, linenr, funcname, + timestamp, metadata, filterflags, + str, msg, virLogOutputs[i].data); + } + } + if ((virLogNbOutputs == 0) && (source != VIR_LOG_FROM_ERROR)) { + if (logVersionStderr) { + const char *rawver; + char *ver = NULL; + if (virLogVersionString(&rawver, &ver) >= 0) + virLogOutputToFd(VIR_LOG_FROM_FILE, VIR_LOG_INFO, + __FILE__, __LINE__, __func__, + timestamp, NULL, 0, rawver, ver, + (void *) STDERR_FILENO); + VIR_FREE(ver); + logVersionStderr = false; + } + virLogOutputToFd(source, priority, + filename, linenr, funcname, + timestamp, metadata, filterflags, + str, msg, (void *) STDERR_FILENO); + } + virLogUnlock(); + +cleanup: + VIR_FREE(str); + VIR_FREE(msg); + errno = saved_errno; +} + + +static void +virLogStackTraceToFd(int fd) +{ + void *array[100]; + int size; + static bool doneWarning = false; + const char *msg = "Stack trace not available on this platform\n"; + +#define STRIP_DEPTH 3 + size = backtrace(array, ARRAY_CARDINALITY(array)); + if (size) { + backtrace_symbols_fd(array + STRIP_DEPTH, size - STRIP_DEPTH, fd); + ignore_value(safewrite(fd, "\n", 1)); + } else if (!doneWarning) { + ignore_value(safewrite(fd, msg, strlen(msg))); + doneWarning = true; + } +#undef STRIP_DEPTH +} + +static void +virLogOutputToFd(virLogSource source ATTRIBUTE_UNUSED, + virLogPriority priority ATTRIBUTE_UNUSED, + const char *filename ATTRIBUTE_UNUSED, + int linenr ATTRIBUTE_UNUSED, + const char *funcname ATTRIBUTE_UNUSED, + const char *timestamp, + virLogMetadataPtr metadata ATTRIBUTE_UNUSED, + unsigned int flags, + const char *rawstr ATTRIBUTE_UNUSED, + const char *str, + void *data) +{ + int fd = (intptr_t) data; + char *msg; + + if (fd < 0) + return; + + if (virAsprintf(&msg, "%s: %s", timestamp, str) < 0) + return; + + ignore_value(safewrite(fd, msg, strlen(msg))); + VIR_FREE(msg); + + if (flags & VIR_LOG_STACK_TRACE) + virLogStackTraceToFd(fd); +} + + +static void +virLogCloseFd(void *data) +{ + int fd = (intptr_t) data; + + VIR_LOG_CLOSE(fd); +} + + +static int +virLogAddOutputToStderr(virLogPriority priority) +{ + if (virLogDefineOutput(virLogOutputToFd, NULL, (void *)2L, priority, + VIR_LOG_TO_STDERR, NULL, 0) < 0) + return -1; + return 0; +} + + +static int +virLogAddOutputToFile(virLogPriority priority, + const char *file) +{ + int fd; + + fd = open(file, O_CREAT | O_APPEND | O_WRONLY, S_IRUSR | S_IWUSR); + if (fd < 0) + return -1; + if (virLogDefineOutput(virLogOutputToFd, virLogCloseFd, + (void *)(intptr_t)fd, + priority, VIR_LOG_TO_FILE, file, 0) < 0) { + VIR_FORCE_CLOSE(fd); + return -1; + } + return 0; +} + + +#if HAVE_SYSLOG_H +static int +virLogPrioritySyslog(virLogPriority priority) +{ + switch (priority) { + case VIR_LOG_DEBUG: + return LOG_DEBUG; + case VIR_LOG_INFO: + return LOG_INFO; + case VIR_LOG_WARN: + return LOG_WARNING; + case VIR_LOG_ERROR: + return LOG_ERR; + default: + return LOG_ERR; + } +} + + +static void +virLogOutputToSyslog(virLogSource source ATTRIBUTE_UNUSED, + virLogPriority priority, + const char *filename ATTRIBUTE_UNUSED, + int linenr ATTRIBUTE_UNUSED, + const char *funcname ATTRIBUTE_UNUSED, + const char *timestamp ATTRIBUTE_UNUSED, + virLogMetadataPtr metadata ATTRIBUTE_UNUSED, + unsigned int flags, + const char *rawstr ATTRIBUTE_UNUSED, + const char *str, + void *data ATTRIBUTE_UNUSED) +{ + virCheckFlags(VIR_LOG_STACK_TRACE,); + + syslog(virLogPrioritySyslog(priority), "%s", str); +} + +static char *current_ident = NULL; + + +static void +virLogCloseSyslog(void *data ATTRIBUTE_UNUSED) +{ + closelog(); + VIR_FREE(current_ident); +} + + +static int +virLogAddOutputToSyslog(virLogPriority priority, + const char *ident) +{ + /* + * ident needs to be kept around on Solaris + */ + VIR_FREE(current_ident); + current_ident = strdup(ident); + if (current_ident == NULL) + return -1; + + openlog(current_ident, 0, 0); + if (virLogDefineOutput(virLogOutputToSyslog, virLogCloseSyslog, NULL, + priority, VIR_LOG_TO_SYSLOG, ident, 0) < 0) { + closelog(); + VIR_FREE(current_ident); + return -1; + } + return 0; +} + + +# if USE_JOURNALD +# define IOVEC_SET(iov, data, size) \ + do { \ + struct iovec *_i = &(iov); \ + _i->iov_base = (void*)(data); \ + _i->iov_len = (size); \ + } while (0) + +# define IOVEC_SET_STRING(iov, str) IOVEC_SET(iov, str, strlen(str)) + +/* Used for conversion of numbers to strings, and for length of binary data */ +# define JOURNAL_BUF_SIZE (MAX(INT_BUFSIZE_BOUND(int), sizeof(uint64_t))) + +struct journalState +{ + struct iovec *iov, *iov_end; + char (*bufs)[JOURNAL_BUF_SIZE], (*bufs_end)[JOURNAL_BUF_SIZE]; +}; + +static void +journalAddString(struct journalState *state, const char *field, + const char *value) +{ + static const char newline = '\n', equals = '='; + + if (strchr(value, '\n') != NULL) { + uint64_t nstr; + + /* If 'str' contains a newline, then we must + * encode the string length, since we can't + * rely on the newline for the field separator + */ + if (state->iov_end - state->iov < 5 || state->bufs == state->bufs_end) + return; /* Silently drop */ + nstr = htole64(strlen(value)); + memcpy(state->bufs[0], &nstr, sizeof(nstr)); + + IOVEC_SET_STRING(state->iov[0], field); + IOVEC_SET(state->iov[1], &newline, sizeof(newline)); + IOVEC_SET(state->iov[2], state->bufs[0], sizeof(nstr)); + state->bufs++; + state->iov += 3; + } else { + if (state->iov_end - state->iov < 4) + return; /* Silently drop */ + IOVEC_SET_STRING(state->iov[0], field); + IOVEC_SET(state->iov[1], (void *)&equals, sizeof(equals)); + state->iov += 2; + } + IOVEC_SET_STRING(state->iov[0], value); + IOVEC_SET(state->iov[1], (void *)&newline, sizeof(newline)); + state->iov += 2; +} + +static void +journalAddInt(struct journalState *state, const char *field, int value) +{ + static const char newline = '\n', equals = '='; + + char *num; + + if (state->iov_end - state->iov < 4 || state->bufs == state->bufs_end) + return; /* Silently drop */ + + num = virFormatIntDecimal(state->bufs[0], sizeof(state->bufs[0]), value); + + IOVEC_SET_STRING(state->iov[0], field); + IOVEC_SET(state->iov[1], (void *)&equals, sizeof(equals)); + IOVEC_SET_STRING(state->iov[2], num); + IOVEC_SET(state->iov[3], (void *)&newline, sizeof(newline)); + state->bufs++; + state->iov += 4; +} + +static int journalfd = -1; + +static void +virLogOutputToJournald(virLogSource source, + virLogPriority priority, + const char *filename, + int linenr, + const char *funcname, + const char *timestamp ATTRIBUTE_UNUSED, + virLogMetadataPtr metadata ATTRIBUTE_UNUSED, + unsigned int flags, + const char *rawstr, + const char *str ATTRIBUTE_UNUSED, + void *data ATTRIBUTE_UNUSED) +{ + virCheckFlags(VIR_LOG_STACK_TRACE,); + int buffd = -1; + struct msghdr mh; + struct sockaddr_un sa; + union { + struct cmsghdr cmsghdr; + uint8_t buf[CMSG_SPACE(sizeof(int))]; + } control; + struct cmsghdr *cmsg; + /* We use /dev/shm instead of /tmp here, since we want this to + * be a tmpfs, and one that is available from early boot on + * and where unprivileged users can create files. */ + char path[] = "/dev/shm/journal.XXXXXX"; + +# define NUM_FIELDS 6 + struct iovec iov[NUM_FIELDS * 5]; + char iov_bufs[NUM_FIELDS][JOURNAL_BUF_SIZE]; + struct journalState state; + + state.iov = iov; + state.iov_end = iov + ARRAY_CARDINALITY(iov); + state.bufs = iov_bufs; + state.bufs_end = iov_bufs + ARRAY_CARDINALITY(iov_bufs); + + journalAddString(&state ,"MESSAGE", rawstr); + journalAddInt(&state, "PRIORITY", priority); + journalAddString(&state, "LIBVIRT_SOURCE", + virLogSourceTypeToString(source)); + journalAddString(&state, "CODE_FILE", filename); + journalAddInt(&state, "CODE_LINE", linenr); + journalAddString(&state, "CODE_FUNC", funcname); + + memset(&sa, 0, sizeof(sa)); + sa.sun_family = AF_UNIX; + if (!virStrcpy(sa.sun_path, "/run/systemd/journal/socket", sizeof(sa.sun_path))) + return; + + memset(&mh, 0, sizeof(mh)); + mh.msg_name = &sa; + mh.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(sa.sun_path); + mh.msg_iov = iov; + mh.msg_iovlen = state.iov - iov; + + if (sendmsg(journalfd, &mh, MSG_NOSIGNAL) >= 0) + return; + + if (errno != EMSGSIZE && errno != ENOBUFS) + return; + + /* Message was too large, so dump to temporary file + * and pass an FD to the journal + */ + + /* NB: mkostemp is not declared async signal safe by + * POSIX, but this is Linux only code and the GLibc + * impl is safe enough, only using open() and inline + * asm to read a timestamp (falling back to gettimeofday + * on some arches + */ + if ((buffd = mkostemp(path, O_CLOEXEC|O_RDWR)) < 0) + return; + + if (unlink(path) < 0) + goto cleanup; + + if (writev(buffd, iov, state.iov - iov) < 0) + goto cleanup; + + mh.msg_iov = NULL; + mh.msg_iovlen = 0; + + memset(&control, 0, sizeof(control)); + mh.msg_control = &control; + mh.msg_controllen = sizeof(control); + + cmsg = CMSG_FIRSTHDR(&mh); + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + cmsg->cmsg_len = CMSG_LEN(sizeof(int)); + memcpy(CMSG_DATA(cmsg), &buffd, sizeof(int)); + + mh.msg_controllen = cmsg->cmsg_len; + + sendmsg(journalfd, &mh, MSG_NOSIGNAL); + +cleanup: + VIR_LOG_CLOSE(buffd); +} + + +static void virLogCloseJournald(void *data ATTRIBUTE_UNUSED) +{ + VIR_LOG_CLOSE(journalfd); +} + + +static int virLogAddOutputToJournald(int priority) +{ + if ((journalfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) + return -1; + if (virSetInherit(journalfd, false) < 0) { + VIR_LOG_CLOSE(journalfd); + return -1; + } + if (virLogDefineOutput(virLogOutputToJournald, virLogCloseJournald, NULL, + priority, VIR_LOG_TO_JOURNALD, NULL, 0) < 0) { + return -1; + } + return 0; +} +# endif /* USE_JOURNALD */ +#endif /* HAVE_SYSLOG_H */ + +#define IS_SPACE(cur) \ + ((*cur == ' ') || (*cur == '\t') || (*cur == '\n') || \ + (*cur == '\r') || (*cur == '\\')) + + +/** + * virLogParseOutputs: + * @outputs: string defining a (set of) output(s) + * + * The format for an output can be: + * x:stderr + * output goes to stderr + * x:syslog:name + * use syslog for the output and use the given name as the ident + * x:file:file_path + * output to a file, with the given filepath + * In all case the x prefix is the minimal level, acting as a filter + * 0: everything + * 1: DEBUG + * 2: INFO + * 3: WARNING + * 4: ERROR + * + * Multiple output can be defined in a single @output, they just need to be + * separated by spaces. + * + * Returns the number of output parsed and installed or -1 in case of error + */ +int +virLogParseOutputs(const char *outputs) +{ + const char *cur = outputs, *str; + char *name; + char *abspath; + virLogPriority prio; + int ret = -1; + int count = 0; + + if (cur == NULL) + return -1; + + VIR_DEBUG("outputs=%s", outputs); + + virSkipSpaces(&cur); + while (*cur != 0) { + prio= virParseNumber(&cur); + if ((prio < VIR_LOG_DEBUG) || (prio > VIR_LOG_ERROR)) + goto cleanup; + if (*cur != ':') + goto cleanup; + cur++; + if (STREQLEN(cur, "stderr", 6)) { + cur += 6; + if (virLogAddOutputToStderr(prio) == 0) + count++; + } else if (STREQLEN(cur, "syslog", 6)) { + cur += 6; + if (*cur != ':') + goto cleanup; + cur++; + str = cur; + while ((*cur != 0) && (!IS_SPACE(cur))) + cur++; + if (str == cur) + goto cleanup; +#if HAVE_SYSLOG_H + name = strndup(str, cur - str); + if (name == NULL) + goto cleanup; + if (virLogAddOutputToSyslog(prio, name) == 0) + count++; + VIR_FREE(name); +#endif /* HAVE_SYSLOG_H */ + } else if (STREQLEN(cur, "file", 4)) { + cur += 4; + if (*cur != ':') + goto cleanup; + cur++; + str = cur; + while ((*cur != 0) && (!IS_SPACE(cur))) + cur++; + if (str == cur) + goto cleanup; + name = strndup(str, cur - str); + if (name == NULL) + goto cleanup; + if (virFileAbsPath(name, &abspath) < 0) { + VIR_FREE(name); + return -1; /* skip warning here because setting was fine */ + } + if (virLogAddOutputToFile(prio, abspath) == 0) + count++; + VIR_FREE(name); + VIR_FREE(abspath); + } else if (STREQLEN(cur, "journald", 8)) { + cur += 8; +#if USE_JOURNALD + if (virLogAddOutputToJournald(prio) == 0) + count++; +#endif /* USE_JOURNALD */ + } else { + goto cleanup; + } + virSkipSpaces(&cur); + } + ret = count; +cleanup: + if (ret == -1) + VIR_WARN("Ignoring invalid log output setting."); + return ret; +} + + +/** + * virLogParseFilters: + * @filters: string defining a (set of) filter(s) + * + * The format for a filter is: + * x:name + * where name is a match string + * the x prefix is the minimal level where the messages should be logged + * 1: DEBUG + * 2: INFO + * 3: WARNING + * 4: ERROR + * + * Multiple filter can be defined in a single @filters, they just need to be + * separated by spaces. + * + * Returns the number of filter parsed and installed or -1 in case of error + */ +int +virLogParseFilters(const char *filters) +{ + const char *cur = filters, *str; + char *name; + virLogPriority prio; + int ret = -1; + int count = 0; + + if (cur == NULL) + return -1; + + virSkipSpaces(&cur); + while (*cur != 0) { + unsigned int flags = 0; + prio= virParseNumber(&cur); + if ((prio < VIR_LOG_DEBUG) || (prio > VIR_LOG_ERROR)) + goto cleanup; + if (*cur != ':') + goto cleanup; + cur++; + if (*cur == '+') { + flags |= VIR_LOG_STACK_TRACE; + cur++; + } + str = cur; + while ((*cur != 0) && (!IS_SPACE(cur))) + cur++; + if (str == cur) + goto cleanup; + name = strndup(str, cur - str); + if (name == NULL) + goto cleanup; + if (virLogDefineFilter(name, prio, flags) >= 0) + count++; + VIR_FREE(name); + virSkipSpaces(&cur); + } + ret = count; +cleanup: + if (ret == -1) + VIR_WARN("Ignoring invalid log filter setting."); + return ret; +} + + +/** + * virLogGetDefaultPriority: + * + * Returns the current logging priority level. + */ +virLogPriority +virLogGetDefaultPriority(void) +{ + return virLogDefaultPriority; +} + + +/** + * virLogGetFilters: + * + * Returns a string listing the current filters, in the format originally + * specified in the config file or environment. Caller must free the + * result. + */ +char * +virLogGetFilters(void) +{ + int i; + virBuffer filterbuf = VIR_BUFFER_INITIALIZER; + + virLogLock(); + for (i = 0; i < virLogNbFilters; i++) { + const char *sep = ":"; + if (virLogFilters[i].flags & VIR_LOG_STACK_TRACE) + sep = ":+"; + virBufferAsprintf(&filterbuf, "%d%s%s ", + virLogFilters[i].priority, + sep, + virLogFilters[i].match); + } + virLogUnlock(); + + if (virBufferError(&filterbuf)) { + virBufferFreeAndReset(&filterbuf); + return NULL; + } + + return virBufferContentAndReset(&filterbuf); +} + + +/** + * virLogGetOutputs: + * + * Returns a string listing the current outputs, in the format originally + * specified in the config file or environment. Caller must free the + * result. + */ +char * +virLogGetOutputs(void) +{ + int i; + virBuffer outputbuf = VIR_BUFFER_INITIALIZER; + + virLogLock(); + for (i = 0; i < virLogNbOutputs; i++) { + virLogDestination dest = virLogOutputs[i].dest; + if (i) + virBufferAsprintf(&outputbuf, " "); + switch (dest) { + case VIR_LOG_TO_SYSLOG: + case VIR_LOG_TO_FILE: + virBufferAsprintf(&outputbuf, "%d:%s:%s", + virLogOutputs[i].priority, + virLogOutputString(dest), + virLogOutputs[i].name); + break; + default: + virBufferAsprintf(&outputbuf, "%d:%s", + virLogOutputs[i].priority, + virLogOutputString(dest)); + } + } + virLogUnlock(); + + if (virBufferError(&outputbuf)) { + virBufferFreeAndReset(&outputbuf); + return NULL; + } + + return virBufferContentAndReset(&outputbuf); +} + + +/** + * virLogGetNbFilters: + * + * Returns the current number of defined log filters. + */ +int +virLogGetNbFilters(void) +{ + return virLogNbFilters; +} + + +/** + * virLogGetNbOutputs: + * + * Returns the current number of defined log outputs. + */ +int +virLogGetNbOutputs(void) +{ + return virLogNbOutputs; +} + + +/** + * virLogParseDefaultPriority: + * @priority: string defining the desired logging level + * + * Parses and sets the default log priority level. It can take a string or + * number corresponding to the following levels: + * 1: DEBUG + * 2: INFO + * 3: WARNING + * 4: ERROR + * + * Returns the parsed log level or -1 on error. + */ +int +virLogParseDefaultPriority(const char *priority) +{ + int ret = -1; + + if (STREQ(priority, "1") || STREQ(priority, "debug")) + ret = virLogSetDefaultPriority(VIR_LOG_DEBUG); + else if (STREQ(priority, "2") || STREQ(priority, "info")) + ret = virLogSetDefaultPriority(VIR_LOG_INFO); + else if (STREQ(priority, "3") || STREQ(priority, "warning")) + ret = virLogSetDefaultPriority(VIR_LOG_WARN); + else if (STREQ(priority, "4") || STREQ(priority, "error")) + ret = virLogSetDefaultPriority(VIR_LOG_ERROR); + else + VIR_WARN("Ignoring invalid log level setting"); + + return ret; +} + + +/** + * virLogSetFromEnv: + * + * Sets virLogDefaultPriority, virLogFilters and virLogOutputs based on + * environment variables. + */ +void +virLogSetFromEnv(void) +{ + char *debugEnv; + + debugEnv = getenv("LIBVIRT_DEBUG"); + if (debugEnv && *debugEnv) + virLogParseDefaultPriority(debugEnv); + debugEnv = getenv("LIBVIRT_LOG_FILTERS"); + if (debugEnv && *debugEnv) + virLogParseFilters(debugEnv); + debugEnv = getenv("LIBVIRT_LOG_OUTPUTS"); + if (debugEnv && *debugEnv) + virLogParseOutputs(debugEnv); +} diff --git a/src/util/virlog.h b/src/util/virlog.h new file mode 100644 index 0000000..028b791 --- /dev/null +++ b/src/util/virlog.h @@ -0,0 +1,191 @@ +/* + * logging.h: internal logging and debugging + * + * Copyright (C) 2006-2008, 2011-2012 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#ifndef __VIRTLOG_H_ +# define __VIRTLOG_H_ + +# include "internal.h" +# include "virbuffer.h" + +/* + * To be made public + */ +typedef enum { + VIR_LOG_DEBUG = 1, + VIR_LOG_INFO, + VIR_LOG_WARN, + VIR_LOG_ERROR, +} virLogPriority; + +# define VIR_LOG_DEFAULT VIR_LOG_WARN + +typedef enum { + VIR_LOG_TO_STDERR = 1, + VIR_LOG_TO_SYSLOG, + VIR_LOG_TO_FILE, + VIR_LOG_TO_JOURNALD, +} virLogDestination; + +typedef enum { + VIR_LOG_FROM_FILE, + VIR_LOG_FROM_ERROR, + VIR_LOG_FROM_AUDIT, + VIR_LOG_FROM_TRACE, + VIR_LOG_FROM_LIBRARY, + + VIR_LOG_FROM_LAST, +} virLogSource; + +/* + * If configured with --enable-debug=yes then library calls + * are printed to stderr for debugging or to an appropriate channel + * defined at runtime from the libvirt daemon configuration file + */ +# ifdef ENABLE_DEBUG +# define VIR_DEBUG_INT(src, filename, linenr, funcname, ...) \ + virLogMessage(src, VIR_LOG_DEBUG, filename, linenr, funcname, NULL, __VA_ARGS__) +# else +/** + * virLogEatParams: + * + * Do nothing but eat parameters. + */ +static inline void virLogEatParams(virLogSource unused, ...) +{ + /* Silence gcc */ + unused = unused; +} +# define VIR_DEBUG_INT(src, filename, linenr, funcname, ...) \ + virLogEatParams(src, filename, linenr, funcname, __VA_ARGS__) +# endif /* !ENABLE_DEBUG */ + +# define VIR_INFO_INT(src, filename, linenr, funcname, ...) \ + virLogMessage(src, VIR_LOG_INFO, filename, linenr, funcname, NULL, __VA_ARGS__) +# define VIR_WARN_INT(src, filename, linenr, funcname, ...) \ + virLogMessage(src, VIR_LOG_WARN, filename, linenr, funcname, NULL, __VA_ARGS__) +# define VIR_ERROR_INT(src, filename, linenr, funcname, ...) \ + virLogMessage(src, VIR_LOG_ERROR, filename, linenr, funcname, NULL, __VA_ARGS__) + +# define VIR_DEBUG(...) \ + VIR_DEBUG_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__) +# define VIR_INFO(...) \ + VIR_INFO_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__) +# define VIR_WARN(...) \ + VIR_WARN_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__) +# define VIR_ERROR(...) \ + VIR_ERROR_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__) + + +struct _virLogMetadata { + const char *key; + const char *s; /* String value, or NULL to use "i" */ + int i; +}; + +typedef struct _virLogMetadata virLogMetadata; +typedef struct _virLogMetadata *virLogMetadataPtr; + +/** + * virLogOutputFunc: + * @src: the src for the message + * @priority: the priority for the message + * @filename: file where the message was emitted + * @linenr: line where the message was emitted + * @funcname: the function emitting the message + * @timestamp: zero terminated string with timestamp of the message + * @metadata: NULL or metadata array, terminated by an item with NULL key + * @flags: flags associated with the message + * @rawstr: the unformatted message to log, zero terminated + * @str: the message to log, preformatted and zero terminated + * @data: extra output logging data + * + * Callback function used to output messages + */ +typedef void (*virLogOutputFunc) (virLogSource src, + virLogPriority priority, + const char *filename, + int linenr, + const char *funcname, + const char *timestamp, + virLogMetadataPtr metadata, + unsigned int flags, + const char *rawstr, + const char *str, + void *data); + +/** + * virLogCloseFunc: + * @data: extra output logging data + * + * Callback function used to close a log output + */ +typedef void (*virLogCloseFunc) (void *data); + +typedef enum { + VIR_LOG_STACK_TRACE = (1 << 0), +} virLogFlags; + +extern int virLogGetNbFilters(void); +extern int virLogGetNbOutputs(void); +extern char *virLogGetFilters(void); +extern char *virLogGetOutputs(void); +extern virLogPriority virLogGetDefaultPriority(void); +extern int virLogSetDefaultPriority(virLogPriority priority); +extern void virLogSetFromEnv(void); +extern int virLogDefineFilter(const char *match, + virLogPriority priority, + unsigned int flags); +extern int virLogDefineOutput(virLogOutputFunc f, + virLogCloseFunc c, + void *data, + virLogPriority priority, + virLogDestination dest, + const char *name, + unsigned int flags); + +/* + * Internal logging API + */ + +extern void virLogLock(void); +extern void virLogUnlock(void); +extern int virLogReset(void); +extern int virLogParseDefaultPriority(const char *priority); +extern int virLogParseFilters(const char *filters); +extern int virLogParseOutputs(const char *output); +extern void virLogMessage(virLogSource src, + virLogPriority priority, + const char *filename, + int linenr, + const char *funcname, + virLogMetadataPtr metadata, + const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(7, 8); +extern void virLogVMessage(virLogSource src, + virLogPriority priority, + const char *filename, + int linenr, + const char *funcname, + virLogMetadataPtr metadata, + const char *fmt, + va_list vargs) ATTRIBUTE_FMT_PRINTF(7, 0); +extern int virLogSetBufferSize(int size); +extern void virLogEmergencyDumpAll(int signum); +#endif diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c index e98a2ca..a1d1c12 100644 --- a/src/util/virnetdev.c +++ b/src/util/virnetdev.c @@ -29,7 +29,7 @@ #include "vircommand.h" #include "memory.h" #include "pci.h" -#include "logging.h" +#include "virlog.h" #include <sys/ioctl.h> #include <net/if.h> diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c index 657c484..8d2574c 100644 --- a/src/util/virnetdevmacvlan.c +++ b/src/util/virnetdevmacvlan.c @@ -57,7 +57,7 @@ VIR_ENUM_IMPL(virNetDevMacVLanMode, VIR_NETDEV_MACVLAN_MODE_LAST, # endif # include "memory.h" -# include "logging.h" +# include "virlog.h" # include "uuid.h" # include "virfile.h" # include "virnetlink.h" diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c index 0eadd6c..644e9a4 100644 --- a/src/util/virnetdevtap.c +++ b/src/util/virnetdevtap.c @@ -31,7 +31,7 @@ #include "virfile.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include <sys/ioctl.h> diff --git a/src/util/virnetdevveth.c b/src/util/virnetdevveth.c index 3261337..630b7c9 100644 --- a/src/util/virnetdevveth.c +++ b/src/util/virnetdevveth.c @@ -27,7 +27,7 @@ #include "virnetdevveth.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "vircommand.h" #include "virterror_internal.h" diff --git a/src/util/virnetdevvportprofile.c b/src/util/virnetdevvportprofile.c index ac7aa5f..834b9b9 100644 --- a/src/util/virnetdevvportprofile.c +++ b/src/util/virnetdevvportprofile.c @@ -53,7 +53,7 @@ VIR_ENUM_IMPL(virNetDevVPortProfileOp, VIR_NETDEV_VPORT_PROFILE_OP_LAST, # include "virnetlink.h" # include "virfile.h" -# include "logging.h" +# include "virlog.h" # include "virnetdev.h" # define MICROSEC_PER_SEC (1000 * 1000) diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c index 8a8bfae..830e9b9 100644 --- a/src/util/virnetlink.c +++ b/src/util/virnetlink.c @@ -36,7 +36,7 @@ #include <sys/socket.h> #include "virnetlink.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "threads.h" #include "virmacaddr.h" diff --git a/src/util/virnodesuspend.c b/src/util/virnodesuspend.c index a34ca6a..e37a2d6 100644 --- a/src/util/virnodesuspend.c +++ b/src/util/virnodesuspend.c @@ -27,7 +27,7 @@ #include "datatypes.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #define VIR_FROM_THIS VIR_FROM_NONE diff --git a/src/util/virobject.c b/src/util/virobject.c index 101507f..aa80cab 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -26,7 +26,7 @@ #include "memory.h" #include "viratomic.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_NONE diff --git a/src/util/virpidfile.c b/src/util/virpidfile.c index 90a79c5..6ec9760 100644 --- a/src/util/virpidfile.c +++ b/src/util/virpidfile.c @@ -32,7 +32,7 @@ #include "memory.h" #include "util.h" #include "intprops.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "c-ctype.h" #include "areadlink.h" diff --git a/src/util/virprocess.c b/src/util/virprocess.c index f8a8a49..3c0ed8a 100644 --- a/src/util/virprocess.c +++ b/src/util/virprocess.c @@ -29,7 +29,7 @@ #include "virprocess.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #define VIR_FROM_THIS VIR_FROM_NONE diff --git a/src/util/virrandom.c b/src/util/virrandom.c index 002f655..c24bf3b 100644 --- a/src/util/virrandom.c +++ b/src/util/virrandom.c @@ -31,7 +31,7 @@ #include "count-one-bits.h" #include "util.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #define VIR_FROM_THIS VIR_FROM_NONE diff --git a/src/util/virterror.c b/src/util/virterror.c index 1142c40..6e3301b 100644 --- a/src/util/virterror.c +++ b/src/util/virterror.c @@ -29,7 +29,7 @@ #include "virterror_internal.h" #include "datatypes.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "threads.h" #include "util.h" diff --git a/src/util/virusb.c b/src/util/virusb.c index b9c81ed..ebc1af5 100644 --- a/src/util/virusb.c +++ b/src/util/virusb.c @@ -32,7 +32,7 @@ #include <unistd.h> #include "virusb.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" #include "util.h" #include "virterror_internal.h" diff --git a/src/vbox/vbox_MSCOMGlue.c b/src/vbox/vbox_MSCOMGlue.c index 9ddc89c..3194b7c 100644 --- a/src/vbox/vbox_MSCOMGlue.c +++ b/src/vbox/vbox_MSCOMGlue.c @@ -32,7 +32,7 @@ #include "internal.h" #include "memory.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "vbox_MSCOMGlue.h" diff --git a/src/vbox/vbox_XPCOMCGlue.c b/src/vbox/vbox_XPCOMCGlue.c index 63470ae..5f70283 100644 --- a/src/vbox/vbox_XPCOMCGlue.c +++ b/src/vbox/vbox_XPCOMCGlue.c @@ -39,7 +39,7 @@ #include "internal.h" #include "memory.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #define VIR_FROM_THIS VIR_FROM_VBOX diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c index 56726ed..cd29e19 100644 --- a/src/vbox/vbox_driver.c +++ b/src/vbox/vbox_driver.c @@ -34,7 +34,7 @@ #include "internal.h" #include "datatypes.h" -#include "logging.h" +#include "virlog.h" #include "vbox_driver.h" #include "vbox_glue.h" #include "virterror_internal.h" diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index e0f9b6f..847af35 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -52,7 +52,7 @@ #include "uuid.h" #include "memory.h" #include "nodeinfo.h" -#include "logging.h" +#include "virlog.h" #include "vbox_driver.h" #include "configmake.h" #include "virfile.h" diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 0d34453..e74e9ed 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -29,7 +29,7 @@ #include "virterror_internal.h" #include "virconf.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "vmx.h" #include "viruri.h" diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c index d9174b6..c281c00 100644 --- a/src/xen/xen_driver.c +++ b/src/xen/xen_driver.c @@ -40,7 +40,7 @@ #include <xen/dom0_ops.h> #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "xen_driver.h" diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c index 1aa2b73..b094313 100644 --- a/src/xen/xen_hypervisor.c +++ b/src/xen/xen_hypervisor.c @@ -64,7 +64,7 @@ #include <xen/sched.h> #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "driver.h" #include "util.h" diff --git a/src/xen/xen_inotify.c b/src/xen/xen_inotify.c index bcafdd0..073663f 100644 --- a/src/xen/xen_inotify.c +++ b/src/xen/xen_inotify.c @@ -36,7 +36,7 @@ #include "domain_conf.h" #include "xen_inotify.h" #include "xend_internal.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "virfile.h" diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c index 9407e95..0364f84 100644 --- a/src/xen/xend_internal.c +++ b/src/xen/xend_internal.c @@ -30,7 +30,7 @@ #include <errno.h> #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "datatypes.h" #include "xend_internal.h" #include "driver.h" diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c index 2cd4b95..fc7b581 100644 --- a/src/xen/xm_internal.c +++ b/src/xen/xm_internal.c @@ -47,7 +47,7 @@ #include "uuid.h" #include "util.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "count-one-bits.h" #define VIR_FROM_THIS VIR_FROM_XENXM diff --git a/src/xen/xs_internal.c b/src/xen/xs_internal.c index 8a0af62..4cc82d8 100644 --- a/src/xen/xs_internal.c +++ b/src/xen/xs_internal.c @@ -45,7 +45,7 @@ #include "datatypes.h" #include "driver.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "uuid.h" #include "xen_driver.h" #include "xs_internal.h" diff --git a/src/xenapi/xenapi_utils.c b/src/xenapi/xenapi_utils.c index dbdb22d..6f51100 100644 --- a/src/xenapi/xenapi_utils.c +++ b/src/xenapi/xenapi_utils.c @@ -33,7 +33,7 @@ #include "uuid.h" #include "memory.h" #include "virbuffer.h" -#include "logging.h" +#include "virlog.h" #include "viruri.h" #include "xenapi_driver_private.h" #include "xenapi_utils.h" diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c index ed0c9e1..2aa384d 100644 --- a/src/xenxs/xen_sxpr.c +++ b/src/xenxs/xen_sxpr.c @@ -32,7 +32,7 @@ #include "memory.h" #include "verify.h" #include "uuid.h" -#include "logging.h" +#include "virlog.h" #include "count-one-bits.h" #include "xenxs_private.h" #include "xen_sxpr.h" diff --git a/tests/eventtest.c b/tests/eventtest.c index bc8d443..cd36a2d 100644 --- a/tests/eventtest.c +++ b/tests/eventtest.c @@ -29,7 +29,7 @@ #include "testutils.h" #include "internal.h" #include "threads.h" -#include "logging.h" +#include "virlog.h" #include "util.h" #include "vireventpoll.h" diff --git a/tests/libvirtdconftest.c b/tests/libvirtdconftest.c index c2b02a6..0365ade 100644 --- a/tests/libvirtdconftest.c +++ b/tests/libvirtdconftest.c @@ -27,7 +27,7 @@ #include "util.h" #include "c-ctype.h" #include "virterror_internal.h" -#include "logging.h" +#include "virlog.h" #include "virconf.h" #define VIR_FROM_THIS VIR_FROM_NONE diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index b55d867..e4194de 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -31,7 +31,7 @@ #include "rpc/virnetsocket.h" #include "memory.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #define VIR_FROM_THIS VIR_FROM_NONE diff --git a/tests/securityselinuxtest.c b/tests/securityselinuxtest.c index 8bcf3a1..c021480 100644 --- a/tests/securityselinuxtest.c +++ b/tests/securityselinuxtest.c @@ -32,7 +32,7 @@ #include "testutils.h" #include "memory.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #include "virterror_internal.h" #include "security/security_manager.h" diff --git a/tests/sockettest.c b/tests/sockettest.c index 2f85307..c6a175f 100644 --- a/tests/sockettest.c +++ b/tests/sockettest.c @@ -27,7 +27,7 @@ #include "virsocketaddr.h" #include "testutils.h" -#include "logging.h" +#include "virlog.h" #include "memory.h" static void testQuietError(void *userData ATTRIBUTE_UNUSED, diff --git a/tests/testutils.c b/tests/testutils.c index 1315cb5..96e24d4 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -44,7 +44,7 @@ #include "threads.h" #include "virterror_internal.h" #include "virbuffer.h" -#include "logging.h" +#include "virlog.h" #include "vircommand.h" #include "virrandom.h" #include "dirname.h" diff --git a/tests/virauthconfigtest.c b/tests/virauthconfigtest.c index 4d37af6..74cc187 100644 --- a/tests/virauthconfigtest.c +++ b/tests/virauthconfigtest.c @@ -27,7 +27,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virauthconfig.h" diff --git a/tests/virdrivermoduletest.c b/tests/virdrivermoduletest.c index 53a772e..440ee8e 100644 --- a/tests/virdrivermoduletest.c +++ b/tests/virdrivermoduletest.c @@ -24,7 +24,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "driver.h" #define VIR_FROM_THIS VIR_FROM_NONE diff --git a/tests/virhashtest.c b/tests/virhashtest.c index 721e877..7de16d0 100644 --- a/tests/virhashtest.c +++ b/tests/virhashtest.c @@ -11,7 +11,7 @@ #include "testutils.h" #include "memory.h" #include "util.h" -#include "logging.h" +#include "virlog.h" #define testError(...) \ diff --git a/tests/virkeyfiletest.c b/tests/virkeyfiletest.c index 3667c8c..c6aca86 100644 --- a/tests/virkeyfiletest.c +++ b/tests/virkeyfiletest.c @@ -27,7 +27,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virkeyfile.h" diff --git a/tests/virlockspacetest.c b/tests/virlockspacetest.c index ee58f95..c95f5d8 100644 --- a/tests/virlockspacetest.c +++ b/tests/virlockspacetest.c @@ -28,7 +28,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virlockspace.h" diff --git a/tests/virnetmessagetest.c b/tests/virnetmessagetest.c index eff8ea7..c20f5e6 100644 --- a/tests/virnetmessagetest.c +++ b/tests/virnetmessagetest.c @@ -27,7 +27,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "rpc/virnetmessage.h" diff --git a/tests/virnetsockettest.c b/tests/virnetsockettest.c index e31f19a..ba281e9 100644 --- a/tests/virnetsockettest.c +++ b/tests/virnetsockettest.c @@ -31,7 +31,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "rpc/virnetsocket.h" diff --git a/tests/virnettlscontexttest.c b/tests/virnettlscontexttest.c index d421feb..0236659 100644 --- a/tests/virnettlscontexttest.c +++ b/tests/virnettlscontexttest.c @@ -30,7 +30,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virfile.h" #include "vircommand.h" #include "virsocketaddr.h" diff --git a/tests/virstringtest.c b/tests/virstringtest.c index 7e726c6..27e490f 100644 --- a/tests/virstringtest.c +++ b/tests/virstringtest.c @@ -26,7 +26,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virstring.h" diff --git a/tests/virtimetest.c b/tests/virtimetest.c index dca4efb..c8e9a2e 100644 --- a/tests/virtimetest.c +++ b/tests/virtimetest.c @@ -27,7 +27,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "virtime.h" diff --git a/tests/viruritest.c b/tests/viruritest.c index 430bcb6..46964b3 100644 --- a/tests/viruritest.c +++ b/tests/viruritest.c @@ -27,7 +27,7 @@ #include "util.h" #include "virterror_internal.h" #include "memory.h" -#include "logging.h" +#include "virlog.h" #include "viruri.h" diff --git a/tools/console.c b/tools/console.c index 40de8eb..dbdaab7 100644 --- a/tools/console.c +++ b/tools/console.c @@ -38,7 +38,7 @@ # include "internal.h" # include "console.h" -# include "logging.h" +# include "virlog.h" # include "util.h" # include "virfile.h" # include "memory.h" -- 1.7.11.7 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list