📄 foutputdevicefile.h
字号:
/*=============================================================================
FOutputDeviceFile.h: ANSI file output device.
Copyright 1997-1999 Epic Games, Inc. All Rights Reserved.
Revision history:
* Created by Tim Sweeney
=============================================================================*/
//
// ANSI file output device.
//
class FOutputDeviceFile : public FOutputDevice
{
public:
FOutputDeviceFile()
: LogAr( NULL )
, Opened( 0 )
, Dead( 0 )
{
Filename[0]=0;
}
~FOutputDeviceFile()
{
if( LogAr )
{
Logf( NAME_Log, TEXT("Log file closed, %s"), appTimestamp() );
delete LogAr;
LogAr = NULL;
}
}
void Serialize( const TCHAR* Data, enum EName Event )
{
static UBOOL Entry=0;
if( !GIsCriticalError || Entry )
{
if( !FName::SafeSuppressed(Event) )
{
if( !LogAr && !Dead )
{
// Make log filename.
if( !Filename[0] )
{
appStrcpy( Filename, appBaseDir() );
if( !Parse(appCmdLine(), TEXT("LOG="), Filename+appStrlen(Filename), ARRAY_COUNT(Filename)-appStrlen(Filename) ) )
{
appStrcat( Filename, appPackage() );
appStrcat( Filename, TEXT(".log") );
}
}
// Open log file.
LogAr = GFileManager->CreateFileWriter( Filename, 1, 0, 1, Opened );
if( LogAr )
{
Opened = 1;
#if UNICODE && !FORCE_ANSI_LOG
_WORD UnicodeBOM = UNICODE_BOM;
LogAr->Serialize( &UnicodeBOM, 2 );
#endif
Logf( NAME_Log, TEXT("Log file open, %s"), appTimestamp() );
}
else Dead = 1;
}
if( LogAr && Event!=NAME_Title )
{
#if FORCE_ANSI_LOG && UNICODE
TCHAR Ch[1024];
appSprintf( Ch, TEXT("%s: %s%s"), FName::SafeString(Event), Data, LINE_TERMINATOR );
LogAr->Serialize( const_cast<ANSICHAR*>(appToAnsi(Ch)), appStrlen(Ch) );
#else
WriteRaw( FName::SafeString(Event) );
WriteRaw( TEXT(": ") );
WriteRaw( Data );
WriteRaw( LINE_TERMINATOR );
#endif
}
if( GLogHook )
GLogHook->Serialize( Data, Event );
}
}
else
{
Entry=1;
try
{
// Ignore errors to prevent infinite-recursive exception reporting.
Serialize( Data, Event );
}
catch( ... )
{}
Entry=0;
}
}
FArchive* LogAr;
TCHAR Filename[1024];
private:
UBOOL Opened, Dead;
void WriteRaw( const TCHAR* C )
{
LogAr->Serialize( const_cast<TCHAR*>(C), appStrlen(C)*sizeof(TCHAR) );
}
};
/*-----------------------------------------------------------------------------
The End.
-----------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -