search
HomeBackend DevelopmentPHP TutorialCode implementation of PHP rolling log_PHP tutorial

Code implementation of PHP rolling log_PHP tutorial

Jul 13, 2016 am 09:51 AM
phpcodeaccomplishIloghavescrollofClass libraryRecord

Code implementation of PHP rolling log

PHP rolling log library

PHP records logs. I have come across a log recording method that divides folders into folders by year and month, and then divides files into files by day. This method has advantages and disadvantages and has its usage scenarios. What I want to talk about today is another way. A logging method - file rolling method to record logs. Of course, this rolling mechanism can also be added to the previous logging method.

How to make the log scroll

Rolling log, as the name suggests, uses a series of log files to record the log of a module. The number of files in the same module is limited, up to maxNum, and the size is also limited, up to maxSize bytes. The file name has a certain naming method, such as : testlog.log, testlog_1.log, testlog_2.log,,,,,, where testlog.log is the log file in use. When the testlog.log file size reaches the limit maxSize, the log file will be rolled backwards, like As follows:

The code is as follows:


testlog_2.log -> testlog_3.log
testlog_1.log -> testlog_2.log
testlog.log -> testlog_1.log
testlog.log #0kb

When the number of log files reaches the limit maxNum, the elimination mechanism will be started and the oldest log will be deleted. For example, if maxNum is set to 10, there will be a maximum of 10 files including testlog.log at this time. When scrolling If testlog_9.log exists, it will start rolling from testlog_8.log and overwrite testlog_9.log. This ensures normal log recording and does not cause large log files to appear, ensuring the normal operation of the log system.

Code implementation

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

