OpenShot Audio Library | OpenShotAudio 0.4.0
Loading...
Searching...
No Matches
juce_FileLogger.cpp
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//==============================================================================
49void FileLogger::logMessage (const String& message)
50{
51 const ScopedLock sl (logLock);
52 DBG (message);
53 FileOutputStream out (logFile, 256);
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());
73 FileInputStream in (file);
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
bool setPosition(int64) override
bool openedOk() const noexcept
FileLogger(const File &fileToWriteTo, const String &welcomeMessage, const int64 maxInitialFileSizeBytes=128 *1024)
static FileLogger * createDefaultAppLogger(const String &logFileSubDirectoryName, const String &logFileName, const String &welcomeMessage, const int64 maxInitialFileSizeBytes=128 *1024)
static void trimFileSize(const File &file, int64 maxFileSize)
static File getSystemLogFileFolder()
static FileLogger * createDateStampedLogger(const String &logFileSubDirectoryName, const String &logFileNameRoot, const String &logFileNameSuffix, const String &welcomeMessage)
void logMessage(const String &) override
bool openedOk() const noexcept
int64 getSize() const
static File JUCE_CALLTYPE getSpecialLocation(const SpecialLocationType type)
@ userApplicationDataDirectory
Definition juce_File.h:895
Result create() const
bool deleteFile() const
bool exists() const
virtual char readByte()
virtual int64 writeFromInputStream(InputStream &source, int64 maxNumBytesToWrite)
bool overwriteTargetFileWithTemporary() const
const File & getFile() const noexcept
static Time JUCE_CALLTYPE getCurrentTime() noexcept