LMMS
Loading...
Searching...
No Matches
juce_FileLogger.cpp
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23namespace juce
24{
25
27 const String& welcomeMessage,
28 const int64 maxInitialFileSizeBytes)
29 : logFile (file)
30{
31 if (maxInitialFileSizeBytes >= 0)
32 trimFileSize (logFile, maxInitialFileSizeBytes);
33
34 if (! file.exists())
35 file.create(); // (to create the parent directories)
36
37 String welcome;
38 welcome << newLine
39 << "**********************************************************" << newLine
40 << welcomeMessage << newLine
41 << "Log started: " << Time::getCurrentTime().toString (true, true) << newLine;
42
43 FileLogger::logMessage (welcome);
44}
45
47
48//==============================================================================
50{
51 const ScopedLock sl (logLock);
52 DBG (message);
54 out << message << newLine;
55}
56
57void FileLogger::trimFileSize (const File& file, int64 maxFileSizeBytes)
58{
59 if (maxFileSizeBytes <= 0)
60 {
61 file.deleteFile();
62 }
63 else
64 {
65 const int64 fileSize = file.getSize();
66
67 if (fileSize > maxFileSizeBytes)
68 {
69 TemporaryFile tempFile (file);
70
71 {
72 FileOutputStream out (tempFile.getFile());
74
75 if (! (out.openedOk() && in.openedOk()))
76 return;
77
78 in.setPosition (fileSize - maxFileSizeBytes);
79
80 for (;;)
81 {
82 const char c = in.readByte();
83 if (c == 0)
84 return;
85
86 if (c == '\n' || c == '\r')
87 {
88 out << c;
89 break;
90 }
91 }
92
93 out.writeFromInputStream (in, -1);
94 }
95
97 }
98 }
99}
100
101//==============================================================================
103{
104 #if JUCE_MAC
105 return File ("~/Library/Logs");
106 #else
108 #endif
109}
110
111FileLogger* FileLogger::createDefaultAppLogger (const String& logFileSubDirectoryName,
112 const String& logFileName,
113 const String& welcomeMessage,
114 const int64 maxInitialFileSizeBytes)
115{
116 return new FileLogger (getSystemLogFileFolder().getChildFile (logFileSubDirectoryName)
117 .getChildFile (logFileName),
118 welcomeMessage, maxInitialFileSizeBytes);
119}
120
122 const String& logFileNameRoot,
123 const String& logFileNameSuffix,
124 const String& welcomeMessage)
125{
126 return new FileLogger (getSystemLogFileFolder().getChildFile (logFileSubDirectoryName)
127 .getChildFile (logFileNameRoot + Time::getCurrentTime().formatted ("%Y-%m-%d_%H-%M-%S"))
128 .withFileExtension (logFileNameSuffix)
129 .getNonexistentSibling(),
130 welcomeMessage, 0);
131}
132
133} // namespace juce
static void message(int level, const char *fmt,...)
Definition adplugdb.cpp:120
static File getSpecialLocation(const SpecialLocationType type)
Definition File.cpp:1642
Definition juce_File.h:45
@ userApplicationDataDirectory
Definition juce_File.h:889
Definition juce_FileInputStream.h:35
FileLogger(const File &fileToWriteTo, const String &welcomeMessage, const int64 maxInitialFileSizeBytes=128 *1024)
Definition juce_FileLogger.cpp:26
static FileLogger * createDefaultAppLogger(const String &logFileSubDirectoryName, const String &logFileName, const String &welcomeMessage, const int64 maxInitialFileSizeBytes=128 *1024)
Definition juce_FileLogger.cpp:111
static void trimFileSize(const File &file, int64 maxFileSize)
Definition juce_FileLogger.cpp:57
static File getSystemLogFileFolder()
Definition juce_FileLogger.cpp:102
File logFile
Definition juce_FileLogger.h:127
~FileLogger() override
Definition juce_FileLogger.cpp:46
static FileLogger * createDateStampedLogger(const String &logFileSubDirectoryName, const String &logFileNameRoot, const String &logFileNameSuffix, const String &welcomeMessage)
Definition juce_FileLogger.cpp:121
void logMessage(const String &) override
Definition juce_FileLogger.cpp:49
CriticalSection logLock
Definition juce_FileLogger.h:128
Definition juce_FileOutputStream.h:35
Definition juce_String.h:53
Definition juce_TemporaryFile.h:65
bool overwriteTargetFileWithTemporary() const
Definition juce_TemporaryFile.cpp:93
const File & getFile() const noexcept
Definition juce_TemporaryFile.h:126
static Time JUCE_CALLTYPE getCurrentTime() noexcept
Definition juce_Time.cpp:233
#define DBG(textToWrite)
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
Definition carla_juce.cpp:31
CriticalSection::ScopedLockType ScopedLock
Definition juce_CriticalSection.h:186
NewLine newLine
Definition juce_String.cpp:28
long long int64
Definition juce_MathsFunctions.h:54
return c
Definition crypt.c:175
struct zdirent * file
Definition win32.c:1500