Wai-Hung Ip

39 papers C 2Journal 32Unranked 5
YearRankTypeTitle / Venue / Authors
2024 conf
ICIC (9)
Hao Huang, Wentao Chen, Weidong Fang, Wei Chen, Wai-Hung Ip, Kai-Leung Yung
2024 conf
BDE
Hao Huang, Wentao Chen, Weidong Fang, Zhiqi Li, Wei Chen, Wai-Hung Ip, Kai-Leung Yung
2022 J jnl
Comput. Commun.
Na Dong, Minghui Qin, Jianfang Chang, Chun-Ho Wu, Wai-Hung Ip, Kai-Leung Yung
2021 J jnl
Multim. Tools Appl.
Yong Zhang, Yubei Huang, Dongning Zhao, Chun-Ho Wu, Wai-Hung Ip, Kai-Leung Yung
2021 J jnl
J. Comput. Assist. Learn.
Yuk-Ming Tang, George Wing Yiu Ng, Nam Hung Chia, Eric Hang Kwong So, Chun-Ho Wu, Wai-Hung Ip
2021 J jnl
Ind. Manag. Data Syst.
Kai-Leung Yung, George To Sum Ho, Yuk-Ming Tang, Wai-Hung Ip
2021 J jnl
J. Real Time Image Process.
Jianfang Chang, Na Dong, Donghui Li, Wai-Hung Ip, Kai-Leung Yung
2020 J jnl
J. Supercomput.
Yong Zhang, Shao Yong Ma, Xi Zhang, Li Li, Wai-Hung Ip, Kai-Leung Yung
2020 J jnl
Int. J. Prod. Res.
Yue Xie, Wanhua He, Wai-Ki Ching, Allen H. Tai, Wai-Hung Ip, Kai-Leung Yung, Na Song
2020 J jnl
IEEE Access
Ming Gao, Mingxia Chen, An Liu, Wai-Hung Ip, Kai-Leung Yung
2020 J jnl
IEEE Access
Peng Luo, Xilong Qu, Lina Tan, Xiaoliang Xie, Weijin Jiang, Lirong Huang, Wai-Hung Ip, Kai-Leung Yung
2019 J jnl
IEEE Access
Na Dong, Yingjie Li, Zhongke Gao, Wai-Hung Ip, Kai-Leung Yung
2019 J jnl
IEEE Intell. Syst.
Xinyu Liu, Donghui Li, Na Dong, Wai-Hung Ip, Kai-Leung Yung
2018 J jnl
Enterp. Inf. Syst.
Chun Kit Ng, Chun-Ho Wu, Kai-Leung Yung, Wai-Hung Ip, Tommy Cheung
2018 conf
ICGEC
Kuo-Kun Tseng, Jiangrui Lin, Haichuan Sun, Kai-Leung Yung, Wai-Hung Ip
2018 J jnl
Sensors
Haonan Sun, Rongyu He, Yong Zhang, Ruiyun Wang, Wai-Hung Ip, Kai-Leung Yung
2014 J jnl
Multim. Tools Appl.
Kuan-sheng Zou, Wai-Hung Ip, Chun-Ho Wu, Zengqiang Chen, Kai-Leung Yung, Ching-Yuen Chan
2014 J jnl
IEEE Trans. Ind. Informatics
Junwei Wang, Dong Liu, Wai-Hung Ip, Wenjun Chris Zhang, Ralph Deters
2014 J jnl
IEEE Syst. J.
Junwei Wang, Hongfeng Wang, Wenjun Zhang, Wai-Hung Ip, Kazuo Furuta
2014 J jnl
Appl. Artif. Intell.
Na Dong, Chun-Ho Wu, Wai-Hung Ip, Zengqiang Chen, Ai-Guo Wu
2012 J jnl
IEEE Trans. Syst. Man Cybern. Part C
Ying Lin, Jun Zhang, Henry Shu-Hung Chung, Wai-Hung Ip, Yun Li, Yu-hui Shi
2012 J jnl
Comput. Math. Appl.
Na Dong, Chun-Ho Wu, Wai-Hung Ip, Zengqiang Chen, Ching-Yuen Chan, Kai-Leung Yung
2012 J jnl
Expert Syst. Appl.
Na Dong, Chun-Ho Wu, Wai-Hung Ip, Zengqiang Chen, Kai-Leung Yung
2012 J jnl
Neurocomputing
Kuan-sheng Zou, Chee Kooi Chan, Si-Xiang Peng, Ameersing Luximon, Zengqiang Chen, Wai-Hung Ip
2011 J jnl
IEEE Syst. J.
Sai Ho Chung, Felix Tung Sun Chan, Wai-Hung Ip
2007 J jnl
Int. J. Autom. Comput.
Kai-Leung Yung, Wai-Hung Ip, Dingwei Wang
2006 J jnl
J. Intell. Manuf.
Wai Keung Wong, C. K. Kwong, P. Y. Mok, Wai-Hung Ip
2006 C conf
ACC
Min Huang, Xuejing Wu, Xingwei Wang, Wai-Hung Ip, Kai-Leung Yung
2006 C conf
ICCE
Fong-lok Lee, Sai-wing Pun, Sandy Siu-cheung Li, Siu Cheung Kong, Wai-Hung Ip
2004 J jnl
Comput. Ind.
Qing Wang, Kai-Leung Yung, Wai-Hung Ip
2004 J jnl
Int. J. Comput. Appl. Technol.
Wai-Hung Ip, Bocheng Chen
2004 J jnl
Expert Syst. J. Knowl. Eng.
George T. S. Ho, Henry C. W. Lau, Wai-Hung Ip, Andrew Ning
2004 conf
ICEB
Bocheng Chen, Wai-Hung Ip, Peng Sheng, H. L. Yu
2004 conf
ICEB
Bocheng Chen, Wai-Hung Ip, Yuebo Zhou, Bing Liang, H. L. Yu
2002 J jnl
J. Intell. Manuf.
Wai-Hung Ip, Kai-Leung Yung, Min Huang, Dingwei Wang
2002 J jnl
Int. J. Netw. Virtual Organisations
Wai-Hung Ip, Bocheng Chen
2002 J jnl
Sci. China Ser. F Inf. Sci.
Dingwei Wang, Kai-Leung Yung, Wai-Hung Ip
2001 J jnl
J. Intell. Manuf.
K. W. Keung, Wai-Hung Ip, T. C. Lee
2000 J jnl
J. Intell. Manuf.
Allen K. C. Lee, Wai-Hung Ip, Kai-Leung Yung
redb/logging_utils.py
← Index redb/logging_utils.py python
"""
Logging utilities and shared enums for REDB.

Contains the ImportResult enum, log formatters, and logger setup functions
used across the ingestor pipeline.
"""
import logging
from logging.handlers import QueueHandler
import os
from enum import Enum


class ImportResult(Enum):
    CORRECTLY = 0
    PARTIALLY = 1
    FAILED = 2
    PENDING = 3
    SKIPPED = 4


class FileNameFormatter(logging.Formatter):
    def format(self, record):
        record.filenameinfo = getattr(record, "filenameinfo", "unknown")
        return super().format(record)


def setup_logger(log_queue, filename):
    logger = logging.getLogger(filename)
    if not logger.handlers:
        if os.getenv("SERVER_ENV") == "prod":
            logger.setLevel(logging.INFO)
        else:
            logger.setLevel(logging.DEBUG)
        handler = QueueHandler(log_queue)
        logger.addHandler(handler)
        logger.propagate = False  # Prevent propagation to parent loggers
    return logger


def logger_thread(log_queue, log_file):
    handler = logging.FileHandler(log_file)
    formatter = FileNameFormatter(
        "%(asctime)s - %(filenameinfo)s - %(levelname)s - %(message)s"
    )
    handler.setFormatter(formatter)

    while True:
        try:
            record = log_queue.get()
            if record is None:
                break
            # Format and write the log record
            message = formatter.format(record)
            handler.stream.write(message + "\n")
            handler.stream.flush()
        except Exception:
            import traceback
            import sys

            print("[ERR] Error in logger thread:", file=sys.stderr)
            traceback.print_exc(file=sys.stderr)


def setup_direct_logger(log_file, filename, pid=None):
    """Setup a logger that writes directly to the log file without using a queue."""
    # Create a unique logger name using the process ID
    logger_name = f"{filename}_{pid}" if pid else filename
    logger = logging.getLogger(logger_name)

    if not logger.handlers:
        handler = logging.FileHandler(log_file)
        formatter = logging.Formatter("%(asctime)s - %(filenameinfo)s - %(levelname)s - %(message)s")
        handler.setFormatter(formatter)
        logger.addHandler(handler)

        if os.getenv("SERVER_ENV") == "prod":
            logger.setLevel(logging.INFO)
        else:
            logger.setLevel(logging.DEBUG)

    # Add filename info to the logger's extra info
    extra = {"filenameinfo": filename}
    logger = logging.LoggerAdapter(logger, extra)

    return logger