12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using Azure.Storage.Blobs;
- using Azure.Storage.Blobs.Models;
- using Microsoft.Extensions.Logging;
- using Microsoft.Extensions.Options;
- using System.IO;
- using System.Text;
- using System;
- using TEAMModelOS.SDK.DI;
- using Azure;
- using Azure.Storage.Blobs.Specialized;
- using System.Threading.Tasks;
- namespace TEAMModelOS.Filter
- {
- public class BlobLoggerProvider: ILoggerProvider
- {
- private readonly AzureStorageFactory _storageFactory;
- public BlobLoggerProvider(AzureStorageFactory storageFactory)
- {
- _storageFactory=storageFactory;
- var container = _storageFactory.GetBlobContainerClient("0-service-log");
- container.CreateIfNotExists(PublicAccessType.None); //嘗試創建School容器,如存在則不做任何事,保障容器一定存在
- }
- public ILogger CreateLogger(string categoryName)
- {
- return new BlobLogger(categoryName, _storageFactory.GetBlobContainerClient("0-service-log"));
- }
- public void Dispose()
- {
- // Dispose any resources used by the provider.
- }
- }
- public class BlobLogger : ILogger
- {
- private readonly string _categoryName;
- private readonly BlobContainerClient _containerClient;
- public BlobLogger(string categoryName, BlobContainerClient containerClient)
- {
- _categoryName = categoryName;
- _containerClient = containerClient;
- }
- public IDisposable BeginScope<TState>(TState state)
- {
- return null;
- }
- public bool IsEnabled(LogLevel logLevel)
- {
- return true;
- }
- public async void Log<TState> ( LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
- {
- if (formatter == null)
- {
- throw new ArgumentNullException(nameof(formatter));
- }
- var message = formatter(state, exception);
- var appendBlob = _containerClient.GetAppendBlobClient($"{_categoryName}/{DateTimeOffset.UtcNow:yyyy-MM-dd}.log");
- // var blobClient = _containerClient.GetBlobClient($"{_categoryName}/{DateTimeOffset.UtcNow:yyyy-MM-dd}.log");
- if (!appendBlob.Exists())
- {
- await appendBlob.CreateAsync();
- using var stream = new MemoryStream(Encoding.UTF8.GetBytes(message));
- await appendBlob.AppendBlockAsync(stream);
- }
- else {
- using var stream = new MemoryStream(Encoding.UTF8.GetBytes($"\n,{message}"));
- await appendBlob.AppendBlockAsync(stream);
- }
- }
- }
- }
|