使用独立的 Monolog 库旋转日志

如何解决使用独立的 Monolog 库旋转日志

我在处理一个遗留项目。 我已经添加了 monolog 记录器作为一个独立的库(而不是 Symfony)并且需要实现日志轮换。

Bellow 是一个 Logger 类,我不确定如何实现日志轮换功能

namespace Utils\Logger;

use Exception;
use Bootstrap;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Logger as MonologLogger;
use Monolog\Handler\StreamHandler;

/**
 * Class Logger
 */
class Logger
{
    /** @var MonologLogger $logger */
    private $logger;
    const DEBUG    = MonologLogger::DEBUG;
    const NOTICE   = MonologLogger::NOTICE;
    const WARNING  = MonologLogger::WARNING;
    const ERROR    = MonologLogger::ERROR;
    const CRITICAL = MonologLogger::CRITICAL;

    public function __construct()
    {
        $bootstrap  = Bootstrap::getInstance();
        $projectDir = $bootstrap->getProjectDir();
        $host       = $bootstrap->initHost();
        $domain     = $host->getDomain();

        $this->logger = new MonologLogger($host->getDomain());
        $this->logger->
        $this->logger->pushHandler(
            new StreamHandler(
                "$projectDir/var/log/$domain/$domain.log",MonologLogger::DEBUG)
        );

        $logRotate = new RotatingFileHandler("$projectDir/var/log/$domain/$domain.log");
    }

    /**
     * @param $level
     * @param $message
     * @param $context
     *
     * @return void
     */
    public function log($level,$message,array $context = [])
    {
        $message   = \is_string($message) ? $message : '';
        $exception = $this->getException($context);

        if ($exception) {
            $message = "{$exception->getMessage()} at line {$exception->getLine()} in file {$exception->getFile()} Code: {$exception->getCode()}";
        }

        switch ($level) {
            case self::DEBUG:
                $this->logger->debug($message);
                break;
            case self::NOTICE:
                $this->logger->notice($message);
                break;
            case self::WARNING:
                $this->logger->warning($message);
                break;
            case self::ERROR:
                $this->logger->error($message);
                break;
            case self::CRITICAL:
                $this->logger->critical($message);
                break;
            default:
                $this->logger->info($message);
                break;
        }
    }

    /**
     * @param array $context
     *
     * @return Exception|null
     */
    private function getException($context)
    {
        return array_key_exists('exception',$context) && $context['exception'] instanceof Exception
            ? $context['exception']
            : null;
    }
}

解决方法

看代码(https://github.com/Seldaek/monolog/blob/main/src/Monolog/Handler/RotatingFileHandler.php)...

.App {
  font-family: sans-serif;
  text-align: center;
  display: flex;
  position: absolute;
  width: 100%;
  height: 100%;
}

.content {
  flex: 1;
  position: relative;
}

.loading-overlay {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background: rgba(0,0.4);
  z-index: 1;
}

.content-pointer-event-none {
  pointer-events: none;
}

因此,如果您将 class RotatingFileHandler extends StreamHandler 的实例传递给 RotatingFileHandler,那么这应该可以工作...

pushHandler

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?