Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
AppenderFile.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
AppenderFile.h
"
7
#include "
Common.h
"
8
9
#if PLATFORM == PLATFORM_WINDOWS
10
# include <Windows.h>
11
#endif
12
13
AppenderFile::AppenderFile
(
uint8
id
, std::string
const
&
name
,
LogLevel
level
,
const
char
* _filename,
const
char
* _logDir,
const
char
* _mode,
AppenderFlags
_flags,
uint64
fileSize
) :
14
Appender
(
id
,
name
,
AppenderType
::
APPENDER_FILE
,
level
, _flags),
15
logfile
(NULL),
16
filename
(_filename),
17
logDir
(_logDir),
18
mode
(_mode),
19
maxFileSize
(
fileSize
),
20
fileSize
(0)
21
{
22
dynamicName
= std::string::npos !=
filename
.find(
"%s"
);
23
backup
= (_flags &
APPENDER_FLAGS_MAKE_FILE_BACKUP
) != 0;
24
25
logfile
= !
dynamicName
?
OpenFile
(_filename, _mode,
mode
==
"w"
&&
backup
) : NULL;
26
}
27
28
AppenderFile::~AppenderFile
()
29
{
30
CloseFile
();
31
}
32
33
void
AppenderFile::_write
(
LogMessage
const
& message)
34
{
35
bool
exceedMaxSize =
maxFileSize
> 0 && (
fileSize
.load() + message.
Size
()) >
maxFileSize
;
36
37
if
(
dynamicName
)
38
{
39
char
namebuf[
SKYFIRE_PATH_MAX
];
40
snprintf(namebuf,
SKYFIRE_PATH_MAX
,
filename
.c_str(), message.
param1
.c_str());
41
logfile
=
OpenFile
(namebuf,
mode
,
backup
|| exceedMaxSize);
42
}
43
else
if
(exceedMaxSize)
44
logfile
=
OpenFile
(
filename
,
"w"
,
true
);
45
46
if
(!
logfile
)
47
return
;
48
49
fprintf(
logfile
,
"%s%s"
, message.
prefix
.c_str(), message.
text
.c_str());
50
fflush(
logfile
);
51
fileSize
+=
uint64
(message.
Size
());
52
53
if
(
dynamicName
)
54
CloseFile
();
55
}
56
57
FILE*
AppenderFile::OpenFile
(std::string
const
&
filename
, std::string
const
&
mode
,
bool
backup
)
58
{
59
std::string fullName(
logDir
+
filename
);
60
if
(
backup
)
61
{
62
CloseFile
();
63
std::string newName(fullName);
64
newName.push_back(
'.'
);
65
newName.append(
LogMessage::getTimeStr
(time(NULL)));
66
rename(fullName.c_str(), newName.c_str());
// no error handling... if we couldn't make a backup, just ignore
67
}
68
69
if
(FILE* ret = fopen(fullName.c_str(),
mode
.c_str()))
70
{
71
fileSize
= ftell(ret);
72
return
ret;
73
}
74
75
return
NULL;
76
}
77
78
void
AppenderFile::CloseFile
()
79
{
80
if
(
logfile
)
81
{
82
fclose(
logfile
);
83
logfile
= NULL;
84
}
85
}
AppenderType
AppenderType
Definition
Appender.h:29
AppenderType::APPENDER_FILE
@ APPENDER_FILE
Definition
Appender.h:32
AppenderFlags
AppenderFlags
Definition
Appender.h:37
APPENDER_FLAGS_MAKE_FILE_BACKUP
@ APPENDER_FLAGS_MAKE_FILE_BACKUP
Definition
Appender.h:43
LogLevel
LogLevel
Definition
Appender.h:16
AppenderFile.h
Common.h
uint8
std::uint8_t uint8
Definition
Define.h:79
SKYFIRE_PATH_MAX
#define SKYFIRE_PATH_MAX
Definition
Define.h:35
uint64
std::uint64_t uint64
Definition
Define.h:76
AppenderFile::CloseFile
void CloseFile()
Definition
AppenderFile.cpp:78
AppenderFile::mode
std::string mode
Definition
AppenderFile.h:25
AppenderFile::OpenFile
FILE * OpenFile(std::string const &_name, std::string const &_mode, bool _backup)
Definition
AppenderFile.cpp:57
AppenderFile::_write
void _write(LogMessage const &message)
Definition
AppenderFile.cpp:33
AppenderFile::AppenderFile
AppenderFile(uint8 _id, std::string const &_name, LogLevel level, const char *filename, const char *logDir, const char *mode, AppenderFlags flags, uint64 maxSize)
Definition
AppenderFile.cpp:13
AppenderFile::fileSize
std::atomic< uint64 > fileSize
Definition
AppenderFile.h:29
AppenderFile::logfile
FILE * logfile
Definition
AppenderFile.h:22
AppenderFile::filename
std::string filename
Definition
AppenderFile.h:23
AppenderFile::dynamicName
bool dynamicName
Definition
AppenderFile.h:26
AppenderFile::backup
bool backup
Definition
AppenderFile.h:27
AppenderFile::maxFileSize
uint64 maxFileSize
Definition
AppenderFile.h:28
AppenderFile::~AppenderFile
~AppenderFile()
Definition
AppenderFile.cpp:28
AppenderFile::logDir
std::string logDir
Definition
AppenderFile.h:24
Appender::name
std::string name
Definition
Appender.h:89
Appender::id
uint8 id
Definition
Appender.h:88
Appender::level
LogLevel level
Definition
Appender.h:91
Appender::Appender
Appender(uint8 _id, std::string const &name, AppenderType type=AppenderType::APPENDER_NONE, LogLevel level=LogLevel::LOG_LEVEL_DISABLED, AppenderFlags flags=APPENDER_FLAGS_NONE)
Definition
Appender.cpp:24
LogMessage
Definition
Appender.h:47
LogMessage::getTimeStr
static std::string getTimeStr(time_t time)
Definition
Appender.cpp:10
LogMessage::text
std::string text
Definition
Appender.h:57
LogMessage::Size
uint32 Size() const
@ Returns size of the log message content in bytes
Definition
Appender.h:63
LogMessage::param1
std::string param1
Definition
Appender.h:59
LogMessage::prefix
std::string prefix
Definition
Appender.h:58
src
server
shared
Logging
AppenderFile.cpp
Generated on
for Project SkyFire Core by
1.17.0