<?php

/**
* author : forecho <caizhenghai@gmail.com>
* createTime : 2015/12/22 18:13
* description:
*/
namespace common\components; use Yii;
use yii\helpers\FileHelper; class FileTarget extends \yii\log\FileTarget
{
/**
* @var bool 是否启用日志前缀 (@app/runtime/logs/error/20151223_app.log)
*/
public $enableDatePrefix = false; /**
* @var bool 启用日志等级目录
*/
public $enableCategoryDir = false; private $_logFilePath = ''; public function init()
{
if ($this->logFile === null) {
$this->logFile = Yii::$app->getRuntimePath() . '/logs/app.log';
} else {
$this->logFile = Yii::getAlias($this->logFile);
}
$this->_logFilePath = dirname($this->logFile); // 启用日志前缀
if ($this->enableDatePrefix) {
$filename = basename($this->logFile);
$this->logFile = $this->_logFilePath . '/' . date('Ymd') . '_' . $filename;
} if (!is_dir($this->_logFilePath)) {
FileHelper::createDirectory($this->_logFilePath, $this->dirMode, true);
} if ($this->maxLogFiles < 1) {
$this->maxLogFiles = 1;
}
if ($this->maxFileSize < 1) {
$this->maxFileSize = 1;
} }
}

在配置文件中这样使用:

'components' => [
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
/**
* 错误级别日志:当某些需要立马解决的致命问题发生的时候,调用此方法记录相关信息。
* 使用方法:Yii::error()
*/
[
'class' => 'common\components\FileTarget',
// 日志等级
'levels' => ['error'],
// 被收集记录的额外数据
'logVars' => ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION','_SERVER'],
// 指定日志保存的文件名
'logFile' => '@app/runtime/logs/error/app.log',
// 是否开启日志 (@app/runtime/logs/error/20151223_app.log)
'enableDatePrefix' => true,
'maxFileSize' => 1024 * 1,
'maxLogFiles' => 100,
],
/**
* 警告级别日志:当某些期望之外的事情发生的时候,使用该方法。
* 使用方法:Yii::warning()
*/
[
'class' => 'common\components\FileTarget',
// 日志等级
'levels' => ['warning'],
// 被收集记录的额外数据
'logVars' => ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION','_SERVER'],
// 指定日志保存的文件名
'logFile' => '@app/runtime/logs/warning/app.log',
// 是否开启日志 (@app/runtime/logs/warning/20151223_app.log)
'enableDatePrefix' => true,
'maxFileSize' => 1024 * 1,
'maxLogFiles' => 100,
],
/**
* info 级别日志:在某些位置记录一些比较有用的信息的时候使用。
* 使用方法:Yii::info()
*/
[
'class' => 'common\components\FileTarget',
// 日志等级
'levels' => ['info'],
// 被收集记录的额外数据
'logVars' => ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION','_SERVER'],
// 指定日志保存的文件名
'logFile' => '@app/runtime/logs/info/app.log',
// 是否开启日志 (@app/runtime/logs/info/20151223_app.log)
'enableDatePrefix' => true,
'maxFileSize' => 1024 * 1,
'maxLogFiles' => 100,
],
/**
* trace 级别日志:记录关于某段代码运行的相关消息。主要是用于开发环境。
* 使用方法:Yii::trace()
*/
[
'class' => 'common\components\FileTarget',
// 日志等级
'levels' => ['trace'],
// 被收集记录的额外数据
'logVars' => ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION','_SERVER'],
// 指定日志保存的文件名
'logFile' => '@app/runtime/logs/trace/app.log',
// 是否开启日志 (@app/runtime/logs/trace/20151223_app.log)
'enableDatePrefix' => true,
'maxFileSize' => 1024 * 1,
'maxLogFiles' => 100,
],
],
],
],

确定不需要调parent::init(); 或者直接继承Target

不需要啊,因为已经继承了 \yii\log\FileTarget

扩展 Yii2 自带的日志组件的更多相关文章

  1. 细说JDK日志组件

    1. 概述 JDK自带的日志组件在包java.util.logging下,如图: 2. 架构如上图所示,JDK日志组件核心元素包括:Logger,Handler,Filter和Formatter,他们 ...

  2. 如何扩展分布式日志组件(Exceptionless)的Webhook事件通知类型?

    写在前面 从上一篇博客高并发.低延迟之C#玩转CPU高速缓存(附示例)到现在又有几个月没写博客了,啥也不说,变得越来越懒了,懒惰产生了拖延后遗症. 最近一周升级了微服务项目使用的分布式日志组件Exce ...

  3. net core体系-web应用程序-4net core2.0大白话带你入门-7asp.net core日志组件(Logger和Nlog)

    asp.net core日志组件   日志介绍 Logging的使用 1. appsettings.json中Logging的介绍 Logging的配置信息是保存在appsettings.json配置 ...

  4. 基于log4net的日志组件扩展封装,实现自动记录交互日志 XYH.Log4Net.Extend(微服务监控)

    背景: 随着公司的项目不断的完善,功能越来越复杂,服务也越来越多(微服务),公司迫切需要对整个系统的每一个程序的运行情况进行监控,并且能够实现对自动记录不同服务间的程序调用的交互日志,以及通一个服务或 ...

  5. Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析

    本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 章节概览 morgan是express默认的日志中间件, ...

  6. JDK自带的日志Logging

    OK,现在我们来研究下JDK自带的日志Logger. 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用. 相对于 ...

  7. Java中日志组件详解

    avalon-logkit Java中日志组件详解 lanhy 发布于 2020-9-1 11:35 224浏览 0收藏 作为开发人员,我相信您对日志记录工具并不陌生. Java还具有功能强大且功能强 ...

  8. .NetCore中的日志(1)日志组件解析

    .NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...

  9. C#组件系列———又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...

随机推荐

  1. ESLint检测JavaScript代码

    1.安装 有2中安装方式:全局安装和局部安装. 局部安装方式为: (1)cnpm install -g eslint (2)打开项目目录.配置eslint文件 eslint --init (3)执行e ...

  2. 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题

    原因: 没有引用EntityFramework命令 解决: 在程序包管理器控制台执行如下命令:Import-Module 项目路径\packages\EntityFramework.6.1.3(EF版 ...

  3. 会话管理之Cookie技术

    会话管理是web开发中比较重要的环节,这一节主要总结下会话管理中的cookie技术. 1. 何为会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个 ...

  4. PJSIP dialog inv销毁

    PJSIP的Diaglog(类型为pjsip_dialog) 可以被外部调用,同时PJSIP有自己的机制销毁用户创建的 Dialog,如PJSIP内部销毁了某个Diaglog,用户在不知情的情况下继续 ...

  5. css 控制文本显示两行 超过省略号显示

    display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; word-break: break-all; ov ...

  6. vi编辑器命令大全

    >> from zhuhaiqing.info

  7. linux命令的别名alias,unalias

    1. 别名 linux别名alias的作用: 1. 简化特别长得命令和參数 2. 对一些命令添加默认选项.提高安全性. 2. alias使用 [www@work sh]$ alias lm='ls - ...

  8. centos6.5安装Apache+MySQL+PHP

    一.安装 MySQL 首先来进行 MySQL 的安装.打开超级终端,输入: [root@localhost ~]# yum install mysql mysql-server 安装完毕,让 MySQ ...

  9. Android内容提供者

    一个应用中的数据库对别人是不会提供直接的访问的,而是提供接口给别人访问,但是一般应用开发的时候都是去获取别人的数据,而不是自己提供数据. 继承ContentProvider: 在Menifest中注册 ...

  10. xfs 文件系统损坏修复 fscheck