GithubHelp home page GithubHelp logo

Comments (12)

ComixHe avatar ComixHe commented on June 12, 2024

如果需要使用QLoginCategory、qCWarning之类的日志输出方式,应该调用registerCategoryAppender,否则该category不会被注册到Logger

from dtkcore.

ArchieMeng avatar ArchieMeng commented on June 12, 2024

如果需要使用QLoginCategory、qCWarning之类的日志输出方式,应该调用registerCategoryAppender,否则该category不会被注册到Logger

DLogManager无此方法.

from dtkcore.

ComixHe avatar ComixHe commented on June 12, 2024
#include <LogManager.h>
#include <Logger.h>
#include <dtkcore_global.h>
#include <FileAppender.h>
#include <QLoggingCategory>

#ifndef QT_DEBUG
inline Q_LOGGING_CATEGORY(test, "dtk.test", QtInfoMsg);
#else
inline Q_LOGGING_CATEGORY(test, "dtk.test");
#endif

DCORE_USE_NAMESPACE

int main() {
  DLogManager::registerConsoleAppender();
  DLogManager::registerFileAppender();
  Logger *gLogger = Logger::globalInstance();
  FileAppender *fileAppener = new FileAppender("/tmp/log");
  if (fileAppener->detailsLevel() > Logger::Trace)
    fileAppener->setDetailsLevel(Logger::Trace);
  gLogger->registerCategoryAppender("dtk.test", fileAppener);
  qCWarning(test, "test log");
  return 0;
}

这里有一个例子,可以参考一下

from dtkcore.

zccrs avatar zccrs commented on June 12, 2024
#include <LogManager.h>
#include <Logger.h>
#include <dtkcore_global.h>
#include <FileAppender.h>
#include <QLoggingCategory>

#ifndef QT_DEBUG
inline Q_LOGGING_CATEGORY(test, "dtk.test", QtInfoMsg);
#else
inline Q_LOGGING_CATEGORY(test, "dtk.test");
#endif

DCORE_USE_NAMESPACE

int main() {
  DLogManager::registerConsoleAppender();
  DLogManager::registerFileAppender();
  Logger *gLogger = Logger::globalInstance();
  FileAppender *fileAppener = new FileAppender("/tmp/log");
  if (fileAppener->detailsLevel() > Logger::Trace)
    fileAppener->setDetailsLevel(Logger::Trace);
  gLogger->registerCategoryAppender("dtk.test", fileAppener);
  qCWarning(test, "test log");
  return 0;
}

这里有一个例子,可以参考一下

不太应该让每个程序自己注册(如果这个程序自己不需要对某个 category 做特殊处理的话),举个例子,比如 dxcb 插件中有自己的 category,这就会导致一旦触发 dxcb 的日志(默认至少会输出warning级别)。就会在某个程序的日志文件里看到一行不知所以的警告,这时候是要这个程序自己注册一下对 dxcb 插件里的日志的处理吗?如果有更多的插件要怎么办?

能不能这样:如果没有注册专门的 registerCategoryAppender,全都到默认的 globalAppender 中处理。

from dtkcore.

ComixHe avatar ComixHe commented on June 12, 2024
    DLogManager::registerConsoleAppender();
    DLogManager::registerFileAppender();
    qCWarning(dtkDefaultCategory()) << "test log";

这样可以吗?

from dtkcore.

zccrs avatar zccrs commented on June 12, 2024
    DLogManager::registerConsoleAppender();
    DLogManager::registerFileAppender();
    qCWarning(dtkDefaultCategory()) << "test log";

这样可以吗?

你的意思是提供一个默认的 dtkDefaultCategory 给所有程序用?

from dtkcore.

ComixHe avatar ComixHe commented on June 12, 2024

是的,如果不想自己注册category的话统一使用默认的category, 默认写到/tmp/rollLog

from dtkcore.

zccrs avatar zccrs commented on June 12, 2024

是的,如果不想自己注册category的话统一使用默认的category, 默认写到/tmp/rollLog

这样没有意义,如果不想注册 category,那跟直接使用 qDebug 这类不带 category 的没有区别。今后我们自己开发的项目的log都会要求按不同的分类使用不同的 category。如果程序使用的 category 都是同样的,那就失去了用 category 的意义。

from dtkcore.

ComixHe avatar ComixHe commented on June 12, 2024

但qCWarning必须要提供一个category,并且原来的实现也是提供一个默认的category:

#if QT_VERSION >= 0x050000
static void qtLoggerMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString &msg)
{
    Logger::LogLevel level = Logger::Warning;
    switch (type)
    {
    case QtDebugMsg:
        level = Logger::Debug;
        break;
#if QT_VERSION >= 0x050500
    case QtInfoMsg:
        level = Logger::Info;
        break;
#endif
    case QtWarningMsg:
        level = Logger::Warning;
        break;
    case QtCriticalMsg:
        level = Logger::Error;
        break;
    case QtFatalMsg:
        level = Logger::Fatal;
        break;
    }

    bool isDefaultCategory = QString::fromLatin1(context.category) == "default";
    Logger::globalInstance()->write(level, context.file, context.line, context.function,
                                    isDefaultCategory ? nullptr : context.category, msg);
}

#else

from dtkcore.

ComixHe avatar ComixHe commented on June 12, 2024

已有pr需要验证:#294

from dtkcore.

zccrs avatar zccrs commented on June 12, 2024

已有pr需要验证:#294

在pr的comment和commit信息(注意commit信息里不要写 Close)中关联一下这个issue。

from dtkcore.

ComixHe avatar ComixHe commented on June 12, 2024

信息已更新

from dtkcore.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.