EventLog.WriteEvent Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menulis entri peristiwa yang dilokalkan ke log peristiwa.
Overload
WriteEvent(String, EventInstance, Object[]) |
Menulis entri log peristiwa dengan data peristiwa dan string penggantian pesan yang diberikan, menggunakan sumber peristiwa terdaftar yang ditentukan. |
WriteEvent(EventInstance, Object[]) |
Menulis entri yang dilokalkan ke log peristiwa. |
WriteEvent(EventInstance, Byte[], Object[]) |
Menulis entri log peristiwa dengan data peristiwa yang diberikan, string penggantian pesan, dan data biner terkait. |
WriteEvent(String, EventInstance, Byte[], Object[]) |
Menulis entri log peristiwa dengan data peristiwa yang diberikan, string penggantian pesan, dan data biner terkait, dan menggunakan sumber peristiwa terdaftar yang ditentukan. |
WriteEvent(String, EventInstance, Object[])
- Sumber:
- EventLog.cs
- Sumber:
- EventLog.cs
- Sumber:
- EventLog.cs
Menulis entri log peristiwa dengan data peristiwa dan string penggantian pesan yang diberikan, menggunakan sumber peristiwa terdaftar yang ditentukan.
public:
static void WriteEvent(System::String ^ source, System::Diagnostics::EventInstance ^ instance, ... cli::array <System::Object ^> ^ values);
public static void WriteEvent (string source, System.Diagnostics.EventInstance instance, params object[] values);
static member WriteEvent : string * System.Diagnostics.EventInstance * obj[] -> unit
Public Shared Sub WriteEvent (source As String, instance As EventInstance, ParamArray values As Object())
Parameter
- source
- String
Nama sumber peristiwa yang terdaftar untuk aplikasi pada komputer yang ditentukan.
- instance
- EventInstance
Instans EventInstance yang mewakili entri log peristiwa yang dilokalkan.
- values
- Object[]
Array string untuk digabungkan ke dalam teks pesan entri log peristiwa.
Pengecualian
Nilainya source
adalah string kosong ("").
-atau-
Nilai source
adalah null
.
-atau-
instance.InstanceId
kurang dari nol atau lebih besar dari UInt16.MaxValue.
-atau-
values
memiliki lebih dari 256 elemen.
-atau-
Salah values
satu elemen lebih panjang dari 32766 byte.
-atau-
Nama sumber menghasilkan jalur kunci registri yang lebih panjang dari 254 karakter.
instance
adalah null
.
Kunci registri untuk log kejadian tidak dapat dibuka.
Sistem operasi melaporkan kesalahan saat menulis entri peristiwa ke log peristiwa. Kode galat Windows tidak tersedia.
Contoh
Contoh berikut menulis entri peristiwa informasi dan entri peristiwa peringatan ke log peristiwa yang ada. Teks pesan peristiwa ditentukan menggunakan pengidentifikasi sumber daya dalam file sumber daya. Contoh mengasumsikan file sumber daya yang sesuai telah didaftarkan untuk sumbernya.
String^ sourceName = "SampleApplicationSource";
if ( EventLog::SourceExists( sourceName ) )
{
// Define an informational event and a warning event.
// The message identifiers correspond to the message text in the
// message resource file defined for the source.
EventInstance ^ myInfoEvent = gcnew EventInstance( InformationMsgId,0,EventLogEntryType::Information );
EventInstance ^ myWarningEvent = gcnew EventInstance( WarningMsgId,0,EventLogEntryType::Warning );
// Insert the method name into the event log message.
array<String^>^insertStrings = {"EventLogSamples.WriteEventSample2"};
// Write the events to the event log.
EventLog::WriteEvent( sourceName, myInfoEvent, 0 );
// Append binary data to the warning event entry.
array<Byte>^binaryData = {7,8,9,10};
EventLog::WriteEvent( sourceName, myWarningEvent, binaryData, insertStrings );
}
else
{
Console::WriteLine( "Warning - event source {0} not registered", sourceName );
}
string sourceName = "SampleApplicationSource";
if(EventLog.SourceExists(sourceName))
{
// Define an informational event and a warning event.
// The message identifiers correspond to the message text in the
// message resource file defined for the source.
EventInstance myInfoEvent = new EventInstance(InformationMsgId, 0, EventLogEntryType.Information);
EventInstance myWarningEvent = new EventInstance(WarningMsgId, 0, EventLogEntryType.Warning);
// Insert the method name into the event log message.
string [] insertStrings = {"EventLogSamples.WriteEventSample2"};
// Write the events to the event log.
EventLog.WriteEvent(sourceName, myInfoEvent);
// Append binary data to the warning event entry.
byte [] binaryData = { 7, 8, 9, 10 };
EventLog.WriteEvent(sourceName, myWarningEvent, binaryData, insertStrings);
}
else
{
Console.WriteLine("Warning - event source {0} not registered",
sourceName);
}
Dim sourceName As String = "SampleApplicationSource"
If EventLog.SourceExists(sourceName)
' Define an informational event and a warning event.
' The message identifiers correspond to the message text in the
' message resource file defined for the source.
Dim myInfoEvent As EventInstance = new EventInstance(InformationMsgId, 0, EventLogEntryType.Information)
Dim myWarningEvent As EventInstance = new EventInstance(WarningMsgId, 0, EventLogEntryType.Warning)
' Insert the method name into the event log message.
Dim insertStrings() As String = {"EventLogSamples.WriteEventSample2"}
' Write the events to the event log.
EventLog.WriteEvent(sourceName, myInfoEvent, insertStrings)
' Append binary data to the warning event entry.
Dim binaryData() As Byte = { 7, 8, 9, 10 }
EventLog.WriteEvent(sourceName, myWarningEvent, binaryData, insertStrings)
Else
Console.WriteLine("Warning - event source {0} not registered", _
sourceName)
End If
Contohnya menggunakan file teks pesan berikut, yang disertakan dalam pustaka sumber daya EventLogMsgs.dll. File teks pesan adalah sumber dari mana file sumber daya pesan dibuat. File teks pesan menentukan pengidentifikasi sumber daya dan teks untuk kategori, pesan peristiwa, dan string penyisipan parameter.
; // EventLogMsgs.mc
; // ********************************************************
; // Use the following commands to build this file:
; // mc -s EventLogMsgs.mc
; // rc EventLogMsgs.rc
; // link /DLL /SUBSYSTEM:WINDOWS /NOENTRY /MACHINE:x86 EventLogMsgs.Res
; // ********************************************************
; // - Event categories -
; // Categories must be numbered consecutively starting at 1.
; // ********************************************************
MessageId=0x1
Severity=Success
SymbolicName=INSTALL_CATEGORY
Language=English
Installation
.
MessageId=0x2
Severity=Success
SymbolicName=QUERY_CATEGORY
Language=English
Database Query
.
MessageId=0x3
Severity=Success
SymbolicName=REFRESH_CATEGORY
Language=English
Data Refresh
.
; // - Event messages -
; // *********************************
MessageId = 1000
Severity = Success
Facility = Application
SymbolicName = AUDIT_SUCCESS_MESSAGE_ID_1000
Language=English
My application message text, in English, for message id 1000, called from %1.
.
MessageId = 1001
Severity = Warning
Facility = Application
SymbolicName = AUDIT_FAILED_MESSAGE_ID_1001
Language=English
My application message text, in English, for message id 1001, called from %1.
.
MessageId = 1002
Severity = Success
Facility = Application
SymbolicName = GENERIC_INFO_MESSAGE_ID_1002
Language=English
My generic information message in English, for message id 1002.
.
MessageId = 1003
Severity = Warning
Facility = Application
SymbolicName = GENERIC_WARNING_MESSAGE_ID_1003
Language=English
My generic warning message in English, for message id 1003, called from %1.
.
MessageId = 1004
Severity = Success
Facility = Application
SymbolicName = UPDATE_CYCLE_COMPLETE_MESSAGE_ID_1004
Language=English
The update cycle is complete for %%5002.
.
MessageId = 1005
Severity = Warning
Facility = Application
SymbolicName = SERVER_CONNECTION_DOWN_MESSAGE_ID_1005
Language=English
The refresh operation did not complete because the connection to server %1 could not be established.
.
; // - Event log display name -
; // ********************************************************
MessageId = 5001
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_DISPLAY_NAME_MSGID
Language=English
Sample Event Log
.
; // - Event message parameters -
; // Language independent insertion strings
; // ********************************************************
MessageId = 5002
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_SERVICE_NAME_MSGID
Language=English
SVC_UPDATE.EXE
.
Keterangan
Gunakan metode ini untuk menulis entri yang dilokalkan ke log peristiwa, menggunakan sumber yang sudah terdaftar sebagai sumber kejadian untuk log yang sesuai. Anda menentukan properti peristiwa dengan pengidentifikasi sumber daya daripada nilai string. Pemantau Peristiwa menggunakan pengidentifikasi sumber daya untuk menampilkan string yang sesuai dari file sumber daya yang dilokalkan untuk sumbernya. Anda harus mendaftarkan sumber dengan file sumber daya yang sesuai sebelum menulis peristiwa menggunakan pengidentifikasi sumber daya.
Instans input instance
menentukan pesan peristiwa dan properti. Atur InstanceId input instance
untuk pesan yang ditentukan dalam file sumber daya pesan sumber. Anda dapat secara opsional mengatur CategoryId dan EntryType input instance
untuk menentukan kategori dan jenis peristiwa entri peristiwa Anda. Anda juga dapat menentukan array string independen bahasa untuk disisipkan ke dalam teks pesan yang dilokalkan. Atur values
ke null
jika pesan peristiwa tidak berisi tempat penampung pemformatan untuk string pengganti.
Sumber yang ditentukan harus didaftarkan untuk log peristiwa sebelum menggunakan WriteEvent. Sumber yang ditentukan harus dikonfigurasi untuk menulis entri yang dilokalkan ke log; sumber harus minimal memiliki file sumber daya pesan yang ditentukan.
Anda harus membuat dan mengonfigurasi sumber kejadian sebelum menulis entri pertama dengan sumbernya. Create sumber kejadian baru selama penginstalan aplikasi Anda. Ini memungkinkan waktu bagi sistem operasi untuk me-refresh daftar sumber peristiwa terdaftar dan konfigurasinya. Jika sistem operasi belum merefresh daftar sumber peristiwanya, dan Anda mencoba menulis peristiwa dengan sumber baru, operasi tulis akan gagal. Anda dapat mengonfigurasi sumber baru menggunakan EventLogInstaller, atau menggunakan CreateEventSource metode . Anda harus memiliki hak administratif pada komputer untuk membuat sumber kejadian baru.
Sumber harus dikonfigurasi baik untuk menulis entri yang dilokalkan atau untuk menulis string langsung. WriteEntry Gunakan metode jika aplikasi Anda menulis nilai string langsung ke log peristiwa.
Jika aplikasi Anda menulis entri menggunakan pengidentifikasi sumber daya dan nilai string, Anda harus mendaftarkan dua sumber terpisah. Misalnya, konfigurasikan satu sumber dengan file sumber daya, lalu gunakan sumber tersebut WriteEvent dalam metode untuk menulis entri menggunakan pengidentifikasi sumber daya ke log peristiwa. Kemudian buat sumber yang berbeda tanpa file sumber daya, dan gunakan sumber tersebut WriteEntry dalam metode untuk menulis string langsung ke log peristiwa menggunakan sumber tersebut.
Lihat juga
Berlaku untuk
WriteEvent(EventInstance, Object[])
- Sumber:
- EventLog.cs
- Sumber:
- EventLog.cs
- Sumber:
- EventLog.cs
Menulis entri yang dilokalkan ke log peristiwa.
public:
void WriteEvent(System::Diagnostics::EventInstance ^ instance, ... cli::array <System::Object ^> ^ values);
public void WriteEvent (System.Diagnostics.EventInstance instance, params object[] values);
[System.Runtime.InteropServices.ComVisible(false)]
public void WriteEvent (System.Diagnostics.EventInstance instance, params object[] values);
member this.WriteEvent : System.Diagnostics.EventInstance * obj[] -> unit
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.WriteEvent : System.Diagnostics.EventInstance * obj[] -> unit
Public Sub WriteEvent (instance As EventInstance, ParamArray values As Object())
Parameter
- instance
- EventInstance
Instans EventInstance yang mewakili entri log peristiwa yang dilokalkan.
- values
- Object[]
Array string untuk digabungkan ke dalam teks pesan entri log peristiwa.
- Atribut
Pengecualian
Properti Source dari EventLog belum ditetapkan.
-atau-
Metode mencoba mendaftarkan sumber kejadian baru, tetapi nama komputer di MachineName tidak valid.
-atau-
Sumber sudah terdaftar untuk log peristiwa yang berbeda.
-atau-
instance.InstanceId
kurang dari nol atau lebih besar dari UInt16.MaxValue.
-atau-
values
memiliki lebih dari 256 elemen.
-atau-
Salah values
satu elemen lebih panjang dari 32766 byte.
-atau-
Nama sumber menghasilkan jalur kunci registri yang lebih panjang dari 254 karakter.
instance
adalah null
.
Kunci registri untuk log kejadian tidak dapat dibuka.
Sistem operasi melaporkan kesalahan saat menulis entri peristiwa ke log peristiwa. Kode galat Windows tidak tersedia.
Contoh
Contoh berikut menulis dua entri audit ke log myNewLog
peristiwa . Contoh membuat sumber peristiwa baru dan log peristiwa baru jika tidak ada di komputer lokal. Teks pesan peristiwa ditentukan menggunakan pengidentifikasi sumber daya dalam file sumber daya.
// Create the event source if it does not exist.
String^ sourceName = "SampleApplicationSource";
if ( !EventLog::SourceExists( sourceName ) )
{
// Call a local method to register the event log source
// for the event log "myNewLog." Use the resource file
// EventLogMsgs.dll in the current directory for message text.
String^ messageFile = String::Format( "{0}\\{1}", System::Environment::CurrentDirectory, "EventLogMsgs.dll" );
CreateEventSourceSample1( messageFile );
}
// Get the event log corresponding to the existing source.
String^ myLogName = EventLog::LogNameFromSourceName( sourceName, "." );
EventLog^ myEventLog = gcnew EventLog( myLogName,".",sourceName );
// Define two audit events.
// The message identifiers correspond to the message text in the
// message resource file defined for the source.
EventInstance ^ myAuditSuccessEvent = gcnew EventInstance( AuditSuccessMsgId,0,EventLogEntryType::SuccessAudit );
EventInstance ^ myAuditFailEvent = gcnew EventInstance( AuditFailedMsgId,0,EventLogEntryType::FailureAudit );
// Insert the method name into the event log message.
array<String^>^insertStrings = {"EventLogSamples.WriteEventSample1"};
// Write the events to the event log.
myEventLog->WriteEvent( myAuditSuccessEvent, insertStrings );
// Append binary data to the audit failure event entry.
array<Byte>^binaryData = {3,4,5,6};
myEventLog->WriteEvent( myAuditFailEvent, binaryData, insertStrings );
// Create the event source if it does not exist.
string sourceName = "SampleApplicationSource";
if(!EventLog.SourceExists(sourceName))
{
// Call a local method to register the event log source
// for the event log "myNewLog." Use the resource file
// EventLogMsgs.dll in the current directory for message text.
string messageFile = String.Format("{0}\\{1}",
System.Environment.CurrentDirectory,
"EventLogMsgs.dll");
CreateEventSourceSample1(messageFile);
}
// Get the event log corresponding to the existing source.
string myLogName = EventLog.LogNameFromSourceName(sourceName,".");
EventLog myEventLog = new EventLog(myLogName, ".", sourceName);
// Define two audit events.
// The message identifiers correspond to the message text in the
// message resource file defined for the source.
EventInstance myAuditSuccessEvent = new EventInstance(AuditSuccessMsgId, 0, EventLogEntryType.SuccessAudit);
EventInstance myAuditFailEvent = new EventInstance(AuditFailedMsgId, 0, EventLogEntryType.FailureAudit);
// Insert the method name into the event log message.
string [] insertStrings = {"EventLogSamples.WriteEventSample1"};
// Write the events to the event log.
myEventLog.WriteEvent(myAuditSuccessEvent, insertStrings);
// Append binary data to the audit failure event entry.
byte [] binaryData = { 3, 4, 5, 6 };
myEventLog.WriteEvent(myAuditFailEvent, binaryData, insertStrings);
Dim sourceName As String = "SampleApplicationSource"
' Create the event source if it does not exist.
If Not EventLog.SourceExists(sourceName)
' Call a local method to register the event log source
' for the event log "myNewLog." Use the resource file
' EventLogMsgs.dll in the current directory for message text.
Dim messageFile As String = String.Format("{0}\\{1}", _
System.Environment.CurrentDirectory, _
"EventLogMsgs.dll")
CreateEventSourceSample1(messageFile)
End If
' Get the event log corresponding to the existing source.
Dim myLogName As String = EventLog.LogNameFromSourceName(sourceName,".")
Dim myEventLog As EventLog = new EventLog(myLogName, ".", sourceName)
' Define two audit events.
Dim myAuditSuccessEvent As EventInstance = new EventInstance(AuditSuccessMsgId, 0, EventLogEntryType.SuccessAudit)
Dim myAuditFailEvent As EventInstance = new EventInstance(AuditFailedMsgId, 0, EventLogEntryType.FailureAudit)
' Insert the method name into the event log message.
Dim insertStrings() As String = {"EventLogSamples.WriteEventSample1"}
' Write the events to the event log.
myEventLog.WriteEvent(myAuditSuccessEvent, insertStrings)
' Append binary data to the audit failure event entry.
Dim binaryData() As Byte = { 7, 8, 9, 10 }
myEventLog.WriteEvent(myAuditFailEvent, binaryData, insertStrings)
Contohnya menggunakan file teks pesan berikut, yang disertakan dalam pustaka sumber daya EventLogMsgs.dll. File teks pesan adalah sumber dari mana file sumber daya pesan dibuat. File teks pesan menentukan pengidentifikasi sumber daya dan teks untuk kategori, pesan peristiwa, dan string penyisipan parameter.
; // EventLogMsgs.mc
; // ********************************************************
; // Use the following commands to build this file:
; // mc -s EventLogMsgs.mc
; // rc EventLogMsgs.rc
; // link /DLL /SUBSYSTEM:WINDOWS /NOENTRY /MACHINE:x86 EventLogMsgs.Res
; // ********************************************************
; // - Event categories -
; // Categories must be numbered consecutively starting at 1.
; // ********************************************************
MessageId=0x1
Severity=Success
SymbolicName=INSTALL_CATEGORY
Language=English
Installation
.
MessageId=0x2
Severity=Success
SymbolicName=QUERY_CATEGORY
Language=English
Database Query
.
MessageId=0x3
Severity=Success
SymbolicName=REFRESH_CATEGORY
Language=English
Data Refresh
.
; // - Event messages -
; // *********************************
MessageId = 1000
Severity = Success
Facility = Application
SymbolicName = AUDIT_SUCCESS_MESSAGE_ID_1000
Language=English
My application message text, in English, for message id 1000, called from %1.
.
MessageId = 1001
Severity = Warning
Facility = Application
SymbolicName = AUDIT_FAILED_MESSAGE_ID_1001
Language=English
My application message text, in English, for message id 1001, called from %1.
.
MessageId = 1002
Severity = Success
Facility = Application
SymbolicName = GENERIC_INFO_MESSAGE_ID_1002
Language=English
My generic information message in English, for message id 1002.
.
MessageId = 1003
Severity = Warning
Facility = Application
SymbolicName = GENERIC_WARNING_MESSAGE_ID_1003
Language=English
My generic warning message in English, for message id 1003, called from %1.
.
MessageId = 1004
Severity = Success
Facility = Application
SymbolicName = UPDATE_CYCLE_COMPLETE_MESSAGE_ID_1004
Language=English
The update cycle is complete for %%5002.
.
MessageId = 1005
Severity = Warning
Facility = Application
SymbolicName = SERVER_CONNECTION_DOWN_MESSAGE_ID_1005
Language=English
The refresh operation did not complete because the connection to server %1 could not be established.
.
; // - Event log display name -
; // ********************************************************
MessageId = 5001
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_DISPLAY_NAME_MSGID
Language=English
Sample Event Log
.
; // - Event message parameters -
; // Language independent insertion strings
; // ********************************************************
MessageId = 5002
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_SERVICE_NAME_MSGID
Language=English
SVC_UPDATE.EXE
.
Keterangan
Gunakan metode ini untuk menulis entri yang dilokalkan ke log peristiwa. Anda menentukan properti peristiwa dengan pengidentifikasi sumber daya daripada nilai string. Pemantau Peristiwa menggunakan pengidentifikasi sumber daya untuk menampilkan string yang sesuai dari file sumber daya yang dilokalkan untuk Source. Anda harus mendaftarkan sumber dengan file sumber daya yang sesuai sebelum menulis peristiwa menggunakan pengidentifikasi sumber daya.
Instans input instance
menentukan pesan peristiwa dan properti. Atur InstanceId input instance
untuk pesan yang ditentukan dalam file sumber daya pesan sumber. Anda dapat secara opsional mengatur CategoryId dan EntryType input instance
untuk menentukan kategori dan jenis peristiwa entri peristiwa Anda. Anda juga dapat menentukan array string independen bahasa untuk disisipkan ke dalam teks pesan yang dilokalkan. Atur values
ke null
jika pesan peristiwa tidak berisi tempat penampung pemformatan untuk string pengganti.
Anda harus mengatur Source properti pada komponen Anda EventLog sebelum menggunakan WriteEvent. Sumber yang ditentukan harus dikonfigurasi untuk menulis entri yang dilokalkan ke log; sumber harus minimal memiliki file sumber daya pesan yang ditentukan.
Anda harus membuat dan mengonfigurasi sumber kejadian sebelum menulis entri pertama dengan sumbernya. Create sumber kejadian baru selama penginstalan aplikasi Anda. Ini memungkinkan waktu bagi sistem operasi untuk me-refresh daftar sumber peristiwa terdaftar dan konfigurasinya. Jika sistem operasi belum merefresh daftar sumber peristiwanya, dan Anda mencoba menulis peristiwa dengan sumber baru, operasi tulis akan gagal. Anda dapat mengonfigurasi sumber baru menggunakan EventLogInstaller, atau menggunakan CreateEventSource metode . Anda harus memiliki hak administratif pada komputer untuk membuat sumber kejadian baru.
Sumber harus dikonfigurasi baik untuk menulis entri yang dilokalkan atau untuk menulis string langsung. WriteEntry Gunakan metode jika aplikasi Anda menulis nilai string langsung ke log peristiwa.
Jika aplikasi Anda menulis entri menggunakan pengidentifikasi sumber daya dan nilai string, Anda harus mendaftarkan dua sumber terpisah. Misalnya, konfigurasikan satu sumber dengan file sumber daya, lalu gunakan sumber tersebut WriteEvent dalam metode untuk menulis entri menggunakan pengidentifikasi sumber daya ke log peristiwa. Kemudian buat sumber yang berbeda tanpa file sumber daya, dan gunakan sumber tersebut WriteEntry dalam metode untuk menulis string langsung ke log peristiwa menggunakan sumber tersebut.
Catatan
Jika Anda menulis entri ke komputer jarak jauh, nilai message
string mungkin bukan yang Anda harapkan jika komputer jarak jauh tidak menjalankan .NET Framework. Selain itu message
, string tidak boleh berisi %n, di mana n adalah nilai bilangan bulat (misalnya, %1), karena penampil peristiwa memperlakukannya sebagai string penyisipan. Karena alamat Protokol Internet versi 6 (IPv6) dapat berisi urutan karakter ini, Anda tidak dapat mencatat pesan peristiwa yang berisi alamat IPv6.
Lihat juga
Berlaku untuk
WriteEvent(EventInstance, Byte[], Object[])
- Sumber:
- EventLog.cs
- Sumber:
- EventLog.cs
- Sumber:
- EventLog.cs
Menulis entri log peristiwa dengan data peristiwa yang diberikan, string penggantian pesan, dan data biner terkait.
public:
void WriteEvent(System::Diagnostics::EventInstance ^ instance, cli::array <System::Byte> ^ data, ... cli::array <System::Object ^> ^ values);
public void WriteEvent (System.Diagnostics.EventInstance instance, byte[] data, params object[] values);
[System.Runtime.InteropServices.ComVisible(false)]
public void WriteEvent (System.Diagnostics.EventInstance instance, byte[] data, params object[] values);
member this.WriteEvent : System.Diagnostics.EventInstance * byte[] * obj[] -> unit
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.WriteEvent : System.Diagnostics.EventInstance * byte[] * obj[] -> unit
Public Sub WriteEvent (instance As EventInstance, data As Byte(), ParamArray values As Object())
Parameter
- instance
- EventInstance
Instans EventInstance yang mewakili entri log peristiwa yang dilokalkan.
- data
- Byte[]
Array byte yang menyimpan data biner yang terkait dengan entri.
- values
- Object[]
Array string untuk digabungkan ke dalam teks pesan entri log peristiwa.
- Atribut
Pengecualian
Properti Source dari EventLog belum disetel.
-atau-
Metode ini mencoba mendaftarkan sumber kejadian baru, tetapi nama komputer di MachineName tidak valid.
-atau-
Sumber sudah terdaftar untuk log peristiwa yang berbeda.
-atau-
instance.InstanceId
kurang dari nol atau lebih besar dari UInt16.MaxValue.
-atau-
values
memiliki lebih dari 256 elemen.
-atau-
Salah values
satu elemen lebih panjang dari 32766 byte.
-atau-
Nama sumber menghasilkan jalur kunci registri yang lebih panjang dari 254 karakter.
instance
adalah null
.
Kunci registri untuk log peristiwa tidak dapat dibuka.
Sistem operasi melaporkan kesalahan saat menulis entri peristiwa ke log peristiwa. Kode galat Windows tidak tersedia.
Contoh
Contoh berikut menulis dua entri audit ke log myNewLog
peristiwa . Contoh membuat sumber peristiwa baru dan log peristiwa baru jika tidak ada di komputer lokal. Teks pesan peristiwa ditentukan menggunakan pengidentifikasi sumber daya dalam file sumber daya.
// Create the event source if it does not exist.
String^ sourceName = "SampleApplicationSource";
if ( !EventLog::SourceExists( sourceName ) )
{
// Call a local method to register the event log source
// for the event log "myNewLog." Use the resource file
// EventLogMsgs.dll in the current directory for message text.
String^ messageFile = String::Format( "{0}\\{1}", System::Environment::CurrentDirectory, "EventLogMsgs.dll" );
CreateEventSourceSample1( messageFile );
}
// Get the event log corresponding to the existing source.
String^ myLogName = EventLog::LogNameFromSourceName( sourceName, "." );
EventLog^ myEventLog = gcnew EventLog( myLogName,".",sourceName );
// Define two audit events.
// The message identifiers correspond to the message text in the
// message resource file defined for the source.
EventInstance ^ myAuditSuccessEvent = gcnew EventInstance( AuditSuccessMsgId,0,EventLogEntryType::SuccessAudit );
EventInstance ^ myAuditFailEvent = gcnew EventInstance( AuditFailedMsgId,0,EventLogEntryType::FailureAudit );
// Insert the method name into the event log message.
array<String^>^insertStrings = {"EventLogSamples.WriteEventSample1"};
// Write the events to the event log.
myEventLog->WriteEvent( myAuditSuccessEvent, insertStrings );
// Append binary data to the audit failure event entry.
array<Byte>^binaryData = {3,4,5,6};
myEventLog->WriteEvent( myAuditFailEvent, binaryData, insertStrings );
// Create the event source if it does not exist.
string sourceName = "SampleApplicationSource";
if(!EventLog.SourceExists(sourceName))
{
// Call a local method to register the event log source
// for the event log "myNewLog." Use the resource file
// EventLogMsgs.dll in the current directory for message text.
string messageFile = String.Format("{0}\\{1}",
System.Environment.CurrentDirectory,
"EventLogMsgs.dll");
CreateEventSourceSample1(messageFile);
}
// Get the event log corresponding to the existing source.
string myLogName = EventLog.LogNameFromSourceName(sourceName,".");
EventLog myEventLog = new EventLog(myLogName, ".", sourceName);
// Define two audit events.
// The message identifiers correspond to the message text in the
// message resource file defined for the source.
EventInstance myAuditSuccessEvent = new EventInstance(AuditSuccessMsgId, 0, EventLogEntryType.SuccessAudit);
EventInstance myAuditFailEvent = new EventInstance(AuditFailedMsgId, 0, EventLogEntryType.FailureAudit);
// Insert the method name into the event log message.
string [] insertStrings = {"EventLogSamples.WriteEventSample1"};
// Write the events to the event log.
myEventLog.WriteEvent(myAuditSuccessEvent, insertStrings);
// Append binary data to the audit failure event entry.
byte [] binaryData = { 3, 4, 5, 6 };
myEventLog.WriteEvent(myAuditFailEvent, binaryData, insertStrings);
Dim sourceName As String = "SampleApplicationSource"
' Create the event source if it does not exist.
If Not EventLog.SourceExists(sourceName)
' Call a local method to register the event log source
' for the event log "myNewLog." Use the resource file
' EventLogMsgs.dll in the current directory for message text.
Dim messageFile As String = String.Format("{0}\\{1}", _
System.Environment.CurrentDirectory, _
"EventLogMsgs.dll")
CreateEventSourceSample1(messageFile)
End If
' Get the event log corresponding to the existing source.
Dim myLogName As String = EventLog.LogNameFromSourceName(sourceName,".")
Dim myEventLog As EventLog = new EventLog(myLogName, ".", sourceName)
' Define two audit events.
Dim myAuditSuccessEvent As EventInstance = new EventInstance(AuditSuccessMsgId, 0, EventLogEntryType.SuccessAudit)
Dim myAuditFailEvent As EventInstance = new EventInstance(AuditFailedMsgId, 0, EventLogEntryType.FailureAudit)
' Insert the method name into the event log message.
Dim insertStrings() As String = {"EventLogSamples.WriteEventSample1"}
' Write the events to the event log.
myEventLog.WriteEvent(myAuditSuccessEvent, insertStrings)
' Append binary data to the audit failure event entry.
Dim binaryData() As Byte = { 7, 8, 9, 10 }
myEventLog.WriteEvent(myAuditFailEvent, binaryData, insertStrings)
Contohnya menggunakan file teks pesan berikut, yang disertakan dalam pustaka sumber daya EventLogMsgs.dll. File teks pesan adalah sumber tempat file sumber daya pesan dibuat. File teks pesan menentukan pengidentifikasi sumber daya dan teks untuk string kategori, pesan peristiwa, dan penyisipan parameter.
; // EventLogMsgs.mc
; // ********************************************************
; // Use the following commands to build this file:
; // mc -s EventLogMsgs.mc
; // rc EventLogMsgs.rc
; // link /DLL /SUBSYSTEM:WINDOWS /NOENTRY /MACHINE:x86 EventLogMsgs.Res
; // ********************************************************
; // - Event categories -
; // Categories must be numbered consecutively starting at 1.
; // ********************************************************
MessageId=0x1
Severity=Success
SymbolicName=INSTALL_CATEGORY
Language=English
Installation
.
MessageId=0x2
Severity=Success
SymbolicName=QUERY_CATEGORY
Language=English
Database Query
.
MessageId=0x3
Severity=Success
SymbolicName=REFRESH_CATEGORY
Language=English
Data Refresh
.
; // - Event messages -
; // *********************************
MessageId = 1000
Severity = Success
Facility = Application
SymbolicName = AUDIT_SUCCESS_MESSAGE_ID_1000
Language=English
My application message text, in English, for message id 1000, called from %1.
.
MessageId = 1001
Severity = Warning
Facility = Application
SymbolicName = AUDIT_FAILED_MESSAGE_ID_1001
Language=English
My application message text, in English, for message id 1001, called from %1.
.
MessageId = 1002
Severity = Success
Facility = Application
SymbolicName = GENERIC_INFO_MESSAGE_ID_1002
Language=English
My generic information message in English, for message id 1002.
.
MessageId = 1003
Severity = Warning
Facility = Application
SymbolicName = GENERIC_WARNING_MESSAGE_ID_1003
Language=English
My generic warning message in English, for message id 1003, called from %1.
.
MessageId = 1004
Severity = Success
Facility = Application
SymbolicName = UPDATE_CYCLE_COMPLETE_MESSAGE_ID_1004
Language=English
The update cycle is complete for %%5002.
.
MessageId = 1005
Severity = Warning
Facility = Application
SymbolicName = SERVER_CONNECTION_DOWN_MESSAGE_ID_1005
Language=English
The refresh operation did not complete because the connection to server %1 could not be established.
.
; // - Event log display name -
; // ********************************************************
MessageId = 5001
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_DISPLAY_NAME_MSGID
Language=English
Sample Event Log
.
; // - Event message parameters -
; // Language independent insertion strings
; // ********************************************************
MessageId = 5002
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_SERVICE_NAME_MSGID
Language=English
SVC_UPDATE.EXE
.
Keterangan
Gunakan metode ini untuk menulis entri yang dilokalkan dengan data khusus peristiwa tambahan ke log peristiwa. Anda menentukan properti peristiwa dengan pengidentifikasi sumber daya daripada nilai string. Pemantau Peristiwa menggunakan pengidentifikasi sumber daya untuk menampilkan string yang sesuai dari file sumber daya yang dilokalkan untuk Source. Anda harus mendaftarkan sumber dengan file sumber daya yang sesuai sebelum menulis peristiwa menggunakan pengidentifikasi sumber daya.
Instans input instance
menentukan pesan peristiwa dan properti. Atur InstanceId input instance
untuk pesan yang ditentukan dalam file sumber daya pesan sumber. Anda dapat secara opsional mengatur CategoryId dan EntryType input instance
untuk menentukan kategori dan jenis peristiwa entri peristiwa Anda. Anda juga dapat menentukan array string independen bahasa untuk disisipkan ke dalam teks pesan yang dilokalkan. Atur values
ke null
jika pesan peristiwa tidak berisi tempat penampung pemformatan untuk string pengganti.
Tentukan data biner dengan peristiwa saat diperlukan untuk memberikan detail tambahan untuk peristiwa tersebut. Misalnya, gunakan data
parameter untuk menyertakan informasi tentang kesalahan tertentu. Pemantau Peristiwa tidak menginterpretasikan data peristiwa terkait; menampilkan data dalam format heksadesimal dan teks gabungan. Gunakan data khusus peristiwa dengan hemat; sertakan hanya jika Anda yakin itu akan berguna. Anda juga dapat menggunakan data khusus peristiwa untuk menyimpan informasi yang dapat diproses aplikasi secara independen dari Pemantau Peristiwa. Misalnya, Anda dapat menulis penampil khusus untuk peristiwa Anda, atau menulis program yang memindai log peristiwa dan membuat laporan yang menyertakan informasi dari data khusus peristiwa.
Anda harus mengatur Source properti pada komponen Anda EventLog sebelum menggunakan WriteEvent. Sumber yang ditentukan harus dikonfigurasi untuk menulis entri yang dilokalkan ke log; sumber harus minimal memiliki file sumber daya pesan yang ditentukan.
Anda harus membuat dan mengonfigurasi sumber peristiwa sebelum menulis entri pertama dengan sumbernya. Create sumber peristiwa baru selama penginstalan aplikasi Anda. Ini memungkinkan waktu bagi sistem operasi untuk merefresh daftar sumber peristiwa terdaftar dan konfigurasinya. Jika sistem operasi belum merefresh daftar sumber peristiwanya, dan Anda mencoba menulis peristiwa dengan sumber baru, operasi tulis akan gagal. Anda dapat mengonfigurasi sumber baru menggunakan EventLogInstaller, atau menggunakan CreateEventSource metode . Anda harus memiliki hak administratif pada komputer untuk membuat sumber kejadian baru.
Catatan
Jika Anda tidak menentukan MachineName untuk instans Anda EventLog sebelum memanggil WriteEvent, komputer lokal (".") diasumsikan.
Sumber harus dikonfigurasi baik untuk menulis entri yang dilokalkan atau untuk menulis string langsung. WriteEntry Gunakan metode jika aplikasi Anda menulis nilai string langsung ke log peristiwa.
Jika aplikasi Anda menulis entri menggunakan pengidentifikasi sumber daya dan nilai string, Anda harus mendaftarkan dua sumber terpisah. Misalnya, konfigurasikan satu sumber dengan file sumber daya, lalu gunakan sumber tersebut WriteEvent dalam metode untuk menulis entri menggunakan pengidentifikasi sumber daya ke log peristiwa. Kemudian buat sumber yang berbeda tanpa file sumber daya, dan gunakan sumber tersebut WriteEntry dalam metode untuk menulis string langsung ke log peristiwa menggunakan sumber tersebut.
Catatan
Jika Anda menulis entri ke komputer jarak jauh, nilai message
string mungkin bukan yang Anda harapkan jika komputer jarak jauh tidak menjalankan .NET Framework. Selain itu message
, string tidak boleh berisi %n, di mana n adalah nilai bilangan bulat (misalnya, %1), karena penampil peristiwa memperlakukannya sebagai string penyisipan. Karena alamat Protokol Internet versi 6 (IPv6) dapat berisi urutan karakter ini, Anda tidak dapat mencatat pesan peristiwa yang berisi alamat IPv6.
Lihat juga
Berlaku untuk
WriteEvent(String, EventInstance, Byte[], Object[])
- Sumber:
- EventLog.cs
- Sumber:
- EventLog.cs
- Sumber:
- EventLog.cs
Menulis entri log peristiwa dengan data peristiwa yang diberikan, string penggantian pesan, dan data biner terkait, dan menggunakan sumber peristiwa terdaftar yang ditentukan.
public:
static void WriteEvent(System::String ^ source, System::Diagnostics::EventInstance ^ instance, cli::array <System::Byte> ^ data, ... cli::array <System::Object ^> ^ values);
public static void WriteEvent (string source, System.Diagnostics.EventInstance instance, byte[] data, params object[] values);
static member WriteEvent : string * System.Diagnostics.EventInstance * byte[] * obj[] -> unit
Public Shared Sub WriteEvent (source As String, instance As EventInstance, data As Byte(), ParamArray values As Object())
Parameter
- source
- String
Nama sumber peristiwa yang terdaftar untuk aplikasi pada komputer yang ditentukan.
- instance
- EventInstance
Instans EventInstance yang mewakili entri log peristiwa yang dilokalkan.
- data
- Byte[]
Array byte yang menyimpan data biner yang terkait dengan entri.
- values
- Object[]
Array string untuk digabungkan ke dalam teks pesan entri log peristiwa.
Pengecualian
Nilainya source
adalah string kosong ("").
-atau-
Nilai source
adalah null
.
-atau-
instance.InstanceId
kurang dari nol atau lebih besar dari UInt16.MaxValue.
-atau-
values
memiliki lebih dari 256 elemen.
-atau-
Salah values
satu elemen lebih panjang dari 32766 byte.
-atau-
Nama sumber menghasilkan jalur kunci registri yang lebih panjang dari 254 karakter.
instance
adalah null
.
Kunci registri untuk log peristiwa tidak dapat dibuka.
Sistem operasi melaporkan kesalahan saat menulis entri peristiwa ke log peristiwa. Kode galat Windows tidak tersedia.
Contoh
Contoh berikut menulis entri peristiwa informasi dan entri peristiwa peringatan ke log peristiwa yang ada. Teks pesan peristiwa ditentukan menggunakan pengidentifikasi sumber daya dalam file sumber daya. Contoh mengasumsikan file sumber daya yang sesuai telah didaftarkan untuk sumbernya.
String^ sourceName = "SampleApplicationSource";
if ( EventLog::SourceExists( sourceName ) )
{
// Define an informational event and a warning event.
// The message identifiers correspond to the message text in the
// message resource file defined for the source.
EventInstance ^ myInfoEvent = gcnew EventInstance( InformationMsgId,0,EventLogEntryType::Information );
EventInstance ^ myWarningEvent = gcnew EventInstance( WarningMsgId,0,EventLogEntryType::Warning );
// Insert the method name into the event log message.
array<String^>^insertStrings = {"EventLogSamples.WriteEventSample2"};
// Write the events to the event log.
EventLog::WriteEvent( sourceName, myInfoEvent, 0 );
// Append binary data to the warning event entry.
array<Byte>^binaryData = {7,8,9,10};
EventLog::WriteEvent( sourceName, myWarningEvent, binaryData, insertStrings );
}
else
{
Console::WriteLine( "Warning - event source {0} not registered", sourceName );
}
string sourceName = "SampleApplicationSource";
if(EventLog.SourceExists(sourceName))
{
// Define an informational event and a warning event.
// The message identifiers correspond to the message text in the
// message resource file defined for the source.
EventInstance myInfoEvent = new EventInstance(InformationMsgId, 0, EventLogEntryType.Information);
EventInstance myWarningEvent = new EventInstance(WarningMsgId, 0, EventLogEntryType.Warning);
// Insert the method name into the event log message.
string [] insertStrings = {"EventLogSamples.WriteEventSample2"};
// Write the events to the event log.
EventLog.WriteEvent(sourceName, myInfoEvent);
// Append binary data to the warning event entry.
byte [] binaryData = { 7, 8, 9, 10 };
EventLog.WriteEvent(sourceName, myWarningEvent, binaryData, insertStrings);
}
else
{
Console.WriteLine("Warning - event source {0} not registered",
sourceName);
}
Dim sourceName As String = "SampleApplicationSource"
If EventLog.SourceExists(sourceName)
' Define an informational event and a warning event.
' The message identifiers correspond to the message text in the
' message resource file defined for the source.
Dim myInfoEvent As EventInstance = new EventInstance(InformationMsgId, 0, EventLogEntryType.Information)
Dim myWarningEvent As EventInstance = new EventInstance(WarningMsgId, 0, EventLogEntryType.Warning)
' Insert the method name into the event log message.
Dim insertStrings() As String = {"EventLogSamples.WriteEventSample2"}
' Write the events to the event log.
EventLog.WriteEvent(sourceName, myInfoEvent, insertStrings)
' Append binary data to the warning event entry.
Dim binaryData() As Byte = { 7, 8, 9, 10 }
EventLog.WriteEvent(sourceName, myWarningEvent, binaryData, insertStrings)
Else
Console.WriteLine("Warning - event source {0} not registered", _
sourceName)
End If
Contohnya menggunakan file teks pesan berikut, yang disertakan dalam pustaka sumber daya EventLogMsgs.dll. File teks pesan adalah sumber tempat file sumber daya pesan dibuat. File teks pesan menentukan pengidentifikasi sumber daya dan teks untuk string kategori, pesan peristiwa, dan penyisipan parameter.
; // EventLogMsgs.mc
; // ********************************************************
; // Use the following commands to build this file:
; // mc -s EventLogMsgs.mc
; // rc EventLogMsgs.rc
; // link /DLL /SUBSYSTEM:WINDOWS /NOENTRY /MACHINE:x86 EventLogMsgs.Res
; // ********************************************************
; // - Event categories -
; // Categories must be numbered consecutively starting at 1.
; // ********************************************************
MessageId=0x1
Severity=Success
SymbolicName=INSTALL_CATEGORY
Language=English
Installation
.
MessageId=0x2
Severity=Success
SymbolicName=QUERY_CATEGORY
Language=English
Database Query
.
MessageId=0x3
Severity=Success
SymbolicName=REFRESH_CATEGORY
Language=English
Data Refresh
.
; // - Event messages -
; // *********************************
MessageId = 1000
Severity = Success
Facility = Application
SymbolicName = AUDIT_SUCCESS_MESSAGE_ID_1000
Language=English
My application message text, in English, for message id 1000, called from %1.
.
MessageId = 1001
Severity = Warning
Facility = Application
SymbolicName = AUDIT_FAILED_MESSAGE_ID_1001
Language=English
My application message text, in English, for message id 1001, called from %1.
.
MessageId = 1002
Severity = Success
Facility = Application
SymbolicName = GENERIC_INFO_MESSAGE_ID_1002
Language=English
My generic information message in English, for message id 1002.
.
MessageId = 1003
Severity = Warning
Facility = Application
SymbolicName = GENERIC_WARNING_MESSAGE_ID_1003
Language=English
My generic warning message in English, for message id 1003, called from %1.
.
MessageId = 1004
Severity = Success
Facility = Application
SymbolicName = UPDATE_CYCLE_COMPLETE_MESSAGE_ID_1004
Language=English
The update cycle is complete for %%5002.
.
MessageId = 1005
Severity = Warning
Facility = Application
SymbolicName = SERVER_CONNECTION_DOWN_MESSAGE_ID_1005
Language=English
The refresh operation did not complete because the connection to server %1 could not be established.
.
; // - Event log display name -
; // ********************************************************
MessageId = 5001
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_DISPLAY_NAME_MSGID
Language=English
Sample Event Log
.
; // - Event message parameters -
; // Language independent insertion strings
; // ********************************************************
MessageId = 5002
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_SERVICE_NAME_MSGID
Language=English
SVC_UPDATE.EXE
.
Keterangan
Gunakan metode ini untuk menulis entri yang dilokalkan dengan data khusus peristiwa tambahan ke log peristiwa, menggunakan sumber yang sudah terdaftar sebagai sumber peristiwa untuk log yang sesuai. Anda menentukan properti peristiwa dengan pengidentifikasi sumber daya daripada nilai string. Pemantau Peristiwa menggunakan pengidentifikasi sumber daya untuk menampilkan string yang sesuai dari file sumber daya yang dilokalkan untuk sumber. Anda harus mendaftarkan sumber dengan file sumber daya yang sesuai sebelum menulis peristiwa menggunakan pengidentifikasi sumber daya.
Instans input instance
menentukan pesan peristiwa dan properti. Atur InstanceId input instance
untuk pesan yang ditentukan dalam file sumber daya pesan sumber. Anda dapat secara opsional mengatur CategoryId dan EntryType input instance
untuk menentukan kategori dan jenis peristiwa entri peristiwa Anda. Anda juga dapat menentukan array string independen bahasa untuk disisipkan ke dalam teks pesan yang dilokalkan. Atur values
ke null
jika pesan peristiwa tidak berisi tempat penampung pemformatan untuk string pengganti.
Tentukan data biner dengan peristiwa ketika perlu untuk memberikan detail tambahan untuk peristiwa tersebut. Misalnya, gunakan data
parameter untuk menyertakan informasi tentang kesalahan tertentu. Pemantau Peristiwa tidak menginterpretasikan data peristiwa terkait; data ditampilkan dalam format heksadesimal dan teks gabungan. Gunakan data khusus peristiwa dengan hemat; sertakan hanya jika Anda yakin itu akan berguna. Anda juga dapat menggunakan data khusus peristiwa untuk menyimpan informasi yang dapat diproses aplikasi secara independen dari Pemantau Peristiwa. Misalnya, Anda dapat menulis penampil khusus untuk peristiwa Anda, atau menulis program yang memindai log peristiwa dan membuat laporan yang menyertakan informasi dari data khusus peristiwa.
Sumber yang ditentukan harus didaftarkan untuk log peristiwa sebelum menggunakan WriteEvent. Sumber yang ditentukan harus dikonfigurasi untuk menulis entri yang dilokalkan ke log; sumber harus minimal memiliki file sumber daya pesan yang ditentukan.
Anda harus membuat dan mengonfigurasi sumber kejadian sebelum menulis entri pertama dengan sumbernya. Create sumber kejadian baru selama penginstalan aplikasi Anda. Ini memungkinkan waktu bagi sistem operasi untuk me-refresh daftar sumber peristiwa terdaftar dan konfigurasinya. Jika sistem operasi belum merefresh daftar sumber peristiwanya, dan Anda mencoba menulis peristiwa dengan sumber baru, operasi tulis akan gagal. Anda dapat mengonfigurasi sumber baru menggunakan EventLogInstaller, atau menggunakan CreateEventSource metode . Anda harus memiliki hak administratif pada komputer untuk membuat sumber kejadian baru.
Sumber harus dikonfigurasi baik untuk menulis entri yang dilokalkan atau untuk menulis string langsung. WriteEntry Gunakan metode jika aplikasi Anda menulis nilai string langsung ke log peristiwa.
Jika aplikasi Anda menulis entri menggunakan pengidentifikasi sumber daya dan nilai string, Anda harus mendaftarkan dua sumber terpisah. Misalnya, konfigurasikan satu sumber dengan file sumber daya, lalu gunakan sumber tersebut WriteEvent dalam metode untuk menulis entri menggunakan pengidentifikasi sumber daya ke log peristiwa. Kemudian buat sumber yang berbeda tanpa file sumber daya, dan gunakan sumber tersebut WriteEntry dalam metode untuk menulis string langsung ke log peristiwa menggunakan sumber tersebut.