Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Ведём лог файл... Добавлено: 05.01.09 12:14  

Автор вопроса:  werber | Web-сайт: www.werbersoft.ru

Ответить

  Ответы Всего ответов: 42  

Номер ответа: 16
Автор ответа:
 @lex



Вопросов: 14
Ответов: 262
 Профиль | | #16 Добавлено: 07.01.09 12:01
  1. Public Function WriteLog(StringLog As String)
  2. StringLog = Replace(StringLog, vbNewLine, " ")
  3. If Len(StringLog) < 1 Then WriteLog = 0: Exit Function
  4.  
  5. Dim MaxSize As Long
  6. MaxSize = 512
  7.  
  8. Dim MyFile As Integer
  9. MyFile = FreeFile
  10.  
  11. Dim Path As String
  12. If Right(App.Path, 1) = "\" Then
  13. Path = App.Path + "Log.txt"
  14. Else
  15. Path = App.Path + "\Log.txt"
  16. End If
  17.  
  18. Open Path For Append As #MyFile
  19.  
  20. Dim FileSize As Long
  21. FileSize = FileLen(Path)
  22. If FileSize > MaxSize * 1024 Then
  23. Close #MyFile
  24. Kill Path
  25. Open Path For Append As #MyFile
  26. End If
  27.  
  28. Print #MyFile, "[" + Str(Time) + "] " & StringLog
  29. Close #MyFile
  30.  
  31. If FileLen(Path) = FileSize + Len("[" + Str(Time) + "] " & StringLog) + 2 Then
  32. WriteLog = 1
  33. Else
  34. WriteLog = 0
  35. End If
  36.  
  37. If Err.Number <> 0 Then WriteLog = -(Err.Number)
  38. End Function

Ответить

Номер ответа: 17
Автор ответа:
 @lex



Вопросов: 14
Ответов: 262
 Профиль | | #17 Добавлено: 07.01.09 14:02
Или даже как-то так)
  1. Public Function WriteLog(StringLog As String, Optional AddTime As Boolean = True)
  2. On Error Resume Next
  3. StringLog = Replace(StringLog, vbNewLine, " ")
  4. If Len(StringLog) < 1 Then WriteLog = 0: Exit Function
  5.  
  6. Dim MaxSize As Long
  7. MaxSize = 512
  8.  
  9. Dim MyFile As Integer
  10. MyFile = FreeFile
  11.  
  12. Dim Path As String
  13. If Right(App.Path, 1) = "\" Then
  14. Path = App.Path + "Log.txt"
  15. Else
  16. Path = App.Path + "\Log.txt"
  17. End If
  18.  
  19. Open Path For Append As #MyFile
  20.  
  21. Dim FileSize As Long
  22. FileSize = FileLen(Path)
  23. If FileSize > MaxSize * 1024 Then
  24. Close #MyFile
  25. Kill Path
  26. Open Path For Append As #MyFile
  27. End If
  28.  
  29. If AddTime = True Then StringLog = "[" + Str(Time) + "] " & StringLog
  30.  
  31. Print #MyFile, StringLog
  32. Close #MyFile
  33.  
  34. If FileLen(Path) = FileSize + Len(StringLog) + 2 Then
  35. WriteLog = 1
  36. Else
  37. WriteLog = 0
  38. End If
  39.  
  40. If Err.Number <> 0 Then WriteLog = -(Err.Number)
  41. End Function

Ответить

Номер ответа: 18
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #18
Добавлено: 07.01.09 16:46
Лажа) Мож хватит уже писать эту тривиальную процедуру по 300 раз?) Давайте я уж окончательный вариант напишу =)
  1. #Const LOG_CHECK_MAX_SIZE = True               ' добавляем проверку максимального размера лог-файла. условная компиляция.
  2.  
  3. '--------------------------------------------------------------------------------
  4. ' Procedure  :       Log
  5. ' Description:       выводит отладочные данные в файл
  6. '                    ИСПОЛЬЗУЕТСЯ УСЛОВНАЯ КОМПИЛЯЦИЯ!
  7. '                    Помним о константе LOG_CHECK_MAX_SIZE
  8. '                    Имя файла и его максимальный размер задаются в
  9. '                    локальных константах
  10. ' Created by :       Executioner
  11. ' Machine    :       DOMKRATTPC
  12. ' Date-Time  :       12.07.2007-22:12:08
  13. '
  14. ' Parameters :       LogData
  15. '                    AddDateTime
  16. '--------------------------------------------------------------------------------
  17.  
  18. Public Sub Log(ByVal LogData As String, Optional AddDateTime As Boolean = True)
  19.     Const MAX_LOG_SIZE_IN_KB As Long = 100     ' максимальный размер файла лога
  20.     Const LOG_FILE As String = "Log.txt"       ' имя файла лога
  21.     
  22.     On Error GoTo Log_ErrHandler
  23.     If Len(LogData) < 1 Then Exit Sub
  24.     Dim fileNumber As Integer
  25.     fileNumber = FreeFile
  26.     ' мутим имя файла
  27.     Dim fileName As String
  28.     fileName = IIf((Right(App.Path, 1) = "\"), App.Path & LOG_FILE, App.Path & "\" & LOG_FILE)
  29.     #If LOG_CHECK_MAX_SIZE Then
  30.         ' проверка на достижение максимального размера файла лога
  31.         ' если максимальный размер достигнут - чистим файл
  32.         If (Len(Dir$(fileName)) > 0) Then
  33.             If (FileLen(fileName) > MAX_LOG_SIZE_IN_KB * 1024) And MAX_LOG_SIZE_IN_KB > 0 Then Kill fileName
  34.         End If
  35.     #End If
  36.     ' открываем файл лога
  37.     Open fileName For Append As #fileNumber
  38.     ' добавляем новые данные и закрываемся
  39.     Print #fileNumber, IIf(AddDateTime, "[" & CStr(Now) & "]" & vbTab & LogData, LogData)
  40.     Close #fileNumber
  41.     Exit Sub
  42.     
  43.     ' обработчик ошибок
  44. Log_ErrHandler:
  45.     If MsgBox(Err.Description & vbNewLine & " Do you want to continue execution?", vbCritical Or vbYesNo, "Error number " & Err.Number) = vbYes Then Resume Next
  46. End Sub

Ответить

Номер ответа: 19
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #19 Добавлено: 07.01.09 18:51
Давайте я уж окончательный вариант напишу

тоже лажа.. если уж юзаешь LOG_CHECK_MAX_SIZE, то надо не полносью убивать лог-файл(имхо это криво),а удалять верхние(старые) записи лога(до тех пор, пока лог превышает максимальный размер), как это делают нормальные софтины.

Ответить

Номер ответа: 20
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #20
Добавлено: 07.01.09 19:58
Слишком усложняет код. Хотя можно сделать

Ответить

Номер ответа: 21
Автор ответа:
 werber



Вопросов: 71
Ответов: 112
 Web-сайт: www.werbersoft.ru
 Профиль | | #21
Добавлено: 07.01.09 20:40
... и если чё, админы могут добавить "новоиспечённое" событие в коллекцию VBNet?

Ответить

Номер ответа: 22
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #22 Добавлено: 07.01.09 20:44
Слишком усложняет код

да я бы не сказал что слишком уж сложно... разбить на массив строк/записей и удалять по одной пока не добьешся нужно размера.. потом останется только перезаписать файл и все.

Ответить

Номер ответа: 23
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #23
Добавлено: 07.01.09 23:28
Вот именно - перезаписать весь файл. Каждый раз.

Ответить

Номер ответа: 24
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #24 Добавлено: 07.01.09 23:33
Вот именно - перезаписать весь файл. Каждый раз.

и что с того??? Чем это принципиально отличается от "дописывания в него"?
на то это и лог-файл...

Ответить

Номер ответа: 25
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #25 Добавлено: 07.01.09 23:53
а тебя не волнует тот факт, что лог удаляет ПОЛНОСТЬЮ после превышения некоторого лимита размера и ты потеряешь записи, скажем, за последние 3 дня??? Если на это пофигу, то я тогда вообще не понимаю смысла такого лога..

Ответить

Номер ответа: 26
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #26 Добавлено: 08.01.09 00:09
Парни судья с меня плохой, поэтому просто напомню вам, что все это весьма относительно и все стороны правы по своему.

Ответить

Номер ответа: 27
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #27
Добавлено: 08.01.09 00:39
Smith пишет:
все стороны правы по своему.

+1
А вообще, если у меня допустим максимальный размер файла 100 мб? тогда надо сожрать массивом 100 метров оперативы?) Короче, надо написать идеальную функу для ведения логов и в примеры кода ее =)я кажись даж знаю как это сделать с наименьшими потерями памяти и с наибольшей скоростью.

Ответить

Номер ответа: 28
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #28 Добавлено: 08.01.09 00:58
Ну тут как в бане два варианта )
Жертвуем скоростью либо памятью.

Ответить

Номер ответа: 29
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #29 Добавлено: 08.01.09 01:35
тогда надо сожрать массивом 100 метров оперативы?)

хыыы, покажи мне того идиота который будет читать 100 метров лога! :D ))) так и состариться не долго)))
а если на самом деле лог 100 метров то, разумеется, массив тут неуместен..

Ответить

Номер ответа: 30
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #30 Добавлено: 08.01.09 02:00
Удобно писать лог в базу, напр. access.
Удаление первых строк если надо, да и вообще, анализ в логе.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам