#include <QtCore>#include <QtNetwork>int main(int argc, char** argv){ QCoreApplication app(argc, argv); QTcpServer *server = new QTcpServer; // слушаем на всех интерфейсах порт, 10600 - log00 server->listen(QHostAddress::Any, 10600); QTcpSocket *connection; // ждем подключения if (server->waitForNewConnection(-1)) { // получаем соект connection = server->nextPendingConnection(); // пока не поизойдет разрыва соединения while(true) { // ждем данных одну секунду if (connection->waitForReadyRead(1000)) // направляем все пришедшие данные в qDebug() qDebug() << connection->readAll(); // Если произошел разрыв, выходим из цикла if (connection->state() == QAbstractSocket::UnconnectedState) break; } } // вычурно, но удобно QTimer::singleShot(1000, &app, SLOT(quit())); return app.exec();}
#include <QtCore>#include <QtNetwork>#include <Log4Qt/logmanager.h>#include <Log4Qt/simpletimelayout.h>#include <Log4Qt/consoleappender.h>int main(int argc, char** argv){ using namespace Log4Qt; QCoreApplication app(argc, argv); QTranslator trans; trans.load("log4qt_" + QLocale::system().name() , QLibraryInfo::location(QLibraryInfo::TranslationsPath)); qDebug() << "transl empty" << trans.isEmpty(); app.installTranslator(&trans); LogManager::rootLogger(); LogManager::setHandleQtMessages(true); // создаем объект форматирующий сообщения SimpleTimeLayout *timeLayout = new SimpleTimeLayout(); timeLayout->setName("TimeLayout"); timeLayout->activateOptions(); // выводим в консоль ConsoleAppender *console = new ConsoleAppender(timeLayout, ConsoleAppender::STDOUT_TARGET); console->setName("Console"); console->activateOptions(); LogManager::rootLogger()->addAppender(console); // сокет для подключения QTcpSocket *socket = new QTcpSocket(); // подключаемся socket->connectToHost("localhost", 10600); // Ждем 5 секунд if (socket->waitForConnected(50000)) { qDebug() << "Connected"; // Создаем текстовый поток, но основе сокета QTextStream *textStream = new QTextStream(socket); // Создаем объект выводящий сообщения на основе текстового потока WriterAppender *socketAppender = new WriterAppender(timeLayout, textStream); socketAppender->setName("SocketAppender"); // обязательно активируем socketAppender->activateOptions(); // Добавляем вывод к журналу LogManager::rootLogger()->addAppender(socketAppender); } else qDebug() << "Not connected"; LogManager::rootLogger(); qDebug() << "From qDebug() "; LogManager::startup(); LogManager::logger("Logger")->info("First message"); LogManager::logger("Logger")->warn("Warn message"); // ждем отправки данных 5 секунд socket->waitForBytesWritten(5000); QTimer::singleShot(1000, &app, SLOT(quit())); app.exec();}
QTcpSocket *socket = new QTcpSocket();socket->connectToHost("localhost", 10600);if (socket->waitForConnected(50000)) { QTextStream *textStream = new QTextStream(socket); WriterAppender *socketAppender = new WriterAppender(timeLayout, textStream); socketAppender->setName("SocketAppender"); socketAppender->activateOptions(); LogManager::rootLogger()->addAppender(socketAppender);}
#if defined(__WIN32__) || defined(WIN) || defined(WIN32) || defined(Q_OS_WIN32).....
.....#endif // #if defined(__WIN32__) || defined(WIN) || defined(WIN32) || defined(Q_OS_WIN32)
// print message to output console//writer()->operator <<(message);// MINI HACK in win stdout not friend with setConsoleTextAttributeDWORD res;WriteConsole(hConsole, message.toLatin1().data(), message.toLatin1().size(), &res, 0);
C++ (Qt)writer()->operator <<(messsage);
#include <QtCore/QCoreApplication>#include <QtCore/QTimer>#include <Log4Qt/patternlayout.h>#include <Log4Qt/colorconsoleappender.h>#include <Log4Qt/logmanager.h>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); using namespace Log4Qt; PatternLayout *layout = new PatternLayout("\e[1;32m%d{dd.MM.yyyy hh:mm} \e[1;33m %p \e[44m%c [%t] - \e[47;1;31m%m\e[0m%n"); ColorConsoleAppender *appender = new ColorConsoleAppender(layout, ColorConsoleAppender::STDOUT_TARGET); appender->activateOptions(); LogManager::logger("Logger")->addAppender(appender); LogManager::logger("Logger")->info("Colored info message"); QTimer::singleShot(1000, &a, SLOT(quit())); return a.exec();}
LogManager::logger("Logger")->info("Colored info message"); // info - белый цвет например (шаблон 1)LogManager::logger("Logger")->warn("Colored warning message"); // warn - желтый цвет (шаблон 2)
debug()error()fatal()info()log()trace()warn()
"\e[1;32m%d{dd.MM.yyyy hh:mm} \e[1;33m %p \e[44m%c [%t] - \e[47;1;31m%m\e[0m%n"
CSSClassName {color: red;border: 1px;} ClassName::sub-control {color: green;background: black;}
CSSLogger {color: white;background: black;} Logger::level::info {color: white;} Logger::level::warn {color: yellow;}
#include <QtCore/QHash>#include <Log4Qt/layout.h>namespace Log4Qt{ class ColorLayout : public Layout { Q_OBJECT public: ColorLayout(QObject* parent = 0); virtual QString format(const LoggingEvent &rEvent);protected: virtual QDebug debug(QDebug &rDebug) const; };}
#include "colorlayout.h"#include <QtCore/QDebug>#include <Log4Qt/loggingevent.h>#include <Log4Qt/loggingevent.h>#include <Log4Qt/helpers/datetime.h>namespace Log4Qt{ ColorLayout::ColorLayout(QObject *parent) :Layout(parent) {} QString ColorLayout::format(const LoggingEvent &rEvent) { QString message; message += DateTime::fromMilliSeconds(rEvent.timeStamp()).toString("dd.MM.yyyy hh:mm"); message += " "; if (rEvent.level().toInt() == Level::FATAL_INT) message += "\e[1;31m"; message += rEvent.level().toString(); message += " "; message += rEvent.loggerName(); message += " ["; message += rEvent.threadName(); message += "] - "; message += rEvent.message();message += "\e[0m";message += endOfLine(); return message; } QDebug ColorLayout::debug(QDebug &rDebug) const { rDebug.nospace() << "ColorLayout(" << "name:" << objectName() << ")"; return rDebug.space(); }}