OpenShot Library | libopenshot-audio  0.2.0
juce_FileLogger.cpp
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2017 - ROLI Ltd.
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 
23 namespace 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 //==============================================================================
49 void 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 
57 void 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 
111 FileLogger* 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 
121 FileLogger* FileLogger::createDateStampedLogger (const String& logFileSubDirectoryName,
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
juce::OutputStream::writeFromInputStream
virtual int64 writeFromInputStream(InputStream &source, int64 maxNumBytesToWrite)
Reads data from an input stream and writes it to this stream.
Definition: juce_OutputStream.cpp:285
juce::Time::toString
String toString(bool includeDate, bool includeTime, bool includeSeconds=true, bool use24HourClock=false) const
Returns a string version of this date and time, using this machine's local timezone.
Definition: juce_Time.cpp:289
juce::FileInputStream::setPosition
bool setPosition(int64) override
Tries to move the current read position of the stream.
Definition: juce_FileInputStream.cpp:68
juce::TemporaryFile
Manages a temporary file, which will be deleted when this object is deleted.
Definition: juce_TemporaryFile.h:68
juce::File::getSpecialLocation
static File JUCE_CALLTYPE getSpecialLocation(const SpecialLocationType type)
Finds the location of a special type of file or directory, such as a home folder or documents folder.
juce::Time::getCurrentTime
static Time JUCE_CALLTYPE getCurrentTime() noexcept
Returns a Time object that is set to the current system time.
Definition: juce_Time.cpp:218
juce::File::create
Result create() const
Creates an empty file if it doesn't already exist.
Definition: juce_File.cpp:472
juce::FileLogger::getSystemLogFileFolder
static File getSystemLogFileFolder()
Returns an OS-specific folder where log-files should be stored.
Definition: juce_FileLogger.cpp:102
juce::InputStream::readByte
virtual char readByte()
Reads a byte from the stream.
Definition: juce_InputStream.cpp:36
juce::FileInputStream::openedOk
bool openedOk() const noexcept
Returns true if the stream opened without problems.
Definition: juce_FileInputStream.h:71
juce::FileLogger::createDefaultAppLogger
static FileLogger * createDefaultAppLogger(const String &logFileSubDirectoryName, const String &logFileName, const String &welcomeMessage, const int64 maxInitialFileSizeBytes=128 *1024)
Helper function to create a log file in the correct place for this platform.
Definition: juce_FileLogger.cpp:111
juce::FileOutputStream::openedOk
bool openedOk() const noexcept
Returns true if the stream opened without problems.
Definition: juce_FileOutputStream.h:95
juce::File
Represents a local file or directory.
Definition: juce_File.h:44
juce::File::deleteFile
bool deleteFile() const
Deletes a file.
juce::FileLogger::~FileLogger
~FileLogger() override
Destructor.
Definition: juce_FileLogger.cpp:46
juce::File::exists
bool exists() const
Checks whether the file actually exists.
juce::FileInputStream
An input stream that reads from a local file.
Definition: juce_FileInputStream.h:38
juce::FileLogger::createDateStampedLogger
static FileLogger * createDateStampedLogger(const String &logFileSubDirectoryName, const String &logFileNameRoot, const String &logFileNameSuffix, const String &welcomeMessage)
Helper function to create a log file in the correct place for this platform.
Definition: juce_FileLogger.cpp:121
juce::GenericScopedLock
Automatically locks and unlocks a mutex object.
Definition: juce_ScopedLock.h:58
juce::FileLogger::trimFileSize
static void trimFileSize(const File &file, int64 maxFileSize)
This is a utility function which removes lines from the start of a text file to make sure that its to...
Definition: juce_FileLogger.cpp:57
juce::File::userApplicationDataDirectory
@ userApplicationDataDirectory
The folder in which applications store their persistent user-specific settings.
Definition: juce_File.h:862
juce::FileLogger::logMessage
void logMessage(const String &) override
This is overloaded by subclasses to implement custom logging behaviour.
Definition: juce_FileLogger.cpp:49
juce::FileLogger
A simple implementation of a Logger that writes to a file.
Definition: juce_FileLogger.h:38
juce::String
The JUCE String class!
Definition: juce_String.h:42
juce::TemporaryFile::overwriteTargetFileWithTemporary
bool overwriteTargetFileWithTemporary() const
Tries to move the temporary file to overwrite the target file that was specified in the constructor.
Definition: juce_TemporaryFile.cpp:76
juce::TemporaryFile::getFile
const File & getFile() const noexcept
Returns the temporary file.
Definition: juce_TemporaryFile.h:130
juce::FileLogger::FileLogger
FileLogger(const File &fileToWriteTo, const String &welcomeMessage, const int64 maxInitialFileSizeBytes=128 *1024)
Creates a FileLogger for a given file.
Definition: juce_FileLogger.cpp:26
juce::FileOutputStream
An output stream that writes into a local file.
Definition: juce_FileOutputStream.h:38
juce::File::getSize
int64 getSize() const
Returns the size of the file in bytes.