final class LOGS {

private $level;

private $maxFileNum;

private $maxFileSize;

private $logPath;

private $file;

 

//日志的级别DEBUG,MSG,ERR

const LOGS_DEBUG = 0;

const LOGS_MSG = 1;

const LOGS_ERR = 2;

 

private static $instance = null;

 

private function __construct(){}

 

public static function getInstance()

{

if(self::$instance == null)

{

self::$instance = new self();

}

return self::$instance;

}

 

/**

* @Desc initialization

* @Param $level int record level

* @Param $maxNum int Maximum number of log files

* @Param $maxSize int Maximum log file size

* @Param $logPath string log file saving path

* @Param $file string log file name prefix

* @Return boolean

*/

public function init($level, $maxNum, $maxSize, $logPath, $file)

{

$level = intval($level);

$maxNum = intval($maxNum);

$maxSize = intval($maxSize);

!is_dir($logPath) && mkdir($logPath, 0777, true);

if(!in_array($level, array(self::LOGS_DEBUG, self::LOGS_MSG, self::LOGS_ERR)) || $maxNum

{

return false;

}

$this->level = $level;

$this->maxFileNum = $maxNum;

$this->maxFileSize = $maxSize;

$this->logPath = $logPath;

$this->file = $file;

return true;

}

 

/**

* @Desc Get formatted time string

*/

public function formatTime()

{

$ustime = explode ( " ", microtime () );

return "[" . date('Y-m-d H:i:s', time()) .".". ($ustime[0] * 1000) . "]";

}

 

/**

* @Desc rolling log file

*/

public function log($str)

{

$path = $this->logPath.DIRECTORY_SEPARATOR.$this->file.".log";

clearstatcache();

if(file_exists($path))

{

if(filesize($path) >= $this->maxFileSize)

{

$index = 1;

//获取最大的滚动日志数目

for(;$index maxFileNum; $index )

{

if(!file_exists($this->logPath.DIRECTORY_SEPARATOR.$this->file."_".$index.".log"))

{

break;

}

}

//已经存在maxFileNum个日志文件了

if($index == $this->maxFileNum)

{

$index--;

}

//滚动日志

for(;$index > 1; $index--)

{

$new = $this->logPath.DIRECTORY_SEPARATOR.$this->file."_".$index.".log";

$old = $this->logPath.DIRECTORY_SEPARATOR.$this->file."_".($index - 1).".log";

rename($old, $new);

}

 

$newFile = $this->logPath.DIRECTORY_SEPARATOR.$this->file."_1.log";

rename($path, $newFile);

}

}

$fp = fopen($path, "a b");

fwrite($fp, $str, strlen($str));

fclose($fp);

return true;

}

 

/**

* @Desc records debugging information

* @Param string log information

* @Param string The file where the log is located

* @Param string log line

*/

public function debug($msg, $file, $line)

{

if($this->level

{

$this->log($this->formatTime()."[{$file}:{$line}]DEBUG: ${msg}n");

}

}

 

/**

* @Desc record information

* @Param string log information

* @Param string The file where the log is located

* @Param string log line

*/

public function msg($msg, $file, $line)

{

if($this->level

{

$this->log($this->formatTime()."[{$file}:{$line}]MSG: ${msg}n");

}

}

 

/**

* @Desc logs error messages

* @Param string log information

* @Param string The file where the log is located

* @Param string log line

*/

public function err($msg, $file, $line)

{

if($this->level

{

$this->log($this->formatTime()."[{$file}:{$line}]ERR: ${msg}n");

}

}

}

看个例子

#例子中设置记录级别为msg(此时debug信息是不会纪录的),日志文件个数为5,大小为200个字节(测试方便),文件名称为testlog

1

2

3

4

5

$logs = LOGS::getInstance();

$logs->init(1, 5, 200, "./", 'testlog');

 

$logs->msg("YRT", __FILE__, __LINE__);

$logs->debug("YRT", __FILE__, __LINE__);

1 2

3

4

5

1

2

3

4

5

testlog_4.log

testlog_3.log

testlog_2.log

testlog_1.log

testlog.log #最新的日志在这个文件中

$logs = LOGS::getInstance(); $logs->init(1, 5, 200, "./", 'testlog');

 $logs->msg("YRT", __FILE__, __LINE__); $logs->debug("YRT", __FILE__, __LINE__);
当我们不停的运行这个例子的时候,会在代码所在文件夹下生成5个文件就像下面这样:
1 2 3 4 5 testlog_4.log testlog_3.log testlog_2.log testlog_1.log testlog.log #最新的日志在这个文件中 http://www.bkjia.com/PHPjc/1014276.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1014276.htmlTechArticlePHP滚动日志的代码实现 PHP滚动日志类库 PHP记录日志,我之前接触过的有按照年月分文件夹,然后按照日分文件的日志记录方式,这种方式...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
What are the advantages of using a database to store sessions?What are the advantages of using a database to store sessions?Apr 24, 2025 am 12:16 AM

The main advantages of using database storage sessions include persistence, scalability, and security. 1. Persistence: Even if the server restarts, the session data can remain unchanged. 2. Scalability: Applicable to distributed systems, ensuring that session data is synchronized between multiple servers. 3. Security: The database provides encrypted storage to protect sensitive information.

How do you implement custom session handling in PHP?How do you implement custom session handling in PHP?Apr 24, 2025 am 12:16 AM

Implementing custom session processing in PHP can be done by implementing the SessionHandlerInterface interface. The specific steps include: 1) Creating a class that implements SessionHandlerInterface, such as CustomSessionHandler; 2) Rewriting methods in the interface (such as open, close, read, write, destroy, gc) to define the life cycle and storage method of session data; 3) Register a custom session processor in a PHP script and start the session. This allows data to be stored in media such as MySQL and Redis to improve performance, security and scalability.

What is a session ID?What is a session ID?Apr 24, 2025 am 12:13 AM

SessionID is a mechanism used in web applications to track user session status. 1. It is a randomly generated string used to maintain user's identity information during multiple interactions between the user and the server. 2. The server generates and sends it to the client through cookies or URL parameters to help identify and associate these requests in multiple requests of the user. 3. Generation usually uses random algorithms to ensure uniqueness and unpredictability. 4. In actual development, in-memory databases such as Redis can be used to store session data to improve performance and security.

How do you handle sessions in a stateless environment (e.g., API)?How do you handle sessions in a stateless environment (e.g., API)?Apr 24, 2025 am 12:12 AM

Managing sessions in stateless environments such as APIs can be achieved by using JWT or cookies. 1. JWT is suitable for statelessness and scalability, but it is large in size when it comes to big data. 2.Cookies are more traditional and easy to implement, but they need to be configured with caution to ensure security.

How can you protect against Cross-Site Scripting (XSS) attacks related to sessions?How can you protect against Cross-Site Scripting (XSS) attacks related to sessions?Apr 23, 2025 am 12:16 AM

To protect the application from session-related XSS attacks, the following measures are required: 1. Set the HttpOnly and Secure flags to protect the session cookies. 2. Export codes for all user inputs. 3. Implement content security policy (CSP) to limit script sources. Through these policies, session-related XSS attacks can be effectively protected and user data can be ensured.

How can you optimize PHP session performance?How can you optimize PHP session performance?Apr 23, 2025 am 12:13 AM

Methods to optimize PHP session performance include: 1. Delay session start, 2. Use database to store sessions, 3. Compress session data, 4. Manage session life cycle, and 5. Implement session sharing. These strategies can significantly improve the efficiency of applications in high concurrency environments.

What is the session.gc_maxlifetime configuration setting?What is the session.gc_maxlifetime configuration setting?Apr 23, 2025 am 12:10 AM

Thesession.gc_maxlifetimesettinginPHPdeterminesthelifespanofsessiondata,setinseconds.1)It'sconfiguredinphp.iniorviaini_set().2)Abalanceisneededtoavoidperformanceissuesandunexpectedlogouts.3)PHP'sgarbagecollectionisprobabilistic,influencedbygc_probabi

How do you configure the session name in PHP?How do you configure the session name in PHP?Apr 23, 2025 am 12:08 AM

In PHP, you can use the session_name() function to configure the session name. The specific steps are as follows: 1. Use the session_name() function to set the session name, such as session_name("my_session"). 2. After setting the session name, call session_start() to start the session. Configuring session names can avoid session data conflicts between multiple applications and enhance security, but pay attention to the uniqueness, security, length and setting timing of session names.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment