Главная страница

Новости

Вопрос-ответ

Скрипты

ActiveX

Статьи

Книжная полка

Knowledge Base

Конференции

Ссылки

 

Гостевая книга

Напишите мне письмо

 

Подписка на рассылку

Рассылка 'Windows Scripting'  Архив

 

 

Лучше смотреть с Microsoft Internet Explorer 4.0 и выше

 

Создано с помощью UltraEdit

 

Класс CLog - запись в журнал

Класс CLog преназначен для записи текста в файл журнала (log). Это может быть как отладочная информация, так и информация о ходе выполнения скрипта.

Основные особенности класса CLog:

  • Имя файла журнала генерируется автоматически: он создается в том же каталоге, где находится файл исполняемого скрипта, и имеет то же имя, но с расширением .log.
  • Имя файла журнала можно узнать или поменять.
  • Для удобства работы можно узнать каталог, в котором находится файл исполняемого скрипта, а также имя этого файла (без расширения).
  • Журнал можно вести как в формате ANSI (по умолчанию), так и формате Unicode.
  • При записи строчки в ее начало автоматически помещается текущее время (эта опция может быть отключена).
  • Специальная функция позволяет очистить (точнее, удалить) файл журнала.
  • Можно также считать весь журнал в строковую переменную.

Методы и свойства класса

Метод Описание
Write(Text) Записывает строку Text в файл журнала.
Возвращает True в случае успеха, иначе - False.
ReadAll Считывает файл журнала целиком.
В случае ошибки возвращается пустая строка.
Clear Удаляет файл журнала.
Возвращает True в случае успеха, иначе - False.

Свойство Описание
LogFullName Полное имя файла журнала.
Read/Write.
ScriptPath Каталог, в котором находится файл исполняемого скрипта.
Read only.
ScriptName Имя файла исполняемого скрипта (без расширения).
Read only.
Format Формат записи журнала: ANSI (0), Unicode (-1), по умолчанию (-2).
По умолчанию - ANSI.
Read/Write.
IncludeTime Определяет, помещать ли в начало строки текущее время.
По умолчанию - True.
Read/Write.
FSO Возвращает объект типа FileSystemObject, используемый классом CLog.
Read only.

Пример 1: clog1.wsf

Самый простой пример: создаем объект Log типа CLog; удаляем файл журнала, если он был (метод Clear); пишем в журнал строку (метод Write).
<job id="CLog1">

<script language="VBScript" src="clog.vbs"/>

<script language="VBScript">
	Option Explicit

	Dim Log
	Set Log = New CLog
	
	Log.Clear
	
	Log.Write "Первая запись в журнал"
	
	Set Log = Nothing	
</script>

</job>
	

Пример 2: clog2.wsf

В этом примере мы поменяем путь к файлу журнала - он будет сохраняться в TEMP-каталоге.

Обратите внимание на отсутствие метода Clear - в этом случае файл журнала не будет удаляться при каждом запуске скрипта.

И еще - путь к TEMP-каталогу получается через объект FileSystemObject (свойство FSO), который используется классом CLog.

<job id="CLog2">

<script language="VBScript" src="clog.vbs"/>

<script language="VBScript">
	Option Explicit

	Dim Log
	Set Log = New CLog
	
	Log.LogFullName = _
		Log.FSO.GetSpecialFolder(2).Path & "\" & _
		Log.ScriptName & ".log"
	
	Log.Write "Запись в журнал"
	
	Set Log = Nothing	
</script>

</job>
	

Пример 3: clog3.wsf

Еще один простой пример - мы отменим запись текущего времени в начало строки и будем использовать формат Unicode.
<job id="CLog3">

<script language="VBScript" src="clog.vbs"/>

<script language="VBScript">
	Option Explicit

	Dim Log
	Set Log = New CLog
	
	Log.IncludeTime = False
	Log.Format = -1
	
	Log.Write "Запись в журнал"
	
	Set Log = Nothing	
</script>

</job>
	

Пример 4: clog4.wsf

И последний пример - после записи двух строк в журнал мы прочитаем его и выведем в диалоговом окне.
<job id="CLog4">

<script language="VBScript" src="clog.vbs"/>

<script language="VBScript">
	Option Explicit

	Dim Log
	Set Log = New CLog
	
	Log.Write "Запись в журнал"
	Log.Write "Еще одна запись в журнал"
	
	MsgBox Log.ReadAll
	
	Set Log = Nothing	
</script>

</job>
	

А вот наконец собственно листинг класса CLog:

Листинг: clog.vbs

Option Explicit

Class CLog
	
	Private m_FSO
	Private m_LogFullName
	Private m_ScriptName
	Private m_ScriptPath
	Private m_Format
	Private m_IncludeTime

	Private Sub Class_Initialize
		Set m_FSO = CreateObject("Scripting.FileSystemObject")
		
		m_ScriptName = WScript.ScriptName
		Dim I
		I = InStrRev(m_ScriptName, ".")
		If I > 0 Then m_ScriptName = Left(m_ScriptName, I - 1)

		m_ScriptPath = WScript.ScriptFullName
		I = InStrRev(m_ScriptPath, "\")
		If I > 0 Then m_ScriptPath = Left(m_ScriptPath, I)

		m_LogFullName = m_ScriptPath & m_ScriptName & ".log"
		
		m_Format = 0 ' ANSI
		m_IncludeTime = True
	End Sub

	Private Sub Class_Terminate
		Set m_FSO = Nothing
	End Sub

	Property Get FSO
		Set FSO = m_FSO
	End Property

	Property Let LogFullName(NewName)
		m_LogFullName = NewName
	End Property

	Property Get LogFullName
		LogFullName = m_LogFullName
	End Property

	Property Get ScriptPath
		ScriptPath = m_ScriptPath
	End Property
	
	Property Get ScriptName
		ScriptName = m_ScriptName
	End Property

	Property Let Format(NewFormat)
		m_Format = NewFormat
	End Property

	Property Get Format
		Format = m_Format
	End Property

	Property Let IncludeTime(NewValue)
		m_IncludeTime = NewValue
	End Property

	Property Get IncludeTime
		IncludeTime = m_IncludeTime
	End Property

	Function Write(Text)
		On Error Resume Next	' for example if access is denied
		Dim File
		Set File = _
			m_FSO.OpenTextFile(m_LogFullName, 8, True, m_Format)
		Write = Err = 0
		If Write Then
			If m_IncludeTime Then Text = Now & " " & Text
			File.Write Text & vbNewLine
			File.Close
		End If
		Set File = Nothing
		On Error GoTo 0
	End Function

	Function ReadAll
		On Error Resume Next	' if file does not exist
		Dim File
		Set File = _
			m_FSO.OpenTextFile(m_LogFullName, 1, False, m_Format)
		If Err = 0 Then
			ReadAll = File.ReadAll
			File.Close
		Else
			ReadAll = ""
		End If
		Set File = Nothing
		On Error GoTo 0
	End Function

	Function Clear
		On Error Resume Next	' if file does not exist
		m_FSO.DeleteFile m_LogFullName, True
		Clear = Err = 0
		On Error GoTo 0
	End Function

End Class