Skip to content

Commit

Permalink
Merge pull request #393 from Derek-Wds/main
Browse files Browse the repository at this point in the history
Update qlib logger
  • Loading branch information
you-n-g committed Apr 23, 2021
2 parents ee91503 + e410caa commit 50be7a9
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 14 deletions.
5 changes: 3 additions & 2 deletions qlib/contrib/workflow/record_temp.py
@@ -1,18 +1,19 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

import logging
import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error
from typing import Dict, Text, Any
import numpy as np

from ...contrib.eva.alpha import calc_ic
from ...workflow.record_temp import RecordTemp
from ...workflow.record_temp import SignalRecord
from ...data import dataset as qlib_dataset
from ...log import get_module_logger

logger = get_module_logger("workflow", "INFO")
logger = get_module_logger("workflow", logging.INFO)


class MultiSegRecord(RecordTemp):
Expand Down
34 changes: 32 additions & 2 deletions qlib/log.py
Expand Up @@ -12,7 +12,37 @@
from .config import C


def get_module_logger(module_name, level: Optional[int] = None):
class MetaLogger(type):
def __new__(cls, name, bases, dict):
wrapper_dict = logging.Logger.__dict__.copy()
wrapper_dict.update(dict)
wrapper_dict["__doc__"] = logging.Logger.__doc__
return type.__new__(cls, name, bases, wrapper_dict)


class QlibLogger(metaclass=MetaLogger):
"""
Customized logger for Qlib.
"""

def __init__(self, module_name):
self.module_name = module_name
self.level = 0

@property
def logger(self):
logger = logging.getLogger(self.module_name)
logger.setLevel(self.level)
return logger

def setLevel(self, level):
self.level = level

def __getattr__(self, name):
return self.logger.__getattribute__(name)


def get_module_logger(module_name, level: Optional[int] = None) -> logging.Logger:
"""
Get a logger for a specific module.
Expand All @@ -27,7 +57,7 @@ def get_module_logger(module_name, level: Optional[int] = None):

module_name = "qlib.{}".format(module_name)
# Get logger.
module_logger = logging.getLogger(module_name)
module_logger = QlibLogger(module_name)
module_logger.setLevel(level)
return module_logger

Expand Down
4 changes: 2 additions & 2 deletions qlib/workflow/exp.py
@@ -1,14 +1,14 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

import mlflow
import mlflow, logging
from mlflow.entities import ViewType
from mlflow.exceptions import MlflowException
from pathlib import Path
from .recorder import Recorder, MLflowRecorder
from ..log import get_module_logger

logger = get_module_logger("workflow", "INFO")
logger = get_module_logger("workflow", logging.INFO)


class Experiment:
Expand Down
4 changes: 2 additions & 2 deletions qlib/workflow/expm.py
Expand Up @@ -4,7 +4,7 @@
import mlflow
from mlflow.exceptions import MlflowException
from mlflow.entities import ViewType
import os
import os, logging
from pathlib import Path
from contextlib import contextmanager
from typing import Optional, Text
Expand All @@ -14,7 +14,7 @@
from .recorder import Recorder
from ..log import get_module_logger

logger = get_module_logger("workflow", "INFO")
logger = get_module_logger("workflow", logging.INFO)


class ExpManager:
Expand Down
4 changes: 2 additions & 2 deletions qlib/workflow/record_temp.py
@@ -1,7 +1,7 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

import re
import re, logging
import pandas as pd
from pathlib import Path
from pprint import pprint
Expand All @@ -16,7 +16,7 @@
from ..contrib.eva.alpha import calc_ic, calc_long_short_return, calc_long_short_prec
from ..contrib.strategy.strategy import BaseStrategy

logger = get_module_logger("workflow", "INFO")
logger = get_module_logger("workflow", logging.INFO)


class RecordTemp:
Expand Down
4 changes: 2 additions & 2 deletions qlib/workflow/recorder.py
@@ -1,14 +1,14 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

import mlflow
import mlflow, logging
import shutil, os, pickle, tempfile, codecs, pickle
from pathlib import Path
from datetime import datetime
from ..utils.objm import FileManager
from ..log import get_module_logger

logger = get_module_logger("workflow", "INFO")
logger = get_module_logger("workflow", logging.INFO)


class Recorder:
Expand Down
4 changes: 2 additions & 2 deletions qlib/workflow/utils.py
@@ -1,12 +1,12 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

import sys, traceback, signal, atexit
import sys, traceback, signal, atexit, logging
from . import R
from .recorder import Recorder
from ..log import get_module_logger

logger = get_module_logger("workflow", "INFO")
logger = get_module_logger("workflow", logging.INFO)


# function to handle the experiment when unusual program ending occurs
Expand Down

0 comments on commit 50be7a9

Please sign in to comment.